From b425eeb61f97a8eca30bceea5e1ad48907a7b7dd Mon Sep 17 00:00:00 2001 From: Luigi Date: Sat, 1 Jun 2024 09:16:14 -0300 Subject: [PATCH 01/37] feat: Add signup/login --- a.ts | 24 + checkout/actions/login.ts | 42 + checkout/actions/signupCompany.ts | 120 + checkout/actions/signupPerson.ts | 128 + checkout/graphql/queries.ts | 843 + checkout/graphql/storefront.graphql.gen.ts | 4890 +++ checkout/graphql/storefront.graphql.json | 27810 +++++++++++++++++ checkout/logo.png | Bin 0 -> 165326 bytes checkout/manifest.gen.ts | 21 + checkout/mod.ts | 35 + checkout/utils/parseHeaders.ts | 18 + deco.ts | 1 + decohub/apps/checkout.ts | 1 + decohub/manifest.gen.ts | 94 +- wake/utils/graphql/queries.ts | 14 +- wake/utils/graphql/storefront.graphql.gen.ts | 7 + 16 files changed, 34000 insertions(+), 48 deletions(-) create mode 100644 a.ts create mode 100644 checkout/actions/login.ts create mode 100644 checkout/actions/signupCompany.ts create mode 100644 checkout/actions/signupPerson.ts create mode 100644 checkout/graphql/queries.ts create mode 100644 checkout/graphql/storefront.graphql.gen.ts create mode 100644 checkout/graphql/storefront.graphql.json create mode 100644 checkout/logo.png create mode 100644 checkout/manifest.gen.ts create mode 100644 checkout/mod.ts create mode 100644 checkout/utils/parseHeaders.ts create mode 100644 decohub/apps/checkout.ts diff --git a/a.ts b/a.ts new file mode 100644 index 000000000..417a82247 --- /dev/null +++ b/a.ts @@ -0,0 +1,24 @@ +import "npm:@graphql-codegen/typescript"; +import "npm:@graphql-codegen/typescript-operations"; + +import { type CodegenConfig, generate } from "npm:@graphql-codegen/cli"; + +const config: CodegenConfig = { + schema: "https://storefront-api.fbits.net/graphql", + documents: "./checkout/graphql/queries.ts", + generates: { + "./checkout/graphql/storefront.graphql.gen.ts": { + // This order matters + plugins: [ + "typescript", + "typescript-operations", + ], + config: { + skipTypename: true, + enumsAsTypes: true, + }, + }, + }, +}; + +await generate({ ...config }, true); diff --git a/checkout/actions/login.ts b/checkout/actions/login.ts new file mode 100644 index 000000000..92d0759a9 --- /dev/null +++ b/checkout/actions/login.ts @@ -0,0 +1,42 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { CustomerAuthenticatedLogin } from "../../checkout/graphql/queries.ts"; +import { setCookie } from "std/http/cookie.ts"; + +export default async function ( + props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); + + if (customerAuthenticatedLogin) { + setCookie(response.headers, { + name: "customerAccessToken", + value: customerAuthenticatedLogin.token as string, + expires: new Date(customerAuthenticatedLogin.validUntil), + }); + } + + return customerAuthenticatedLogin; +} + +export interface Props { + /** + * Email + */ + input: string; + /** + * Senha + */ + pass: string; +} diff --git a/checkout/actions/signupCompany.ts b/checkout/actions/signupCompany.ts new file mode 100644 index 000000000..bc3312813 --- /dev/null +++ b/checkout/actions/signupCompany.ts @@ -0,0 +1,120 @@ +import { CustomerCreate } from "../graphql/queries.ts"; +import type { + CustomerCreateMutation, + CustomerCreateMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customercreate +export default async function ( + props: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customerCreate } = await storefront.query< + CustomerCreateMutation, + CustomerCreateMutationVariables + >( + { + variables: { input: { ...props, customerType: "COMPANY" } }, + ...CustomerCreate, + }, + { headers }, + ); + + return customerCreate ?? null; +} + +interface Props { + /** + * Endereço + */ + address: string; + /** + * Complemento + */ + addressComplement: string; + /** + * Número do endereço + */ + addressNumber: string; + /** + * CEP + */ + cep: string; + /** + * Cidade + */ + city: string; + /** + * CNPJ + */ + cnpj: string; + /** + * Nome da empresa + */ + corporateName: string; + /** + * Email + */ + email: string; + /** + * Isento de inscrição estadual + */ + isStateRegistrationExempt?: boolean; + /** + * Bairro + */ + neighborhood: string; + /** + * Aceitar assinar newsletter? + */ + newsletter?: boolean; + /** + * Senha de cadastro + */ + password: string; + /** + * Confirmação da senha de cadastro + */ + passwordConfirmation: string; + /** + * DDD do telefone principal do cliente + */ + primaryPhoneAreaCode: string; + /** + * Telefone principal do cliente (xxxxx-xxxx) + */ + primaryPhoneNumber: string; + /** + * Nome do destinatário + */ + receiverName: string; + /** + * Referência de endereço + */ + reference?: string; + /** + * É revendedor? + */ + reseller?: boolean; + /** + * DDD do telefone secundário do cliente + */ + secondaryPhoneAreaCode?: string; + /** + * Telefone secundário do cliente (xxxxx-xxxx) + */ + secondaryPhoneNumber?: string; + /** + * Estado do endereço + */ + state: string; + /** + * Inscrição estadual da empresa + */ + stateRegistration?: string; +} diff --git a/checkout/actions/signupPerson.ts b/checkout/actions/signupPerson.ts new file mode 100644 index 000000000..af61f476b --- /dev/null +++ b/checkout/actions/signupPerson.ts @@ -0,0 +1,128 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CustomerCreateMutation, + CustomerCreateMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { CustomerCreate } from "../graphql/queries.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customercreate +export default async function ( + props: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customerCreate } = await storefront.query< + CustomerCreateMutation, + CustomerCreateMutationVariables + >( + { + variables: { input: { ...props, customerType: "PERSON" } }, + ...CustomerCreate, + }, + { headers }, + ); + + return customerCreate ?? null; +} + +interface Props { + /** + * Endereço + */ + address: string; + /** + * Complemento + */ + addressComplement: string; + /** + * Número do endereço + */ + addressNumber: string; + /** + * Data de nascimento (DD/MM/AAAA) + */ + birthDate: Date | string; + /** + * CEP + */ + cep: string; + /** + * Cidade + */ + city: string; + /** + * CPF + */ + cpf: string; + /** + * Email + */ + email: string; + /** + * Nome completo + */ + fullName: string; + /** + * Gênero + */ + gender: "MALE" | "FEMALE"; + /** + * Isento de inscrição estadual + */ + isStateRegistrationExempt?: boolean; + /** + * Bairro + */ + neighborhood: string; + /** + * Aceitar assinar newsletter? + */ + newsletter?: boolean; + /** + * Senha de cadastro + */ + password: string; + /** + * Confirmação da senha de cadastro + */ + passwordConfirmation: string; + /** + * DDD do telefone principal do cliente + */ + primaryPhoneAreaCode: string; + /** + * Telefone principal do cliente (xxxxx-xxxx) + */ + primaryPhoneNumber: string; + /** + * Nome do destinatário + */ + receiverName: string; + /** + * Referência de endereço + */ + reference?: string; + /** + * É revendedor? + */ + reseller?: boolean; + /** + * DDD do telefone secundário do cliente + */ + secondaryPhoneAreaCode?: string; + /** + * Telefone secundário do cliente (xxxxx-xxxx) + */ + secondaryPhoneNumber?: string; + /** + * Estado do endereço + */ + state: string; + /** + * Inscrição estadual da empresa + */ + stateRegistration?: string; +} diff --git a/checkout/graphql/queries.ts b/checkout/graphql/queries.ts new file mode 100644 index 000000000..1ccfcbae3 --- /dev/null +++ b/checkout/graphql/queries.ts @@ -0,0 +1,843 @@ +import { gql } from "../../utils/graphql.ts"; + +const Checkout = gql` +fragment Checkout on Checkout { + checkoutId + shippingFee + subtotal + total + completed + coupon + products { + imageUrl + brand + ajustedPrice + listPrice + price + name + productId + productVariantId + quantity + sku + url + } +} +`; + +const Product = gql` +fragment Product on Product { + mainVariant + productName + productId + alias + attributes { + value + name + } + productCategories { + name + url + hierarchy + main + googleCategories + } + informations { + title + value + type + } + available + averageRating + condition + createdAt + ean + id + images { + url + fileName + print + } + minimumOrderQuantity + prices { + bestInstallment { + discount + displayName + fees + name + number + value + } + discountPercentage + discounted + installmentPlans { + displayName + installments { + discount + fees + number + value + } + name + } + listPrice + multiplicationFactor + price + priceTables { + discountPercentage + id + listPrice + price + } + wholesalePrices { + price + quantity + } + } + productBrand { + fullUrlLogo + logoUrl + name + alias + } + productVariantId + seller { + name + } + parentId + sku + numberOfVotes + stock + variantName + variantStock + collection + urlVideo + similarProducts { + alias + image + imageUrl + name + } + promotions { + content + disclosureType + id + fullStampUrl + stamp + title + } + # parallelOptions +} +`; + +const ProductVariant = gql` +fragment ProductVariant on ProductVariant { + + aggregatedStock + alias + available + attributes { + attributeId + displayType + id + name + type + value + } + ean + id + images { + fileName + mini + order + print + url + } + productId + productVariantId + productVariantName + sku + stock + prices { + discountPercentage + discounted + installmentPlans { + displayName + name + installments { + discount + fees + number + value + } + } + listPrice + multiplicationFactor + price + priceTables { + discountPercentage + id + listPrice + price + } + wholesalePrices { + price + quantity + } + bestInstallment { + discount + displayName + fees + name + number + value + } + } + offers { + name + prices { + installmentPlans { + displayName + installments { + discount + fees + number + value + } + } + listPrice + price + } + productVariantId + } + promotions { + content + disclosureType + id + fullStampUrl + stamp + title + } +}`; + +const SingleProductPart = gql` +fragment SingleProductPart on SingleProduct { + mainVariant + productName + productId + alias + collection + attributes { + name + type + value + attributeId + displayType + id + } + numberOfVotes + productCategories { + name + url + hierarchy + main + googleCategories + } + informations { + title + value + type + } + available + averageRating + breadcrumbs { + text + link + } + condition + createdAt + ean + id + images { + url + fileName + print + } + minimumOrderQuantity + prices { + bestInstallment { + discount + displayName + fees + name + number + value + } + discountPercentage + discounted + installmentPlans { + displayName + installments { + discount + fees + number + value + } + name + } + listPrice + multiplicationFactor + price + priceTables { + discountPercentage + id + listPrice + price + } + wholesalePrices { + price + quantity + } + } + productBrand { + fullUrlLogo + logoUrl + name + alias + } + productVariantId + seller { + name + } + seo { + name + scheme + type + httpEquiv + content + } + sku + stock + variantName + parallelOptions + urlVideo + reviews { + rating + review + reviewDate + email + customer + } + similarProducts { + alias + image + imageUrl + name + } + attributeSelections { + selections { + attributeId + displayType + name + varyByParent + values { + alias + available + value + selected + printUrl + } + } + canBeMatrix + matrix { + column { + displayType + name + values { + value + } + } + data { + available + productVariantId + stock + } + row { + displayType + name + values { + value + printUrl + } + } + } + selectedVariant { + ...ProductVariant + } + candidateVariant { + ...ProductVariant + } + }, + promotions { + content + disclosureType + id + fullStampUrl + stamp + title + } + +} +`; + +const SingleProduct = gql` +fragment SingleProduct on SingleProduct { + ...SingleProductPart, + buyTogether { + productId + } +} + +`; + +const RestockAlertNode = gql` + fragment RestockAlertNode on RestockAlertNode { + email, + name, + productVariantId, + requestDate + } +`; + +const NewsletterNode = gql` + fragment NewsletterNode on NewsletterNode { + email, + name, + createDate, + updateDate + } +`; + +const ShippingQuote = gql` + fragment ShippingQuote on ShippingQuote { + id + type + name + value + deadline + shippingQuoteId + deliverySchedules { + date + periods { + end + id + start + } + } + products { + productVariantId + value + } + } +`; + +export const Customer = gql` + fragment Customer on Customer { + id + email + gender + customerId + companyName + customerName + customerType + responsibleName + informationGroups { + exibitionName + name + } + } +`; + +export const WishlistReducedProduct = gql` + fragment WishlistReducedProduct on Product { + productId + productName + } +`; + +export const GetProduct = { + fragments: [SingleProductPart, SingleProduct, ProductVariant], + query: gql`query GetProduct($productId: Long!) { + product(productId: $productId) { + ...SingleProduct + + } + }`, +}; + +export const GetCart = { + fragments: [Checkout], + query: gql`query GetCart($checkoutId: String!) { + checkout(checkoutId: $checkoutId) { ...Checkout } + }`, +}; + +export const CreateCart = { + fragments: [Checkout], + query: gql`mutation CreateCart { checkout: createCheckout { ...Checkout } }`, +}; + +export const GetProducts = { + fragments: [Product], + query: + gql`query GetProducts($filters: ProductExplicitFiltersInput!, $first: Int!, $sortDirection: SortDirection!, $sortKey: ProductSortKeys, $after: String) { products(filters: $filters, first: $first, sortDirection: $sortDirection, sortKey: $sortKey, after: $after) { + nodes { ...Product } + totalCount + pageInfo{ + hasNextPage, + endCursor, + hasPreviousPage, + startCursor + } + }}`, +}; + +export const Search = { + fragments: [Product], + query: + gql`query Search($operation: Operation!, $query: String, $onlyMainVariant: Boolean, $minimumPrice: Decimal, $maximumPrice: Decimal , $limit: Int, $offset: Int, $sortDirection: SortDirection, $sortKey: ProductSearchSortKeys, $filters: [ProductFilterInput]) { + result: search(query: $query, operation: $operation) { + aggregations { + maximumPrice + minimumPrice + priceRanges { + quantity + range + } + filters { + field + origin + values { + quantity + name + } + } + } + breadcrumbs { + link + text + } + forbiddenTerm { + text + suggested + } + pageSize + redirectUrl + searchTime + productsByOffset( + filters: $filters, + limit: $limit, + maximumPrice: $maximumPrice, + minimumPrice: $minimumPrice, + onlyMainVariant: $onlyMainVariant + offset: $offset, + sortDirection: $sortDirection, + sortKey: $sortKey + ) { + items { + ...Product + } + page + pageSize + totalCount + } + + } + }`, +}; + +export const AddCoupon = { + fragments: [Checkout], + query: gql`mutation AddCoupon($checkoutId: Uuid!, $coupon: String!) { + checkout: checkoutAddCoupon( + checkoutId: $checkoutId + coupon: $coupon + ) { ...Checkout } + }`, +}; + +export const AddItemToCart = { + fragments: [Checkout], + query: gql`mutation AddItemToCart($input: CheckoutProductInput!) { + checkout: checkoutAddProduct(input: $input) { ...Checkout } + }`, +}; + +export const RemoveCoupon = { + fragments: [Checkout], + query: gql`mutation RemoveCoupon($checkoutId: Uuid!) { + checkout: checkoutRemoveCoupon(checkoutId: $checkoutId) { + ...Checkout + } + }`, +}; + +export const RemoveItemFromCart = { + fragments: [Checkout], + query: gql`mutation RemoveItemFromCart($input: CheckoutProductInput!) { + checkout: checkoutRemoveProduct(input: $input) { ...Checkout } + }`, +}; + +export const ProductRestockAlert = { + fragments: [RestockAlertNode], + query: gql`mutation ProductRestockAlert($input: RestockAlertInput!) { + productRestockAlert(input: $input) { ...RestockAlertNode } + }`, +}; + +export const WishlistAddProduct = { + fragments: [Product], + query: + gql`mutation WishlistAddProduct($customerAccessToken: String!, $productId: Long!) { + wishlistAddProduct(customerAccessToken: $customerAccessToken, productId: $productId) { ...Product } + }`, +}; + +export const WishlistRemoveProduct = { + fragments: [Product], + query: + gql`mutation WishlistRemoveProduct($customerAccessToken: String!, $productId: Long!) { + wishlistRemoveProduct(customerAccessToken: $customerAccessToken, productId: $productId) { ...Product } + }`, +}; + +export const CreateNewsletterRegister = { + fragments: [NewsletterNode], + query: gql`mutation CreateNewsletterRegister($input: NewsletterInput!) { + createNewsletterRegister(input: $input) { ...NewsletterNode } + }`, +}; + +export const Autocomplete = { + fragments: [Product], + query: + gql`query Autocomplete($limit: Int, $query: String, $partnerAccessToken: String) { + autocomplete(limit: $limit, query: $query , partnerAccessToken: $partnerAccessToken ) { + suggestions, + products { + ...Product + } + } + }`, +}; + +export const ProductRecommendations = { + fragments: [Product], + query: gql`query ProductRecommendations( + $productId: Long!, + $algorithm: ProductRecommendationAlgorithm!, + $partnerAccessToken: String, + $quantity: Int! + ) { + productRecommendations(productId: $productId, algorithm: $algorithm, partnerAccessToken: $partnerAccessToken, quantity: $quantity) { + ...Product + } + }`, +}; + +export const ShippingQuotes = { + fragments: [ShippingQuote], + query: + gql`query ShippingQuotes($cep: CEP,$checkoutId: Uuid, $productVariantId: Long,$quantity: Int = 1, $useSelectedAddress: Boolean){ + shippingQuotes(cep: $cep,checkoutId: $checkoutId,productVariantId: $productVariantId,quantity: $quantity, useSelectedAddress: $useSelectedAddress){ + ...ShippingQuote + } + }`, +}; + +export const GetUser = { + fragments: [Customer], + query: gql`query getUser($customerAccessToken: String){ + customer(customerAccessToken: $customerAccessToken) { + ...Customer + } + }`, +}; + +export const GetWishlist = { + fragments: [WishlistReducedProduct], + query: gql`query getWislist($customerAccessToken: String){ + customer(customerAccessToken: $customerAccessToken) { + wishlist { + products { + ...WishlistReducedProduct + } + } + } + }`, +}; + +export const GetURL = { + query: gql`query getURL($url: String!) { + uri(url: $url) { + hotsiteSubtype + kind + partnerSubtype + productAlias + productCategoriesIds + redirectCode + redirectUrl + } + }`, +}; + +export const CreateProductReview = { + query: + gql`mutation createProductReview ($email: String!, $name: String!, $productVariantId: Long!, $rating: Int!, $review: String!){ + createProductReview(input: {email: $email, name: $name, productVariantId: $productVariantId, rating: $rating, review: $review}) { + customer + email + rating + review + reviewDate + }}`, +}; + +export const SendGenericForm = { + query: + gql`mutation sendGenericForm ($body: Any, $file: Upload, $recaptchaToken: String){ + sendGenericForm(body: $body, file: $file, recaptchaToken: $recaptchaToken) { + isSuccess + }}`, +}; + +export const Hotsite = { + fragments: [Product], + query: gql`query Hotsite($url: String, + $filters: [ProductFilterInput], + $limit: Int, + $maximumPrice: Decimal, + $minimumPrice: Decimal, + $onlyMainVariant: Boolean + $offset: Int, + $sortDirection: SortDirection, + $sortKey: ProductSortKeys) { + result: hotsite(url: $url) { + aggregations { + filters { + field + origin + values { + name + quantity + } + } + maximumPrice + minimumPrice + priceRanges { + quantity + range + } + } + productsByOffset( + filters: $filters, + limit: $limit, + maximumPrice: $maximumPrice, + minimumPrice: $minimumPrice, + onlyMainVariant: $onlyMainVariant + offset: $offset, + sortDirection: $sortDirection, + sortKey: $sortKey + ) { + items { + ...Product + } + page + pageSize + totalCount + } + breadcrumbs { + link + text + } + endDate + expression + id + name + pageSize + seo { + content + httpEquiv + name + scheme + type + } + sorting { + direction + field + } + startDate + subtype + template + url + hotsiteId + } + } + `, +}; + +export const productOptions = { + query: gql`query productOptions ($productId: Long!){ + productOptions(productId: $productId) { + attributes { + attributeId + displayType + id + name + type + values { + productVariants { + ...ProductVariant + } + value + } + } + id + } + }`, +}; + +export const Shop = { + query: gql`query shop{ + shop { + checkoutUrl + mainUrl + mobileCheckoutUrl + mobileUrl + modifiedName + name + } + }`, +}; + +export const CustomerCreate = { + query: gql`mutation customerCreate($input: CustomerCreateInput) { + customerCreate(input: $input) { + customerId + customerName + customerType + } + }`, +}; + +export const CustomerAuthenticatedLogin = { + query: + gql`mutation customerAuthenticatedLogin($input: String!, $pass: String!) { + customerAuthenticatedLogin(input:{input: $input, password: $pass}) { + isMaster + token + type + validUntil + } + }`, +}; diff --git a/checkout/graphql/storefront.graphql.gen.ts b/checkout/graphql/storefront.graphql.gen.ts new file mode 100644 index 000000000..c37e5000e --- /dev/null +++ b/checkout/graphql/storefront.graphql.gen.ts @@ -0,0 +1,4890 @@ + +// deno-fmt-ignore-file +// deno-lint-ignore-file no-explicit-any ban-types ban-unused-ignore +// +// DO NOT EDIT. This file is generated by deco. +// This file SHOULD be checked into source version control. +// To generate this file: deno task start +// + +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } + Any: { input: any; output: any; } + CEP: { input: any; output: any; } + CountryCode: { input: any; output: any; } + DateTime: { input: any; output: any; } + Decimal: { input: any; output: any; } + EmailAddress: { input: any; output: any; } + Long: { input: any; output: any; } + Upload: { input: any; output: any; } + Uuid: { input: any; output: any; } +}; + +/** Price alert input parameters. */ +export type AddPriceAlertInput = { + /** The alerted's email. */ + email: Scalars['String']['input']; + /** The alerted's name. */ + name: Scalars['String']['input']; + /** The product variant id to create the price alert. */ + productVariantId: Scalars['Long']['input']; + /** The google recaptcha token. */ + recaptchaToken?: InputMaybe; + /** The target price to alert. */ + targetPrice: Scalars['Decimal']['input']; +}; + +export type AddressNode = { + /** Zip code. */ + cep?: Maybe; + /** Address city. */ + city?: Maybe; + /** Address country. */ + country?: Maybe; + /** Address neighborhood. */ + neighborhood?: Maybe; + /** Address state. */ + state?: Maybe; + /** Address street. */ + street?: Maybe; +}; + +export type Answer = { + id?: Maybe; + value?: Maybe; +}; + +export type ApplyPolicy = + | 'AFTER_RESOLVER' + | 'BEFORE_RESOLVER'; + +/** Attributes available for the variant products from the given productId. */ +export type Attribute = Node & { + /** The id of the attribute. */ + attributeId: Scalars['Long']['output']; + /** The display type of the attribute. */ + displayType?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The name of the attribute. */ + name?: Maybe; + /** The type of the attribute. */ + type?: Maybe; + /** The values of the attribute. */ + values?: Maybe>>; +}; + +export type AttributeFilterInput = { + attributeId: Scalars['Long']['input']; + value: Scalars['String']['input']; +}; + +/** Input to specify which attributes to match. */ +export type AttributeInput = { + /** The attribute Ids to match. */ + id?: InputMaybe>; + /** The attribute name to match. */ + name?: InputMaybe>>; + /** The attribute type to match. */ + type?: InputMaybe>>; + /** The attribute value to match */ + value?: InputMaybe>>; +}; + +export type AttributeMatrix = { + /** Information about the column attribute. */ + column?: Maybe; + /** The matrix products data. List of rows. */ + data?: Maybe>>>>; + /** Information about the row attribute. */ + row?: Maybe; +}; + +export type AttributeMatrixInfo = { + displayType?: Maybe; + name?: Maybe; + values?: Maybe>>; +}; + +export type AttributeMatrixProduct = { + available: Scalars['Boolean']['output']; + productVariantId: Scalars['Long']['output']; + stock: Scalars['Long']['output']; +}; + +export type AttributeMatrixRowColumnInfoValue = { + printUrl?: Maybe; + value?: Maybe; +}; + + +export type AttributeMatrixRowColumnInfoValuePrintUrlArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Attributes available for the variant products from the given productId. */ +export type AttributeSelection = { + /** Check if the current product attributes can be rendered as a matrix. */ + canBeMatrix: Scalars['Boolean']['output']; + /** The candidate variant given the current input filters. Variant may be from brother product Id. */ + candidateVariant?: Maybe; + /** Informations about the attribute matrix. */ + matrix?: Maybe; + /** The selected variant given the current input filters. Variant may be from brother product Id. */ + selectedVariant?: Maybe; + /** Attributes available for the variant products from the given productId. */ + selections?: Maybe>>; +}; + +/** Attributes available for the variant products from the given productId. */ +export type AttributeSelectionOption = { + /** The id of the attribute. */ + attributeId: Scalars['Long']['output']; + /** The display type of the attribute. */ + displayType?: Maybe; + /** The name of the attribute. */ + name?: Maybe; + /** The values of the attribute. */ + values?: Maybe>>; + /** If the attributes varies by parent. */ + varyByParent: Scalars['Boolean']['output']; +}; + +export type AttributeSelectionOptionValue = { + alias?: Maybe; + available: Scalars['Boolean']['output']; + printUrl?: Maybe; + selected: Scalars['Boolean']['output']; + /** The value of the attribute. */ + value?: Maybe; +}; + + +export type AttributeSelectionOptionValuePrintUrlArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Attributes values with variants */ +export type AttributeValue = { + /** Product variants that have the attribute. */ + productVariants?: Maybe>>; + /** The value of the attribute. */ + value?: Maybe; +}; + +/** Get query completion suggestion. */ +export type Autocomplete = { + /** Suggested products based on the current query. */ + products?: Maybe>>; + /** List of possible query completions. */ + suggestions?: Maybe>>; +}; + +/** A banner is usually an image used to show sales, highlight products, announcements or to redirect to another page or hotsite on click. */ +export type Banner = Node & { + /** Banner's alternative text. */ + altText?: Maybe; + /** Banner unique identifier. */ + bannerId: Scalars['Long']['output']; + /** Banner's name. */ + bannerName?: Maybe; + /** URL where the banner is stored. */ + bannerUrl?: Maybe; + /** The date the banner was created. */ + creationDate?: Maybe; + /** Field to check if the banner should be displayed on all pages. */ + displayOnAllPages: Scalars['Boolean']['output']; + /** Field to check if the banner should be displayed on category pages. */ + displayOnCategories: Scalars['Boolean']['output']; + /** Field to check if the banner should be displayed on search pages. */ + displayOnSearches: Scalars['Boolean']['output']; + /** Field to check if the banner should be displayed on the website. */ + displayOnWebsite: Scalars['Boolean']['output']; + /** Field to check if the banner should be displayed to partners. */ + displayToPartners: Scalars['Boolean']['output']; + /** The banner's height in px. */ + height?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** Field to check if the banner URL should open in another tab on click. */ + openNewTab: Scalars['Boolean']['output']; + /** The displaying order of the banner. */ + order: Scalars['Int']['output']; + /** The displaying position of the banner. */ + position?: Maybe; + /** A list of terms to display the banner on search. */ + searchTerms?: Maybe>>; + /** The banner's title. */ + title?: Maybe; + /** URL to be redirected on click. */ + urlOnClick?: Maybe; + /** The banner's width in px. */ + width?: Maybe; +}; + +/** Define the banner attribute which the result set will be sorted on. */ +export type BannerSortKeys = + /** The banner's creation date. */ + | 'CREATION_DATE' + /** The banner's unique identifier. */ + | 'ID'; + +/** A connection to a list of items. */ +export type BannersConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type BannersEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +export type BestInstallment = { + /** Wether the installment has discount. */ + discount: Scalars['Boolean']['output']; + /** The custom display name of the best installment plan option. */ + displayName?: Maybe; + /** Wether the installment has fees. */ + fees: Scalars['Boolean']['output']; + /** The name of the best installment plan option. */ + name?: Maybe; + /** The number of installments. */ + number: Scalars['Int']['output']; + /** The value of the installment. */ + value: Scalars['Decimal']['output']; +}; + +/** Informations about brands and its products. */ +export type Brand = Node & { + /** If the brand is active at the platform. */ + active: Scalars['Boolean']['output']; + /** The alias for the brand's hotsite. */ + alias?: Maybe; + /** Brand unique identifier. */ + brandId: Scalars['Long']['output']; + /** The date the brand was created in the database. */ + createdAt: Scalars['DateTime']['output']; + /** The full brand logo URL. */ + fullUrlLogo?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The brand's name. */ + name?: Maybe; + /** A list of products from the brand. */ + products?: Maybe; + /** The last update date. */ + updatedAt: Scalars['DateTime']['output']; + /** A web address to be redirected. */ + urlCarrossel?: Maybe; + /** A web address linked to the brand. */ + urlLink?: Maybe; + /** The url of the brand's logo. */ + urlLogo?: Maybe; +}; + + +/** Informations about brands and its products. */ +export type BrandFullUrlLogoArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + + +/** Informations about brands and its products. */ +export type BrandProductsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: ProductSortKeys; +}; + +/** Filter brand results based on giving attributes. */ +export type BrandFilterInput = { + /** Its unique identifier (you may provide a list of IDs if needed). */ + brandIds?: InputMaybe>; + /** Its brand group unique identifier (you may provide a list of IDs if needed). */ + groupIds?: InputMaybe>; + /** The set of group brand names which the result item name must be included in. */ + groupNames?: InputMaybe>>; + /** The set of brand names which the result item name must be included in. */ + names?: InputMaybe>>; +}; + +/** Define the brand attribute which the result set will be sorted on. */ +export type BrandSortKeys = + /** The brand unique identifier. */ + | 'ID' + /** The brand name. */ + | 'NAME'; + +/** A connection to a list of items. */ +export type BrandsConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + totalCount: Scalars['Int']['output']; +}; + +/** An edge in a connection. */ +export type BrandsEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Informations about breadcrumb. */ +export type Breadcrumb = { + /** Breadcrumb link. */ + link?: Maybe; + /** Breadcrumb text. */ + text?: Maybe; +}; + +/** BuyBox informations. */ +export type BuyBox = { + /** List of the possibles installment plans. */ + installmentPlans?: Maybe>>; + /** Maximum price among sellers. */ + maximumPrice?: Maybe; + /** Minimum price among sellers. */ + minimumPrice?: Maybe; + /** Quantity of offers. */ + quantityOffers?: Maybe; + /** List of sellers. */ + sellers?: Maybe>>; +}; + +/** A buy list represents a list of items for sale in the store. */ +export type BuyList = Node & { + /** Check if the product can be added to cart directly from spot. */ + addToCartFromSpot?: Maybe; + /** The product url alias. */ + alias?: Maybe; + /** Information about the possible selection attributes. */ + attributeSelections?: Maybe; + /** List of the product attributes. */ + attributes?: Maybe>>; + /** The product author. */ + author?: Maybe; + /** Field to check if the product is available in stock. */ + available?: Maybe; + /** The product average rating. From 0 to 5. */ + averageRating?: Maybe; + /** List of product breadcrumbs. */ + breadcrumbs?: Maybe>>; + /** BuyBox informations. */ + buyBox?: Maybe; + buyListId: Scalars['Int']['output']; + buyListProducts?: Maybe>>; + /** Buy together products. */ + buyTogether?: Maybe>>; + /** Buy together groups products. */ + buyTogetherGroups?: Maybe>>; + /** The product collection. */ + collection?: Maybe; + /** The product condition. */ + condition?: Maybe; + /** The product creation date. */ + createdAt?: Maybe; + /** A list of customizations available for the given products. */ + customizations?: Maybe>>; + /** The product delivery deadline. */ + deadline?: Maybe; + /** Product deadline alert informations. */ + deadlineAlert?: Maybe; + /** Check if the product should be displayed. */ + display?: Maybe; + /** Check if the product should be displayed only for partners. */ + displayOnlyPartner?: Maybe; + /** Check if the product should be displayed on search. */ + displaySearch?: Maybe; + /** The product's unique EAN. */ + ean?: Maybe; + /** Check if the product offers free shipping. */ + freeShipping?: Maybe; + /** The product gender. */ + gender?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** List of the product images. */ + images?: Maybe>>; + /** List of the product insformations. */ + informations?: Maybe>>; + /** Check if its the main variant. */ + mainVariant?: Maybe; + /** The product maximum quantity for an order. */ + maximumOrderQuantity?: Maybe; + /** The product minimum quantity for an order. */ + minimumOrderQuantity?: Maybe; + /** Check if the product is a new release. */ + newRelease?: Maybe; + /** The number of votes that the average rating consists of. */ + numberOfVotes?: Maybe; + /** Product parallel options information. */ + parallelOptions?: Maybe>>; + /** Parent product unique identifier. */ + parentId?: Maybe; + /** The product prices. */ + prices?: Maybe; + /** Summarized informations about the brand of the product. */ + productBrand?: Maybe; + /** Summarized informations about the categories of the product. */ + productCategories?: Maybe>>; + /** Product unique identifier. */ + productId?: Maybe; + /** The product name. */ + productName?: Maybe; + /** + * Summarized informations about the subscription of the product. + * @deprecated Use subscriptionGroups to get subscription information. + */ + productSubscription?: Maybe; + /** Variant unique identifier. */ + productVariantId?: Maybe; + /** List of promotions this product belongs to. */ + promotions?: Maybe>>; + /** The product publisher */ + publisher?: Maybe; + /** List of customer reviews for this product. */ + reviews?: Maybe>>; + /** The product seller. */ + seller?: Maybe; + /** Product SEO informations. */ + seo?: Maybe>>; + /** List of similar products. */ + similarProducts?: Maybe>>; + /** The product's unique SKU. */ + sku?: Maybe; + /** The values of the spot attribute. */ + spotAttributes?: Maybe>>; + /** The product spot information. */ + spotInformation?: Maybe; + /** Check if the product is on spotlight. */ + spotlight?: Maybe; + /** The available aggregated product stock (all variants) at the default distribution center. */ + stock?: Maybe; + /** List of the product stocks on different distribution centers. */ + stocks?: Maybe>>; + /** List of subscription groups this product belongs to. */ + subscriptionGroups?: Maybe>>; + /** Check if the product is a telesale. */ + telesales?: Maybe; + /** The product last update date. */ + updatedAt?: Maybe; + /** The product video url. */ + urlVideo?: Maybe; + /** The variant name. */ + variantName?: Maybe; + /** The available aggregated variant stock at the default distribution center. */ + variantStock?: Maybe; +}; + + +/** A buy list represents a list of items for sale in the store. */ +export type BuyListImagesArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Contains the id and quantity of a product in the buy list. */ +export type BuyListProduct = { + productId: Scalars['Long']['output']; + quantity: Scalars['Int']['output']; +}; + +/** BuyTogetherGroups informations. */ +export type BuyTogetherGroup = { + /** BuyTogether name */ + name?: Maybe; + /** BuyTogether products */ + products?: Maybe>>; + /** BuyTogether type */ + type: BuyTogetherType; +}; + +export type BuyTogetherType = + | 'CAROUSEL' + | 'PRODUCT'; + +/** The products to calculate prices. */ +export type CalculatePricesProductsInput = { + productVariantId: Scalars['Long']['input']; + quantity: Scalars['Int']['input']; +}; + +/** A connection to a list of items. */ +export type CategoriesConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type CategoriesEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Categories are used to arrange your products into different sections by similarity. */ +export type Category = Node & { + /** Category unique identifier. */ + categoryId: Scalars['Long']['output']; + /** A list of child categories, if it exists. */ + children?: Maybe>>; + /** A description to the category. */ + description?: Maybe; + /** Field to check if the category is displayed in the store's menu. */ + displayMenu: Scalars['Boolean']['output']; + /** The hotsite alias. */ + hotsiteAlias?: Maybe; + /** The URL path for the category. */ + hotsiteUrl?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The url to access the image linked to the category. */ + imageUrl?: Maybe; + /** The web address to access the image linked to the category. */ + imageUrlLink?: Maybe; + /** The category's name. */ + name?: Maybe; + /** The parent category, if it exists. */ + parent?: Maybe; + /** The parent category unique identifier. */ + parentCategoryId: Scalars['Long']['output']; + /** The position the category will be displayed. */ + position: Scalars['Int']['output']; + /** A list of products associated with the category. */ + products?: Maybe; + /** A web address linked to the category. */ + urlLink?: Maybe; +}; + + +/** Categories are used to arrange your products into different sections by similarity. */ +export type CategoryProductsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: ProductSortKeys; +}; + +/** Define the category attribute which the result set will be sorted on. */ +export type CategorySortKeys = + /** The category unique identifier. */ + | 'ID' + /** The category name. */ + | 'NAME'; + +export type Checkout = Node & { + /** The CEP. */ + cep?: Maybe; + /** Indicates if the checking account is being used. */ + checkingAccountActive: Scalars['Boolean']['output']; + /** Total used from checking account. */ + checkingAccountValue?: Maybe; + /** The checkout unique identifier. */ + checkoutId: Scalars['Uuid']['output']; + /** Indicates if the checkout is completed. */ + completed: Scalars['Boolean']['output']; + /** The coupon for discounts. */ + coupon?: Maybe; + /** The total coupon discount applied at checkout. */ + couponDiscount: Scalars['Decimal']['output']; + /** The customer associated with the checkout. */ + customer?: Maybe; + /** The total value of customizations added to the products. */ + customizationValue: Scalars['Decimal']['output']; + /** The discount applied at checkout excluding any coupons. */ + discount: Scalars['Decimal']['output']; + /** The node unique identifier. */ + id?: Maybe; + login?: Maybe; + /** The metadata related to this checkout. */ + metadata?: Maybe>>; + /** The checkout orders informations. */ + orders?: Maybe>>; + /** The additional fees applied based on the payment method. */ + paymentFees: Scalars['Decimal']['output']; + /** A list of products associated with the checkout. */ + products?: Maybe>>; + /** The selected delivery address for the checkout. */ + selectedAddress?: Maybe; + /** The selected payment method */ + selectedPaymentMethod?: Maybe; + /** Selected Shipping. */ + selectedShipping?: Maybe; + /** Selected shipping quote groups. */ + selectedShippingGroups?: Maybe>>; + /** The shipping fee. */ + shippingFee: Scalars['Decimal']['output']; + /** The subtotal value. */ + subtotal: Scalars['Decimal']['output']; + /** The total value. */ + total: Scalars['Decimal']['output']; + /** The total discount applied at checkout. */ + totalDiscount: Scalars['Decimal']['output']; + /** The last update date. */ + updateDate: Scalars['DateTime']['output']; + /** Url for the current checkout id. */ + url?: Maybe; +}; + +/** Represents an address node in the checkout. */ +export type CheckoutAddress = { + /** The street number of the address. */ + addressNumber?: Maybe; + /** The ZIP code of the address. */ + cep: Scalars['Int']['output']; + /** The city of the address. */ + city?: Maybe; + /** The additional address information. */ + complement?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The neighborhood of the address. */ + neighborhood?: Maybe; + /** The reference point for the address. */ + referencePoint?: Maybe; + /** The state of the address. */ + state?: Maybe; + /** The street name of the address. */ + street?: Maybe; +}; + +/** Represents a customer node in the checkout. */ +export type CheckoutCustomer = { + /** Customer's checking account balance. */ + checkingAccountBalance?: Maybe; + /** Taxpayer identification number for businesses. */ + cnpj?: Maybe; + /** Brazilian individual taxpayer registry identification. */ + cpf?: Maybe; + /** Customer's unique identifier. */ + customerId: Scalars['Long']['output']; + /** Customer's name. */ + customerName?: Maybe; + /** The email address of the customer. */ + email?: Maybe; + /** Customer's phone number. */ + phoneNumber?: Maybe; +}; + +export type CheckoutCustomizationInput = { + customizationId: Scalars['Long']['input']; + value?: InputMaybe; +}; + +export type CheckoutLite = { + /** Indicates if the checkout is completed. */ + completed: Scalars['Boolean']['output']; + /** The customer ID associated with the checkout. */ + customerId?: Maybe; +}; + +export type CheckoutMetadataInput = { + key?: InputMaybe; + value?: InputMaybe; +}; + +/** Represents a node in the checkout order. */ +export type CheckoutOrder = { + /** The list of adjustments applied to the order. */ + adjustments?: Maybe>>; + /** The date of the order. */ + date: Scalars['DateTime']['output']; + /** Details of the delivery or store pickup. */ + delivery?: Maybe; + /** The discount value of the order. */ + discountValue: Scalars['Decimal']['output']; + /** The dispatch time text from the shop settings. */ + dispatchTimeText?: Maybe; + /** The interest value of the order. */ + interestValue: Scalars['Decimal']['output']; + /** The ID of the order. */ + orderId: Scalars['Long']['output']; + /** The order status. */ + orderStatus: OrderStatus; + /** The payment information. */ + payment?: Maybe; + /** The list of products in the order. */ + products?: Maybe>>; + /** The shipping value of the order. */ + shippingValue: Scalars['Decimal']['output']; + /** The total value of the order. */ + totalValue: Scalars['Decimal']['output']; +}; + +/** The delivery or store Pickup Address. */ +export type CheckoutOrderAddress = { + /** The street address. */ + address?: Maybe; + /** The ZIP code. */ + cep?: Maybe; + /** The city. */ + city?: Maybe; + /** Additional information or details about the address. */ + complement?: Maybe; + /** Indicates whether the order is for store pickup. */ + isPickupStore: Scalars['Boolean']['output']; + /** The name. */ + name?: Maybe; + /** The neighborhood. */ + neighborhood?: Maybe; + /** . */ + pickupStoreText?: Maybe; +}; + +/** Represents an adjustment applied to checkout. */ +export type CheckoutOrderAdjustment = { + /** The name of the adjustment. */ + name?: Maybe; + /** The type of the adjustment. */ + type?: Maybe; + /** The value of the adjustment. */ + value: Scalars['Decimal']['output']; +}; + +/** This represents a Card payment node in the checkout order. */ +export type CheckoutOrderCardPayment = { + /** The brand card. */ + brand?: Maybe; + /** The interest generated by the card. */ + cardInterest: Scalars['Decimal']['output']; + /** The installments generated for the card. */ + installments: Scalars['Int']['output']; + /** The cardholder name. */ + name?: Maybe; + /** The final four numbers on the card. */ + number?: Maybe; +}; + +/** The delivery or store pickup details. */ +export type CheckoutOrderDelivery = { + /** The delivery or store pickup address. */ + address?: Maybe; + /** The cost of delivery or pickup. */ + cost: Scalars['Decimal']['output']; + /** The estimated delivery or pickup time, in days. */ + deliveryTime: Scalars['Int']['output']; + /** The estimated delivery or pickup time, in hours. */ + deliveryTimeInHours?: Maybe; + /** The name of the recipient. */ + name?: Maybe; +}; + +/** The invoice payment information. */ +export type CheckoutOrderInvoicePayment = { + /** The digitable line. */ + digitableLine?: Maybe; + /** The payment link. */ + paymentLink?: Maybe; +}; + +/** The checkout order payment. */ +export type CheckoutOrderPayment = { + /** The card payment information. */ + card?: Maybe; + /** The bank invoice payment information. */ + invoice?: Maybe; + /** The name of the payment method. */ + name?: Maybe; + /** The Pix payment information. */ + pix?: Maybe; +}; + +/** This represents a Pix payment node in the checkout order. */ +export type CheckoutOrderPixPayment = { + /** The QR code. */ + qrCode?: Maybe; + /** The expiration date of the QR code. */ + qrCodeExpirationDate?: Maybe; + /** The image URL of the QR code. */ + qrCodeUrl?: Maybe; +}; + +/** Represents a node in the checkout order products. */ +export type CheckoutOrderProduct = { + /** The list of adjustments applied to the product. */ + adjustments?: Maybe>>; + /** The list of attributes of the product. */ + attributes?: Maybe>>; + /** The image URL of the product. */ + imageUrl?: Maybe; + /** The name of the product. */ + name?: Maybe; + /** The ID of the product variant. */ + productVariantId: Scalars['Long']['output']; + /** The quantity of the product. */ + quantity: Scalars['Int']['output']; + /** The unit value of the product. */ + unitValue: Scalars['Decimal']['output']; + /** The value of the product. */ + value: Scalars['Decimal']['output']; +}; + +/** Represents an adjustment applied to a product in the checkout order. */ +export type CheckoutOrderProductAdjustment = { + /** Additional information about the adjustment. */ + additionalInformation?: Maybe; + /** The name of the adjustment. */ + name?: Maybe; + /** The type of the adjustment. */ + type?: Maybe; + /** The value of the adjustment. */ + value: Scalars['Decimal']['output']; +}; + +/** Represents an attribute of a product. */ +export type CheckoutOrderProductAttribute = { + /** The name of the attribute. */ + name?: Maybe; + /** The value of the attribute. */ + value?: Maybe; +}; + +export type CheckoutProductAdjustmentNode = { + /** The observation referent adjustment in Product */ + observation?: Maybe; + /** The type that was applied in product adjustment */ + type?: Maybe; + /** The value that was applied to the product adjustment */ + value: Scalars['Decimal']['output']; +}; + +export type CheckoutProductAttributeNode = { + /** The attribute name */ + name?: Maybe; + /** The attribute type */ + type: Scalars['Int']['output']; + /** The attribute value */ + value?: Maybe; +}; + +export type CheckoutProductCustomizationNode = { + /** The available product customizations. */ + availableCustomizations?: Maybe>>; + /** The product customization unique identifier. */ + id?: Maybe; + /** The product customization values. */ + values?: Maybe>>; +}; + +export type CheckoutProductCustomizationValueNode = { + /** The product customization cost. */ + cost: Scalars['Decimal']['output']; + /** The product customization name. */ + name?: Maybe; + /** The product customization value. */ + value?: Maybe; +}; + +export type CheckoutProductInput = { + id: Scalars['Uuid']['input']; + products: Array>; +}; + +export type CheckoutProductItemInput = { + customization?: InputMaybe>>; + customizationId?: InputMaybe; + metadata?: InputMaybe>>; + productVariantId: Scalars['Long']['input']; + quantity: Scalars['Int']['input']; + subscription?: InputMaybe; +}; + +export type CheckoutProductItemUpdateInput = { + customization?: InputMaybe>>; + customizationId?: InputMaybe; + productVariantId: Scalars['Long']['input']; + subscription?: InputMaybe; +}; + +export type CheckoutProductNode = { + /** The product adjustment information */ + adjustments?: Maybe>>; + /** The price adjusted with promotions and other price changes */ + ajustedPrice: Scalars['Decimal']['output']; + /** Information about the possible selection attributes. */ + attributeSelections?: Maybe; + /** The product brand */ + brand?: Maybe; + /** The product category */ + category?: Maybe; + /** The product customization. */ + customization?: Maybe; + /** If the product is a gift */ + gift: Scalars['Boolean']['output']; + /** The product Google category */ + googleCategory?: Maybe>>; + /** The product URL image */ + imageUrl?: Maybe; + /** The product informations */ + informations?: Maybe>>; + /** The product installment fee */ + installmentFee: Scalars['Boolean']['output']; + /** The product installment value */ + installmentValue: Scalars['Decimal']['output']; + /** The product list price */ + listPrice: Scalars['Decimal']['output']; + /** The metadata related to this checkout. */ + metadata?: Maybe>>; + /** The product name */ + name?: Maybe; + /** The product number of installments */ + numberOfInstallments: Scalars['Int']['output']; + /** The product price */ + price: Scalars['Decimal']['output']; + /** The product attributes */ + productAttributes?: Maybe>>; + /** The product unique identifier */ + productId: Scalars['Long']['output']; + /** The product variant unique identifier */ + productVariantId: Scalars['Long']['output']; + /** The product quantity */ + quantity: Scalars['Int']['output']; + /** The product seller. */ + seller?: Maybe; + /** The product shipping deadline */ + shippingDeadline?: Maybe; + /** The product SKU */ + sku?: Maybe; + /** The product subscription information */ + subscription?: Maybe; + /** The total price adjusted with promotions and other price changes */ + totalAdjustedPrice: Scalars['Decimal']['output']; + /** The total list price */ + totalListPrice: Scalars['Decimal']['output']; + /** The product URL */ + url?: Maybe; +}; + + +export type CheckoutProductNodeAttributeSelectionsArgs = { + selected?: InputMaybe>>; +}; + +export type CheckoutProductSellerNode = { + /** The distribution center ID. */ + distributionCenterId?: Maybe; + /** The seller name. */ + sellerName?: Maybe; +}; + +/** Information for the subscription of a product in checkout. */ +export type CheckoutProductSubscription = { + /** The available subscriptions. */ + availableSubscriptions?: Maybe>>; + /** The selected subscription. */ + selected?: Maybe; +}; + +export type CheckoutProductSubscriptionItemNode = { + /** Display text. */ + name?: Maybe; + /** The number of days of the recurring type. */ + recurringDays: Scalars['Int']['output']; + /** The recurring type id. */ + recurringTypeId: Scalars['Long']['output']; + /** If selected. */ + selected: Scalars['Boolean']['output']; + /** Subscription group discount value. */ + subscriptionGroupDiscount: Scalars['Decimal']['output']; + /** The subscription group id. */ + subscriptionGroupId: Scalars['Long']['output']; +}; + +export type CheckoutProductUpdateInput = { + id: Scalars['Uuid']['input']; + product: CheckoutProductItemUpdateInput; +}; + +/** The checkout areas available to reset */ +export type CheckoutResetType = + | 'PAYMENT'; + +export type CheckoutShippingDeadlineNode = { + /** The shipping deadline */ + deadline: Scalars['Int']['output']; + /** The shipping description */ + description?: Maybe; + /** The shipping second description */ + secondDescription?: Maybe; + /** The shipping second title */ + secondTitle?: Maybe; + /** The shipping title */ + title?: Maybe; +}; + +export type CheckoutShippingQuoteGroupNode = { + /** The distribution center. */ + distributionCenter?: Maybe; + /** The products related to the shipping quote group. */ + products?: Maybe>>; + /** Selected Shipping. */ + selectedShipping?: Maybe; +}; + +export type CheckoutSubscriptionInput = { + recurringTypeId: Scalars['Int']['input']; + subscriptionGroupId: Scalars['Long']['input']; +}; + +/** Contents are used to show things to the user. */ +export type Content = Node & { + /** The content in html to be displayed. */ + content?: Maybe; + /** Content unique identifier. */ + contentId: Scalars['Long']['output']; + /** The date the content was created. */ + creationDate?: Maybe; + /** The content's height in px. */ + height?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The content's position. */ + position?: Maybe; + /** A list of terms to display the content on search. */ + searchTerms?: Maybe>>; + /** The content's title. */ + title?: Maybe; + /** The content's width in px. */ + width?: Maybe; +}; + +/** Define the content attribute which the result set will be sorted on. */ +export type ContentSortKeys = + /** The content's creation date. */ + | 'CreationDate' + /** The content's unique identifier. */ + | 'ID'; + +/** A connection to a list of items. */ +export type ContentsConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type ContentsEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Input data for submitting a counter offer for a product. */ +export type CounterOfferInput = { + /** Any additional information or comments provided by the user regarding the counter offer. */ + additionalInfo?: InputMaybe; + /** The email address of the user submitting the counter offer. */ + email?: InputMaybe; + /** The proposed price by the user for the product. */ + price: Scalars['Decimal']['input']; + /** The unique identifier of the product variant for which the counter offer is made. */ + productVariantId: Scalars['Long']['input']; + /** URL linking to the page or the location where the product is listed. */ + url?: InputMaybe; +}; + +export type CreateCustomerAddressInput = { + address?: InputMaybe; + address2?: InputMaybe; + addressDetails?: InputMaybe; + addressNumber?: InputMaybe; + cep: Scalars['CEP']['input']; + city: Scalars['String']['input']; + country: Scalars['CountryCode']['input']; + email?: InputMaybe; + name: Scalars['String']['input']; + neighborhood?: InputMaybe; + phone?: InputMaybe; + referencePoint?: InputMaybe; + state: Scalars['String']['input']; + street?: InputMaybe; +}; + +/** A customer from the store. */ +export type Customer = Node & { + /** A specific customer's address. */ + address?: Maybe; + /** Customer's addresses. */ + addresses?: Maybe>>; + /** Customer's birth date. */ + birthDate: Scalars['DateTime']['output']; + /** Customer's business phone number. */ + businessPhoneNumber?: Maybe; + /** Customer's checking account balance. */ + checkingAccountBalance?: Maybe; + /** Customer's checking account History. */ + checkingAccountHistory?: Maybe>>; + /** Taxpayer identification number for businesses. */ + cnpj?: Maybe; + /** Entities legal name. */ + companyName?: Maybe; + /** Brazilian individual taxpayer registry identification. */ + cpf?: Maybe; + /** Creation Date. */ + creationDate: Scalars['DateTime']['output']; + /** Customer's unique identifier. */ + customerId: Scalars['Long']['output']; + /** Customer's name. */ + customerName?: Maybe; + /** Indicates if it is a natural person or company profile. */ + customerType?: Maybe; + /** Customer's delivery address. */ + deliveryAddress?: Maybe; + /** Customer's email address. */ + email?: Maybe; + /** Customer's gender. */ + gender?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** Customer information groups. */ + informationGroups?: Maybe>>; + /** Customer's mobile phone number. */ + mobilePhoneNumber?: Maybe; + /** A specific order placed by the customer. */ + order?: Maybe; + /** List of orders placed by the customer. */ + orders?: Maybe; + /** Statistics about the orders the customer made in a specific timeframe. */ + ordersStatistics?: Maybe; + /** Get info about the associated partners. */ + partners?: Maybe>>; + /** Customer's phone number. */ + phoneNumber?: Maybe; + /** Customer's residential address. */ + residentialAddress?: Maybe; + /** Responsible's name. */ + responsibleName?: Maybe; + /** Registration number Id. */ + rg?: Maybe; + /** State registration number. */ + stateRegistration?: Maybe; + /** Customer's subscriptions. */ + subscriptions?: Maybe>>; + /** Date of the last update. */ + updateDate: Scalars['DateTime']['output']; + /** Customer wishlist. */ + wishlist?: Maybe; +}; + + +/** A customer from the store. */ +export type CustomerAddressArgs = { + addressId: Scalars['ID']['input']; +}; + + +/** A customer from the store. */ +export type CustomerOrderArgs = { + orderId?: Scalars['Long']['input']; +}; + + +/** A customer from the store. */ +export type CustomerOrdersArgs = { + offset?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}; + + +/** A customer from the store. */ +export type CustomerOrdersStatisticsArgs = { + dateGte?: InputMaybe; + dateLt?: InputMaybe; + onlyPaidOrders?: Scalars['Boolean']['input']; + partnerId?: InputMaybe; +}; + + +/** A customer from the store. */ +export type CustomerWishlistArgs = { + productsIds?: InputMaybe>>; +}; + +export type CustomerAccessToken = { + isMaster: Scalars['Boolean']['output']; + legacyToken?: Maybe; + token?: Maybe; + /** The user login type */ + type?: Maybe; + validUntil: Scalars['DateTime']['output']; +}; + +export type CustomerAccessTokenDetails = { + /** The customer id */ + customerId: Scalars['Long']['output']; + /** The identifier linked to the access token */ + identifier?: Maybe; + /** Specifies whether the user is a master user */ + isMaster: Scalars['Boolean']['output']; + /** The user login origin */ + origin?: Maybe; + /** The user login type */ + type?: Maybe; + validUntil: Scalars['DateTime']['output']; +}; + +/** The input to authenticate a user. */ +export type CustomerAccessTokenInput = { + email: Scalars['String']['input']; + password: Scalars['String']['input']; +}; + +export type CustomerAddressNode = Node & { + /** Address street. */ + address?: Maybe; + /** Address street 2. */ + address2?: Maybe; + /** Address details. */ + addressDetails?: Maybe; + /** Address number. */ + addressNumber?: Maybe; + /** zip code. */ + cep?: Maybe; + /** address city. */ + city?: Maybe; + /** Country. */ + country?: Maybe; + /** The email of the customer address. */ + email?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The name of the customer address. */ + name?: Maybe; + /** Address neighborhood. */ + neighborhood?: Maybe; + /** The phone of the customer address. */ + phone?: Maybe; + /** Address reference point. */ + referencePoint?: Maybe; + /** State. */ + state?: Maybe; + /** + * Address street. + * @deprecated Use the 'address' field to get the address. + */ + street?: Maybe; +}; + +/** The input to authenticate a user. */ +export type CustomerAuthenticateInput = { + input: Scalars['String']['input']; + password: Scalars['String']['input']; +}; + +export type CustomerCheckingAccountHistoryNode = { + /** Customer's checking account history date. */ + date: Scalars['DateTime']['output']; + /** Description of the customer's checking account history. */ + historic?: Maybe; + /** Type of customer's checking account history. */ + type: TypeCheckingAccount; + /** Value of customer's checking account history. */ + value: Scalars['Decimal']['output']; +}; + +export type CustomerCreateInput = { + /** The street address for the registered address. */ + address?: InputMaybe; + /** The street address for the registered address. */ + address2?: InputMaybe; + /** Any additional information related to the registered address. */ + addressComplement?: InputMaybe; + /** The building number for the registered address. */ + addressNumber?: InputMaybe; + /** The date of birth of the customer. */ + birthDate?: InputMaybe; + /** The CEP for the registered address. */ + cep?: InputMaybe; + /** The city for the registered address. */ + city?: InputMaybe; + /** The Brazilian tax identification number for corporations. */ + cnpj?: InputMaybe; + /** The legal name of the corporate customer. */ + corporateName?: InputMaybe; + /** The country for the registered address. */ + country?: InputMaybe; + /** The Brazilian tax identification number for individuals. */ + cpf?: InputMaybe; + /** Indicates if it is a natural person or company profile. */ + customerType: EntityType; + /** The email of the customer. */ + email?: InputMaybe; + /** The full name of the customer. */ + fullName?: InputMaybe; + /** The gender of the customer. */ + gender?: InputMaybe; + /** The customer information group values. */ + informationGroupValues?: InputMaybe>>; + /** Indicates if the customer is state registration exempt. */ + isStateRegistrationExempt?: InputMaybe; + /** The neighborhood for the registered address. */ + neighborhood?: InputMaybe; + /** Indicates if the customer has subscribed to the newsletter. */ + newsletter?: InputMaybe; + /** The password for the customer's account. */ + password?: InputMaybe; + /** The password confirmation for the customer's account. */ + passwordConfirmation?: InputMaybe; + /** The area code for the customer's primary phone number. */ + primaryPhoneAreaCode?: InputMaybe; + /** The customer's primary phone number. */ + primaryPhoneNumber?: InputMaybe; + /** The name of the receiver for the registered address. */ + receiverName?: InputMaybe; + /** A reference point or description to help locate the registered address. */ + reference?: InputMaybe; + /** Indicates if the customer is a reseller. */ + reseller?: InputMaybe; + /** The area code for the customer's secondary phone number. */ + secondaryPhoneAreaCode?: InputMaybe; + /** The customer's secondary phone number. */ + secondaryPhoneNumber?: InputMaybe; + /** The state for the registered address. */ + state?: InputMaybe; + /** The state registration number for businesses. */ + stateRegistration?: InputMaybe; +}; + +/** The input to change the user email. */ +export type CustomerEmailChangeInput = { + /** The new email. */ + newEmail: Scalars['String']['input']; +}; + +export type CustomerInformationGroupFieldNode = { + /** The field name. */ + name?: Maybe; + /** The field order. */ + order: Scalars['Int']['output']; + /** If the field is required. */ + required: Scalars['Boolean']['output']; + /** The field value. */ + value?: Maybe; +}; + +export type CustomerInformationGroupNode = { + /** The group exibition name. */ + exibitionName?: Maybe; + /** The group fields. */ + fields?: Maybe>>; + /** The group name. */ + name?: Maybe; +}; + +export type CustomerOrderCollectionSegment = { + items?: Maybe>>; + page: Scalars['Int']['output']; + pageSize: Scalars['Int']['output']; + totalCount: Scalars['Int']['output']; +}; + +/** Define the order attribute which the result set will be sorted on. */ +export type CustomerOrderSortKeys = + /** The total order value. */ + | 'AMOUNT' + /** The date the order was placed. */ + | 'DATE' + /** The order ID. */ + | 'ID' + /** The order current status. */ + | 'STATUS'; + +export type CustomerOrdersStatistics = { + /** The number of products the customer made from the number of orders. */ + productsQuantity: Scalars['Int']['output']; + /** The number of orders the customer made. */ + quantity: Scalars['Int']['output']; +}; + +/** The input to change the user password by recovery. */ +export type CustomerPasswordChangeByRecoveryInput = { + /** Key generated for password recovery. */ + key: Scalars['String']['input']; + /** The new password. */ + newPassword: Scalars['String']['input']; + /** New password confirmation. */ + newPasswordConfirmation: Scalars['String']['input']; +}; + +/** The input to change the user password. */ +export type CustomerPasswordChangeInput = { + /** The current password. */ + currentPassword: Scalars['String']['input']; + /** The new password. */ + newPassword: Scalars['String']['input']; + /** New password confirmation. */ + newPasswordConfirmation: Scalars['String']['input']; +}; + +export type CustomerSimpleCreateInputGraphInput = { + /** The date of birth of the customer. */ + birthDate?: InputMaybe; + /** The Brazilian tax identification number for corporations. */ + cnpj?: InputMaybe; + /** The legal name of the corporate customer. */ + corporateName?: InputMaybe; + /** The Brazilian tax identification number for individuals. */ + cpf?: InputMaybe; + /** Indicates if it is a natural person or company profile. */ + customerType: EntityType; + /** The email of the customer. */ + email?: InputMaybe; + /** The full name of the customer. */ + fullName?: InputMaybe; + /** Indicates if the customer is state registration exempt. */ + isStateRegistrationExempt?: InputMaybe; + /** The area code for the customer's primary phone number. */ + primaryPhoneAreaCode?: InputMaybe; + /** The customer's primary phone number. */ + primaryPhoneNumber?: InputMaybe; + /** The state registration number for businesses. */ + stateRegistration?: InputMaybe; +}; + +export type CustomerSubscription = { + /** Subscription billing address. */ + billingAddress?: Maybe; + /** The date when the subscription was cancelled. */ + cancellationDate?: Maybe; + /** The coupon code applied to the subscription. */ + coupon?: Maybe; + /** The date of the subscription. */ + date: Scalars['DateTime']['output']; + /** Subscription delivery address. */ + deliveryAddress?: Maybe; + /** The date of intercalated recurring payments. */ + intercalatedRecurrenceDate?: Maybe; + /** The date of the next recurring payment. */ + nextRecurrenceDate?: Maybe; + /** Subscription orders. */ + orders?: Maybe>>; + /** The date when the subscription was paused. */ + pauseDate?: Maybe; + /** The payment details for the subscription. */ + payment?: Maybe; + /** The list of products associated with the subscription. */ + products?: Maybe>>; + /** The details of the recurring subscription. */ + recurring?: Maybe; + /** The subscription status. */ + status?: Maybe; + /** The subscription group id. */ + subscriptionGroupId: Scalars['Long']['output']; + /** Subscription unique identifier. */ + subscriptionId: Scalars['Long']['output']; +}; + +export type CustomerSubscriptionPayment = { + /** The details of the payment card associated with the subscription. */ + card?: Maybe; + /** The type of payment for the subscription. */ + type?: Maybe; +}; + +export type CustomerSubscriptionPaymentCard = { + /** The brand of the payment card (e.g., Visa, MasterCard). */ + brand?: Maybe; + /** The expiration date of the payment card. */ + expiration?: Maybe; + /** The masked or truncated number of the payment card. */ + number?: Maybe; +}; + +export type CustomerSubscriptionProduct = { + /** The id of the product variant associated with the subscription. */ + productVariantId: Scalars['Long']['output']; + /** The quantity of the product variant in the subscription. */ + quantity: Scalars['Int']['output']; + /** Indicates whether the product variant is removed from the subscription. */ + removed: Scalars['Boolean']['output']; + /** The id of the subscription product. */ + subscriptionProductId: Scalars['Long']['output']; + /** The monetary value of the product variant in the subscription. */ + value: Scalars['Decimal']['output']; +}; + +export type CustomerSubscriptionRecurring = { + /** The number of days between recurring payments. */ + days: Scalars['Int']['output']; + /** The description of the recurring subscription. */ + description?: Maybe; + /** The name of the recurring subscription. */ + name?: Maybe; + /** The recurring subscription id. */ + recurringId: Scalars['Long']['output']; + /** Indicates whether the recurring subscription is removed. */ + removed: Scalars['Boolean']['output']; +}; + +export type CustomerUpdateInput = { + /** The date of birth of the customer. */ + birthDate?: InputMaybe; + /** The legal name of the corporate customer. */ + corporateName?: InputMaybe; + /** The full name of the customer. */ + fullName?: InputMaybe; + /** The gender of the customer. */ + gender?: InputMaybe; + /** The customer information group values. */ + informationGroupValues?: InputMaybe>>; + /** The customer's primary phone number. */ + primaryPhoneNumber?: InputMaybe; + /** The customer's primary phone number. */ + primaryPhoneNumberInternational?: InputMaybe; + /** The Brazilian register identification number for individuals. */ + rg?: InputMaybe; + /** The customer's secondary phone number. */ + secondaryPhoneNumber?: InputMaybe; + /** The customer's secondary phone number. */ + secondaryPhoneNumberInternational?: InputMaybe; + /** The state registration number for businesses. */ + stateRegistration?: InputMaybe; +}; + +/** Some products can have customizations, such as writing your name on it or other predefined options. */ +export type Customization = Node & { + /** Cost of customization. */ + cost: Scalars['Decimal']['output']; + /** Customization unique identifier. */ + customizationId: Scalars['Long']['output']; + /** Customization group's name. */ + groupName?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** Maximum allowed size of the field. */ + maxLength: Scalars['Int']['output']; + /** The customization's name. */ + name?: Maybe; + /** Priority order of customization. */ + order: Scalars['Int']['output']; + /** Type of customization. */ + type?: Maybe; + /** Value of customization. */ + values?: Maybe>>; +}; + +/** Deadline alert informations. */ +export type DeadlineAlert = { + /** Deadline alert time */ + deadline?: Maybe; + /** Deadline alert description */ + description?: Maybe; + /** Second deadline alert time */ + secondDeadline?: Maybe; + /** Second deadline alert description */ + secondDescription?: Maybe; + /** Second deadline alert title */ + secondTitle?: Maybe; + /** Deadline alert title */ + title?: Maybe; +}; + +/** The delivery schedule detail. */ +export type DeliveryScheduleDetail = { + /** The date of the delivery schedule. */ + date?: Maybe; + /** The end date and time of the delivery schedule. */ + endDateTime: Scalars['DateTime']['output']; + /** The end time of the delivery schedule. */ + endTime?: Maybe; + /** The start date and time of the delivery schedule. */ + startDateTime: Scalars['DateTime']['output']; + /** The start time of the delivery schedule. */ + startTime?: Maybe; +}; + +/** Input for delivery scheduling. */ +export type DeliveryScheduleInput = { + /** The date. */ + date: Scalars['DateTime']['input']; + /** The period ID. */ + periodId: Scalars['Long']['input']; +}; + +/** A distribution center. */ +export type DistributionCenter = { + /** The distribution center unique identifier. */ + id?: Maybe; + /** The distribution center seller name. */ + sellerName?: Maybe; +}; + +/** Define the entity type of the customer registration. */ +export type EntityType = + /** Legal entity, a company, business, organization. */ + | 'COMPANY' + /** An international person, a legal international entity. */ + | 'INTERNATIONAL' + /** An individual person, a physical person. */ + | 'PERSON'; + +export type EnumInformationGroup = + | 'NEWSLETTER' + | 'PESSOA_FISICA' + | 'PESSOA_JURIDICA'; + +/** Represents a list of events with their details. */ +export type EventList = { + /** URL of the event's cover image */ + coverUrl?: Maybe; + /** Date of the event */ + date?: Maybe; + /** Type of the event */ + eventType?: Maybe; + /** Indicates if the token is from the owner of this event list */ + isOwner: Scalars['Boolean']['output']; + /** URL of the event's logo */ + logoUrl?: Maybe; + /** Name of the event owner */ + ownerName?: Maybe; + /** Event title */ + title?: Maybe; + /** URL of the event */ + url?: Maybe; +}; + +export type EventListAddProductInput = { + /** The unique identifier of the product variant. */ + productVariantId: Scalars['Long']['input']; + /** The quantity of the product to be added. */ + quantity: Scalars['Int']['input']; +}; + +/** Represents a list of store events. */ +export type EventListStore = { + /** Date of the event */ + date?: Maybe; + /** Event type name of the event */ + eventType?: Maybe; + /** URL of the event's logo */ + logoUrl?: Maybe; + /** The name of the event. */ + name?: Maybe; + /** The URL of the event. */ + url?: Maybe; +}; + +/** Represents a list of events types. */ +export type EventListType = { + /** The URL of the event's logo. */ + logoUrl?: Maybe; + /** The name of the event. */ + name?: Maybe; + /** The URL path of the event. */ + urlPath?: Maybe; +}; + +export type FilterPosition = + /** Both filter position. */ + | 'BOTH' + /** Horizontal filter position. */ + | 'HORIZONTAL' + /** Vertical filter position. */ + | 'VERTICAL'; + +export type FriendRecommendInput = { + /** The buy list id */ + buyListId?: InputMaybe; + /** Email of who is recommending a product */ + fromEmail: Scalars['String']['input']; + /** Who is recommending */ + fromName: Scalars['String']['input']; + /** The message */ + message?: InputMaybe; + /** The Product Id */ + productId?: InputMaybe; + /** Email of the person who will receive a product recommendation */ + toEmail: Scalars['String']['input']; + /** Name of the person who will receive a product recommendation */ + toName: Scalars['String']['input']; +}; + +/** The customer's gender. */ +export type Gender = + | 'FEMALE' + | 'MALE'; + +/** The shipping quotes for group. */ +export type GroupShippingQuote = { + /** The shipping deadline. */ + deadline: Scalars['Int']['output']; + /** The shipping deadline, in hours. */ + deadlineInHours?: Maybe; + /** The shipping name. */ + name?: Maybe; + /** The shipping quote unique identifier. */ + shippingQuoteId: Scalars['Uuid']['output']; + /** The shipping type. */ + type?: Maybe; + /** The shipping value. */ + value: Scalars['Float']['output']; +}; + +/** A hotsite is a group of products used to organize them or to make them easier to browse. */ +export type Hotsite = Node & { + /** A list of banners associated with the hotsite. */ + banners?: Maybe>>; + /** A list of contents associated with the hotsite. */ + contents?: Maybe>>; + /** The hotsite will be displayed until this date. */ + endDate?: Maybe; + /** Expression used to associate products to the hotsite. */ + expression?: Maybe; + /** Hotsite unique identifier. */ + hotsiteId: Scalars['Long']['output']; + /** The node unique identifier. */ + id?: Maybe; + /** The hotsite's name. */ + name?: Maybe; + /** Set the quantity of products displayed per page. */ + pageSize: Scalars['Int']['output']; + /** A list of products associated with the hotsite. */ + products?: Maybe; + /** Sorting information to be used by default on the hotsite. */ + sorting?: Maybe; + /** The hotsite will be displayed from this date. */ + startDate?: Maybe; + /** The subtype of the hotsite. */ + subtype?: Maybe; + /** The template used for the hotsite. */ + template?: Maybe; + /** The hotsite's URL. */ + url?: Maybe; +}; + + +/** A hotsite is a group of products used to organize them or to make them easier to browse. */ +export type HotsiteProductsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}; + +/** Define the hotsite attribute which the result set will be sorted on. */ +export type HotsiteSortKeys = + /** The hotsite id. */ + | 'ID' + /** The hotsite name. */ + | 'NAME' + /** The hotsite url. */ + | 'URL'; + +export type HotsiteSorting = { + direction?: Maybe; + field?: Maybe; +}; + +export type HotsiteSubtype = + /** Hotsite created from a brand. */ + | 'BRAND' + /** Hotsite created from a buy list (lista de compra). */ + | 'BUY_LIST' + /** Hotsite created from a category. */ + | 'CATEGORY' + /** Hotsite created from a portfolio. */ + | 'PORTFOLIO'; + +/** A connection to a list of items. */ +export type HotsitesConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type HotsitesEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Informations about an image of a product. */ +export type Image = { + /** The name of the image file. */ + fileName?: Maybe; + /** Check if the image is used for the product main image. */ + mini: Scalars['Boolean']['output']; + /** Numeric order the image should be displayed. */ + order: Scalars['Int']['output']; + /** Check if the image is used for the product prints only. */ + print: Scalars['Boolean']['output']; + /** The url to retrieve the image */ + url?: Maybe; +}; + +/** The additional information about in-store pickup */ +export type InStorePickupAdditionalInformationInput = { + /** The document */ + document?: InputMaybe; + /** The name */ + name?: InputMaybe; +}; + +/** Information registred to the product. */ +export type Information = { + /** The information id. */ + id: Scalars['Long']['output']; + /** The information title. */ + title?: Maybe; + /** The information type. */ + type?: Maybe; + /** The information value. */ + value?: Maybe; +}; + +export type InformationGroupFieldNode = Node & { + /** The information group field display type. */ + displayType?: Maybe; + /** The information group field name. */ + fieldName?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The information group field order. */ + order: Scalars['Int']['output']; + /** If the information group field is required. */ + required: Scalars['Boolean']['output']; + /** The information group field preset values. */ + values?: Maybe>>; +}; + +export type InformationGroupFieldValueNode = { + /** The information group field value order. */ + order: Scalars['Int']['output']; + /** The information group field value. */ + value?: Maybe; +}; + +export type InformationGroupValueInput = { + /** The information group field unique identifier. */ + id?: InputMaybe; + /** The information group field value. */ + value?: InputMaybe; +}; + +export type Installment = { + /** Wether the installment has discount. */ + discount: Scalars['Boolean']['output']; + /** Wether the installment has fees. */ + fees: Scalars['Boolean']['output']; + /** The number of installments. */ + number: Scalars['Int']['output']; + /** The value of the installment. */ + value: Scalars['Decimal']['output']; +}; + +export type InstallmentPlan = { + /** The custom display name of this installment plan. */ + displayName?: Maybe; + /** List of the installments. */ + installments?: Maybe>>; + /** The name of this installment plan. */ + name?: Maybe; +}; + +/** The user login origin. */ +export type LoginOrigin = + | 'SIMPLE' + | 'SOCIAL'; + +/** The user login type. */ +export type LoginType = + | 'AUTHENTICATED' + | 'NEW' + | 'SIMPLE'; + +/** Informations about menu items. */ +export type Menu = Node & { + /** Menu css class to apply. */ + cssClass?: Maybe; + /** The full image URL. */ + fullImageUrl?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** Menu image url address. */ + imageUrl?: Maybe; + /** Menu hierarchy level. */ + level: Scalars['Int']['output']; + /** Menu link address. */ + link?: Maybe; + /** Menu group identifier. */ + menuGroupId: Scalars['Int']['output']; + /** Menu identifier. */ + menuId: Scalars['Int']['output']; + /** Menu name. */ + name: Scalars['String']['output']; + /** Menu hierarchy level. */ + openNewTab: Scalars['Boolean']['output']; + /** Menu position order. */ + order: Scalars['Int']['output']; + /** Parent menu identifier. */ + parentMenuId?: Maybe; + /** Menu extra text. */ + text?: Maybe; +}; + + +/** Informations about menu items. */ +export type MenuFullImageUrlArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Informations about menu groups. */ +export type MenuGroup = Node & { + /** The full image URL. */ + fullImageUrl?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** Menu group image url. */ + imageUrl?: Maybe; + /** Menu group identifier. */ + menuGroupId: Scalars['Int']['output']; + /** List of menus associated with the current group */ + menus?: Maybe>>; + /** Menu group name. */ + name?: Maybe; + /** Menu group partner id. */ + partnerId?: Maybe; + /** Menu group position. */ + position?: Maybe; +}; + + +/** Informations about menu groups. */ +export type MenuGroupFullImageUrlArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Some products can have metadata, like diferent types of custom information. A basic key value pair. */ +export type Metadata = { + /** Metadata key. */ + key?: Maybe; + /** Metadata value. */ + value?: Maybe; +}; + +export type Mutation = { + /** Add coupon to checkout */ + checkoutAddCoupon?: Maybe; + /** Add metadata to checkout */ + checkoutAddMetadata?: Maybe; + /** Add metadata to a checkout product */ + checkoutAddMetadataForProductVariant?: Maybe; + /** Add products to an existing checkout */ + checkoutAddProduct?: Maybe; + /** Associate the address with a checkout. */ + checkoutAddressAssociate?: Maybe; + /** Clones a cart by the given checkout ID, returns the newly created checkout ID */ + checkoutClone?: Maybe; + /** Completes a checkout */ + checkoutComplete?: Maybe; + /** Associate the customer with a checkout. */ + checkoutCustomerAssociate?: Maybe; + /** Delete a suggested card */ + checkoutDeleteSuggestedCard?: Maybe; + /** Selects the variant of a gift product */ + checkoutGiftVariantSelection?: Maybe; + /** Associate the partner with a checkout. */ + checkoutPartnerAssociate?: Maybe; + /** Disassociates the checkout from the partner and returns a new checkout. */ + checkoutPartnerDisassociate?: Maybe; + /** Remove coupon to checkout */ + checkoutRemoveCoupon?: Maybe; + /** Removes metadata keys from a checkout */ + checkoutRemoveMetadata?: Maybe; + /** Remove products from an existing checkout */ + checkoutRemoveProduct?: Maybe; + /** Remove Customization to Checkout */ + checkoutRemoveProductCustomization?: Maybe; + /** Remove Subscription to Checkout */ + checkoutRemoveProductSubscription?: Maybe; + /** Resets a specific area of a checkout */ + checkoutReset?: Maybe; + /** Select installment. */ + checkoutSelectInstallment?: Maybe; + /** Select payment method. */ + checkoutSelectPaymentMethod?: Maybe; + /** Select shipping quote */ + checkoutSelectShippingQuote?: Maybe; + /** Update a product of an existing checkout */ + checkoutUpdateProduct?: Maybe; + /** Use balance checking account checkout */ + checkoutUseCheckingAccount?: Maybe; + /** Create a new checkout */ + createCheckout?: Maybe; + /** Register an email in the newsletter. */ + createNewsletterRegister?: Maybe; + /** Adds a review to a product variant. */ + createProductReview?: Maybe; + /** Record a searched term for admin reports */ + createSearchTermRecord?: Maybe; + /** + * Creates a new customer access token with an expiration time. + * @deprecated Use the CustomerAuthenticatedLogin mutation. + */ + customerAccessTokenCreate?: Maybe; + /** Renews the expiration time of a customer access token. The token must not be expired. */ + customerAccessTokenRenew?: Maybe; + /** Create an address. */ + customerAddressCreate?: Maybe; + /** Delete an existing address, if it is not the only registered address */ + customerAddressRemove?: Maybe; + /** Change an existing address */ + customerAddressUpdate?: Maybe; + /** Creates a new customer access token with an expiration time. */ + customerAuthenticatedLogin?: Maybe; + /** Allows the user to complete the required information for a partial registration. */ + customerCompletePartialRegistration?: Maybe; + /** Creates a new customer register. */ + customerCreate?: Maybe; + /** Changes user email. */ + customerEmailChange?: Maybe; + /** Impersonates a customer, generating an access token with expiration time. */ + customerImpersonate?: Maybe; + /** Changes user password. */ + customerPasswordChange?: Maybe; + /** Change user password by recovery. */ + customerPasswordChangeByRecovery?: Maybe; + /** Sends a password recovery email to the user. */ + customerPasswordRecovery?: Maybe; + /** Returns the user associated with a simple login (CPF or Email) if exists, else return a New user. */ + customerSimpleLoginStart?: Maybe; + /** Verify if the answer to a simple login question is correct, returns a new question if the answer is incorrect */ + customerSimpleLoginVerifyAnwser?: Maybe; + /** Returns the user associated with a Facebook account if exists, else return a New user. */ + customerSocialLoginFacebook?: Maybe; + /** Returns the user associated with a Google account if exists, else return a New user. */ + customerSocialLoginGoogle?: Maybe; + /** Allows a customer to change the delivery address for an existing subscription. */ + customerSubscriptionAddressChange?: Maybe; + /** Add products to an existing subscription */ + customerSubscriptionProductAdd?: Maybe; + /** Remove products to an existing subscription */ + customerSubscriptionProductRemove?: Maybe; + /** Allows a customer to change an existing subscription status. */ + customerSubscriptionUpdateStatus?: Maybe; + /** Updates a customer register. */ + customerUpdate?: Maybe; + /** Adds products to the event list. */ + eventListAddProduct?: Maybe; + /** Creates a new closed scope partner access token with an expiration time. */ + partnerAccessTokenCreate?: Maybe; + /** Submits a counteroffer for a product. */ + productCounterOfferSubmit?: Maybe; + /** Mutation for recommend a product to a friend */ + productFriendRecommend?: Maybe; + /** Add a price alert. */ + productPriceAlert?: Maybe; + /** Creates an alert to notify when the product is back in stock. */ + productRestockAlert?: Maybe; + /** Send a generic form. */ + sendGenericForm?: Maybe; + /** + * Change an existing address + * @deprecated Use the CustomerAddressUpdate mutation. + */ + updateAddress?: Maybe; + /** Adds a product to the customer's wishlist. */ + wishlistAddProduct?: Maybe>>; + /** Removes a product from the customer's wishlist. */ + wishlistRemoveProduct?: Maybe>>; +}; + + +export type MutationCheckoutAddCouponArgs = { + checkoutId: Scalars['Uuid']['input']; + coupon: Scalars['String']['input']; + customerAccessToken?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCheckoutAddMetadataArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + metadata: Array>; +}; + + +export type MutationCheckoutAddMetadataForProductVariantArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + metadata: Array>; + productVariantId: Scalars['Long']['input']; +}; + + +export type MutationCheckoutAddProductArgs = { + customerAccessToken?: InputMaybe; + input: CheckoutProductInput; +}; + + +export type MutationCheckoutAddressAssociateArgs = { + addressId: Scalars['ID']['input']; + checkoutId: Scalars['Uuid']['input']; + customerAccessToken: Scalars['String']['input']; +}; + + +export type MutationCheckoutCloneArgs = { + checkoutId: Scalars['Uuid']['input']; + copyUser?: Scalars['Boolean']['input']; + customerAccessToken?: InputMaybe; +}; + + +export type MutationCheckoutCompleteArgs = { + checkoutId: Scalars['Uuid']['input']; + comments?: InputMaybe; + customerAccessToken?: InputMaybe; + paymentData: Scalars['String']['input']; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCheckoutCustomerAssociateArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken: Scalars['String']['input']; +}; + + +export type MutationCheckoutDeleteSuggestedCardArgs = { + cardKey: Scalars['String']['input']; + checkoutId: Scalars['Uuid']['input']; + customerAccessToken: Scalars['String']['input']; + paymentMethodId: Scalars['ID']['input']; +}; + + +export type MutationCheckoutGiftVariantSelectionArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + productVariantId: Scalars['Long']['input']; +}; + + +export type MutationCheckoutPartnerAssociateArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + partnerAccessToken: Scalars['String']['input']; +}; + + +export type MutationCheckoutPartnerDisassociateArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; +}; + + +export type MutationCheckoutRemoveCouponArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; +}; + + +export type MutationCheckoutRemoveMetadataArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + keys: Array>; +}; + + +export type MutationCheckoutRemoveProductArgs = { + customerAccessToken?: InputMaybe; + input: CheckoutProductInput; +}; + + +export type MutationCheckoutRemoveProductCustomizationArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + customizationId: Scalars['ID']['input']; + productVariantId: Scalars['Long']['input']; +}; + + +export type MutationCheckoutRemoveProductSubscriptionArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + productVariantId: Scalars['Long']['input']; +}; + + +export type MutationCheckoutResetArgs = { + checkoutId: Scalars['Uuid']['input']; + types: Array; +}; + + +export type MutationCheckoutSelectInstallmentArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + installmentNumber: Scalars['Int']['input']; + selectedPaymentMethodId: Scalars['Uuid']['input']; +}; + + +export type MutationCheckoutSelectPaymentMethodArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + paymentMethodId: Scalars['ID']['input']; +}; + + +export type MutationCheckoutSelectShippingQuoteArgs = { + additionalInformation?: InputMaybe; + checkoutId: Scalars['Uuid']['input']; + customerAccessToken?: InputMaybe; + deliveryScheduleInput?: InputMaybe; + distributionCenterId?: InputMaybe; + shippingQuoteId: Scalars['Uuid']['input']; +}; + + +export type MutationCheckoutUpdateProductArgs = { + customerAccessToken?: InputMaybe; + input: CheckoutProductUpdateInput; +}; + + +export type MutationCheckoutUseCheckingAccountArgs = { + checkoutId: Scalars['Uuid']['input']; + customerAccessToken: Scalars['String']['input']; + useBalance: Scalars['Boolean']['input']; +}; + + +export type MutationCreateCheckoutArgs = { + products?: InputMaybe>>; +}; + + +export type MutationCreateNewsletterRegisterArgs = { + input: NewsletterInput; +}; + + +export type MutationCreateProductReviewArgs = { + input: ReviewCreateInput; +}; + + +export type MutationCreateSearchTermRecordArgs = { + input: SearchRecordInput; +}; + + +export type MutationCustomerAccessTokenCreateArgs = { + input: CustomerAccessTokenInput; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerAccessTokenRenewArgs = { + customerAccessToken: Scalars['String']['input']; +}; + + +export type MutationCustomerAddressCreateArgs = { + address: CreateCustomerAddressInput; + customerAccessToken: Scalars['String']['input']; +}; + + +export type MutationCustomerAddressRemoveArgs = { + customerAccessToken: Scalars['String']['input']; + id: Scalars['ID']['input']; +}; + + +export type MutationCustomerAddressUpdateArgs = { + address: UpdateCustomerAddressInput; + customerAccessToken: Scalars['String']['input']; + id: Scalars['ID']['input']; +}; + + +export type MutationCustomerAuthenticatedLoginArgs = { + input: CustomerAuthenticateInput; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerCompletePartialRegistrationArgs = { + customerAccessToken: Scalars['String']['input']; + input?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerCreateArgs = { + input?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerEmailChangeArgs = { + customerAccessToken: Scalars['String']['input']; + input?: InputMaybe; +}; + + +export type MutationCustomerImpersonateArgs = { + customerAccessToken: Scalars['String']['input']; + input: Scalars['String']['input']; +}; + + +export type MutationCustomerPasswordChangeArgs = { + customerAccessToken: Scalars['String']['input']; + input?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerPasswordChangeByRecoveryArgs = { + input?: InputMaybe; +}; + + +export type MutationCustomerPasswordRecoveryArgs = { + input: Scalars['String']['input']; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerSimpleLoginStartArgs = { + input?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerSimpleLoginVerifyAnwserArgs = { + answerId: Scalars['Uuid']['input']; + input?: InputMaybe; + questionId: Scalars['Uuid']['input']; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerSocialLoginFacebookArgs = { + facebookAccessToken?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationCustomerSocialLoginGoogleArgs = { + clientId?: InputMaybe; + recaptchaToken?: InputMaybe; + userCredential?: InputMaybe; +}; + + +export type MutationCustomerSubscriptionAddressChangeArgs = { + addressId: Scalars['ID']['input']; + customerAccessToken: Scalars['String']['input']; + subscriptionId: Scalars['Long']['input']; +}; + + +export type MutationCustomerSubscriptionProductAddArgs = { + customerAccessToken: Scalars['String']['input']; + products: Array>; + subscriptionId: Scalars['Long']['input']; +}; + + +export type MutationCustomerSubscriptionProductRemoveArgs = { + customerAccessToken: Scalars['String']['input']; + subscriptionId: Scalars['Long']['input']; + subscriptionProducts: Array>; +}; + + +export type MutationCustomerSubscriptionUpdateStatusArgs = { + customerAccessToken: Scalars['String']['input']; + status: Status; + subscriptionId: Scalars['Long']['input']; +}; + + +export type MutationCustomerUpdateArgs = { + customerAccessToken: Scalars['String']['input']; + input: CustomerUpdateInput; +}; + + +export type MutationEventListAddProductArgs = { + eventListToken: Scalars['String']['input']; + products: Array>; +}; + + +export type MutationPartnerAccessTokenCreateArgs = { + input: PartnerAccessTokenInput; +}; + + +export type MutationProductCounterOfferSubmitArgs = { + input: CounterOfferInput; +}; + + +export type MutationProductFriendRecommendArgs = { + input: FriendRecommendInput; +}; + + +export type MutationProductPriceAlertArgs = { + input: AddPriceAlertInput; +}; + + +export type MutationProductRestockAlertArgs = { + input: RestockAlertInput; + partnerAccessToken?: InputMaybe; +}; + + +export type MutationSendGenericFormArgs = { + body?: InputMaybe; + file?: InputMaybe; + recaptchaToken?: InputMaybe; +}; + + +export type MutationUpdateAddressArgs = { + address: UpdateCustomerAddressInput; + customerAccessToken: Scalars['String']['input']; + id: Scalars['ID']['input']; +}; + + +export type MutationWishlistAddProductArgs = { + customerAccessToken: Scalars['String']['input']; + productId: Scalars['Long']['input']; +}; + + +export type MutationWishlistRemoveProductArgs = { + customerAccessToken: Scalars['String']['input']; + productId: Scalars['Long']['input']; +}; + +export type NewsletterInput = { + email: Scalars['String']['input']; + informationGroupValues?: InputMaybe>>; + name: Scalars['String']['input']; + recaptchaToken?: InputMaybe; +}; + +export type NewsletterNode = { + /** Newsletter creation date. */ + createDate: Scalars['DateTime']['output']; + /** The newsletter receiver email. */ + email?: Maybe; + /** The newsletter receiver name. */ + name?: Maybe; + /** Newsletter update date. */ + updateDate?: Maybe; +}; + +export type Node = { + id?: Maybe; +}; + +/** Types of operations to perform between query terms. */ +export type Operation = + /** Performs AND operation between query terms. */ + | 'AND' + /** Performs OR operation between query terms. */ + | 'OR'; + +/** Result of the operation. */ +export type OperationResult = { + /** If the operation is a success. */ + isSuccess: Scalars['Boolean']['output']; +}; + +export type OrderAdjustNode = { + /** The adjust name. */ + name?: Maybe; + /** Note about the adjust. */ + note?: Maybe; + /** Type of adjust. */ + type?: Maybe; + /** Amount to be adjusted. */ + value: Scalars['Decimal']['output']; +}; + +export type OrderAttributeNode = { + /** The attribute name. */ + name?: Maybe; + /** The attribute value. */ + value?: Maybe; +}; + +export type OrderCustomizationNode = { + /** The customization cost. */ + cost?: Maybe; + /** The customization name. */ + name?: Maybe; + /** The customization value. */ + value?: Maybe; +}; + +export type OrderDeliveryAddressNode = { + /** The street number of the address. */ + addressNumber?: Maybe; + /** The ZIP code of the address. */ + cep?: Maybe; + /** The city of the address. */ + city?: Maybe; + /** The additional address information. */ + complement?: Maybe; + /** The country of the address. */ + country?: Maybe; + /** The neighborhood of the address. */ + neighboorhood?: Maybe; + /** The receiver's name. */ + receiverName?: Maybe; + /** The reference point for the address. */ + referencePoint?: Maybe; + /** The state of the address, abbreviated. */ + state?: Maybe; + /** The street name of the address. */ + street?: Maybe; +}; + +export type OrderInvoiceNode = { + /** The invoice access key. */ + accessKey?: Maybe; + /** The invoice identifier code. */ + invoiceCode?: Maybe; + /** The invoice serial digit. */ + serialDigit?: Maybe; + /** The invoice URL. */ + url?: Maybe; +}; + +export type OrderNoteNode = { + /** Date the note was added to the order. */ + date?: Maybe; + /** The note added to the order. */ + note?: Maybe; + /** The user who added the note to the order. */ + user?: Maybe; +}; + +export type OrderPackagingNode = { + /** The packaging cost. */ + cost: Scalars['Decimal']['output']; + /** The packaging description. */ + description?: Maybe; + /** The message added to the packaging. */ + message?: Maybe; + /** The packaging name. */ + name?: Maybe; +}; + +export type OrderPaymentAdditionalInfoNode = { + /** Additional information key. */ + key?: Maybe; + /** Additional information value. */ + value?: Maybe; +}; + +export type OrderPaymentBoletoNode = { + /** The digitable line. */ + digitableLine?: Maybe; + /** The payment link. */ + paymentLink?: Maybe; +}; + +export type OrderPaymentCardNode = { + /** The brand of the card. */ + brand?: Maybe; + /** The masked credit card number with only the last 4 digits displayed. */ + maskedNumber?: Maybe; +}; + +export type OrderPaymentNode = { + /** Additional information for the payment. */ + additionalInfo?: Maybe>>; + /** The boleto information. */ + boleto?: Maybe; + /** The card information. */ + card?: Maybe; + /** Order discounted value. */ + discount?: Maybe; + /** Order additional fees value. */ + fees?: Maybe; + /** Value per installment. */ + installmentValue?: Maybe; + /** Number of installments. */ + installments?: Maybe; + /** Message about payment transaction. */ + message?: Maybe; + /** The chosen payment option for the order. */ + paymentOption?: Maybe; + /** The pix information. */ + pix?: Maybe; + /** Current payment status. */ + status?: Maybe; + /** Order total value. */ + total?: Maybe; +}; + +export type OrderPaymentPixNode = { + /** The QR code. */ + qrCode?: Maybe; + /** The expiration date of the QR code. */ + qrCodeExpirationDate?: Maybe; + /** The image URL of the QR code. */ + qrCodeUrl?: Maybe; +}; + +export type OrderProductNode = { + /** List of adjusts on the product price, if any. */ + adjusts?: Maybe>>; + /** The product attributes. */ + attributes?: Maybe>>; + /** The cost of the customizations, if any. */ + customizationPrice: Scalars['Decimal']['output']; + /** List of customizations for the product. */ + customizations?: Maybe>>; + /** Amount of discount in the product price, if any. */ + discount: Scalars['Decimal']['output']; + /** If the product is a gift. */ + gift?: Maybe; + /** The product image. */ + image?: Maybe; + /** The product list price. */ + listPrice: Scalars['Decimal']['output']; + /** The product name. */ + name?: Maybe; + /** The cost of the packagings, if any. */ + packagingPrice: Scalars['Decimal']['output']; + /** List of packagings for the product. */ + packagings?: Maybe>>; + /** The product price. */ + price: Scalars['Decimal']['output']; + /** Information about the product seller. */ + productSeller?: Maybe; + /** Variant unique identifier. */ + productVariantId: Scalars['Long']['output']; + /** Quantity of the given product in the order. */ + quantity: Scalars['Long']['output']; + /** The product sale price. */ + salePrice: Scalars['Decimal']['output']; + /** The product SKU. */ + sku?: Maybe; + /** List of trackings for the order. */ + trackings?: Maybe>>; + /** Value of an unit of the product. */ + unitaryValue: Scalars['Decimal']['output']; +}; + +export type OrderSellerNode = { + /** The seller's name. */ + name?: Maybe; +}; + +export type OrderShippingNode = { + /** Limit date of delivery, in days. */ + deadline?: Maybe; + /** Limit date of delivery, in hours. */ + deadlineInHours?: Maybe; + /** Deadline text message. */ + deadlineText?: Maybe; + /** Distribution center unique identifier. */ + distributionCenterId?: Maybe; + /** The order pick up unique identifier. */ + pickUpId?: Maybe; + /** The products belonging to the order. */ + products?: Maybe>>; + /** Amount discounted from shipping costs, if any. */ + promotion?: Maybe; + /** Shipping company connector identifier code. */ + refConnector?: Maybe; + /** Start date of shipping schedule. */ + scheduleFrom?: Maybe; + /** Limit date of shipping schedule. */ + scheduleUntil?: Maybe; + /** Shipping fee value. */ + shippingFee?: Maybe; + /** The shipping name. */ + shippingName?: Maybe; + /** Shipping rate table unique identifier. */ + shippingTableId?: Maybe; + /** The total value. */ + total?: Maybe; + /** Order package size. */ + volume?: Maybe; + /** The order weight, in grams. */ + weight?: Maybe; +}; + +export type OrderShippingProductNode = { + /** Distribution center unique identifier. */ + distributionCenterId?: Maybe; + /** The product price. */ + price?: Maybe; + /** Variant unique identifier. */ + productVariantId?: Maybe; + /** Quantity of the given product. */ + quantity: Scalars['Int']['output']; +}; + +/** Define the sort orientation of the result set. */ +export type OrderSortDirection = + /** The results will be sorted in an ascending order. */ + | 'ASC' + /** The results will be sorted in an descending order. */ + | 'DESC'; + +/** Represents the status of an order. */ +export type OrderStatus = + /** Order has been approved in analysis. */ + | 'APPROVED_ANALYSIS' + /** Order has been authorized. */ + | 'AUTHORIZED' + /** Order is awaiting payment. */ + | 'AWAITING_PAYMENT' + /** Order is awaiting change of payment method. */ + | 'AWAITING_PAYMENT_CHANGE' + /** Order has been cancelled. */ + | 'CANCELLED' + /** Order has been cancelled - Card Denied. */ + | 'CANCELLED_DENIED_CARD' + /** Order has been cancelled - Fraud. */ + | 'CANCELLED_FRAUD' + /** Order has been cancelled. */ + | 'CANCELLED_ORDER_CANCELLED' + /** Order has been cancelled - Suspected Fraud. */ + | 'CANCELLED_SUSPECT_FRAUD' + /** Order has been cancelled - Card Temporarily Denied. */ + | 'CANCELLED_TEMPORARILY_DENIED_CARD' + /** Order has been checked. */ + | 'CHECKED_ORDER' + /** Order has been credited. */ + | 'CREDITED' + /** Order has been delivered. */ + | 'DELIVERED' + /** Payment denied, but the order has not been cancelled. */ + | 'DENIED_PAYMENT' + /** Documents needed for purchase. */ + | 'DOCUMENTS_FOR_PURCHASE' + /** Order has been placed. */ + | 'ORDERED' + /** Order has been paid. */ + | 'PAID' + /** Available for pick-up in store. */ + | 'PICK_UP_IN_STORE' + /** Order has been received - Gift Card. */ + | 'RECEIVED_GIFT_CARD' + /** Order has been returned. */ + | 'RETURNED' + /** Order has been sent. */ + | 'SENT' + /** Order has been sent - Invoiced. */ + | 'SENT_INVOICED' + /** Order has been separated. */ + | 'SEPARATED'; + +export type OrderStatusNode = { + /** The date when status has changed. */ + changeDate?: Maybe; + /** Order status. */ + status?: Maybe; + /** Status unique identifier. */ + statusId: Scalars['Long']['output']; +}; + +export type OrderSubscriptionNode = { + /** The length of the order signature period. */ + recurringDays?: Maybe; + /** The order subscription period type. */ + recurringName?: Maybe; + /** The order signing group identifier. */ + subscriptionGroupId?: Maybe; + /** subscription unique identifier. */ + subscriptionId?: Maybe; + /** The subscription's order identifier. */ + subscriptionOrderId?: Maybe; + /** The subscription fee for the order. */ + value?: Maybe; +}; + +export type OrderTrackingNode = { + /** The tracking code. */ + code?: Maybe; + /** The URL for tracking. */ + url?: Maybe; +}; + +/** Information about pagination in a connection. */ +export type PageInfo = { + /** When paginating forwards, the cursor to continue. */ + endCursor?: Maybe; + /** Indicates whether more edges exist following the set defined by the clients arguments. */ + hasNextPage: Scalars['Boolean']['output']; + /** Indicates whether more edges exist prior the set defined by the clients arguments. */ + hasPreviousPage: Scalars['Boolean']['output']; + /** When paginating backwards, the cursor to continue. */ + startCursor?: Maybe; +}; + +/** Partners are used to assign specific products or price tables depending on its scope. */ +export type Partner = Node & { + /** The partner alias. */ + alias?: Maybe; + /** The partner is valid until this date. */ + endDate: Scalars['DateTime']['output']; + /** The full partner logo URL. */ + fullUrlLogo?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The partner logo's URL. */ + logoUrl?: Maybe; + /** The partner's name. */ + name?: Maybe; + /** The partner's origin. */ + origin?: Maybe; + /** The partner's access token. */ + partnerAccessToken?: Maybe; + /** Partner unique identifier. */ + partnerId: Scalars['Long']['output']; + /** Portfolio identifier assigned to this partner. */ + portfolioId: Scalars['Int']['output']; + /** Price table identifier assigned to this partner. */ + priceTableId: Scalars['Int']['output']; + /** The partner is valid from this date. */ + startDate: Scalars['DateTime']['output']; + /** The type of scoped the partner is used. */ + type?: Maybe; +}; + + +/** Partners are used to assign specific products or price tables depending on its scope. */ +export type PartnerFullUrlLogoArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +export type PartnerAccessToken = { + token?: Maybe; + validUntil?: Maybe; +}; + +/** The input to authenticate closed scope partners. */ +export type PartnerAccessTokenInput = { + password: Scalars['String']['input']; + username: Scalars['String']['input']; +}; + +/** Input for partners. */ +export type PartnerByRegionInput = { + /** CEP to get the regional partners. */ + cep?: InputMaybe; + /** Region ID to get the regional partners. */ + regionId?: InputMaybe; +}; + +/** Define the partner attribute which the result set will be sorted on. */ +export type PartnerSortKeys = + /** The partner unique identifier. */ + | 'ID' + /** The partner name. */ + | 'NAME'; + +export type PartnerSubtype = + /** Partner 'client' subtype. */ + | 'CLIENT' + /** Partner 'closed' subtype. */ + | 'CLOSED' + /** Partner 'open' subtype. */ + | 'OPEN'; + +/** A connection to a list of items. */ +export type PartnersConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type PartnersEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Informations about the physical store. */ +export type PhysicalStore = { + /** Additional text. */ + additionalText?: Maybe; + /** Physical store address. */ + address?: Maybe; + /** Physical store address details. */ + addressDetails?: Maybe; + /** Physical store address number. */ + addressNumber?: Maybe; + /** Physical store address city. */ + city?: Maybe; + /** Physical store country. */ + country?: Maybe; + /** Physical store DDD. */ + ddd: Scalars['Int']['output']; + /** Delivery deadline. */ + deliveryDeadline: Scalars['Int']['output']; + /** Physical store email. */ + email?: Maybe; + /** Physical store latitude. */ + latitude?: Maybe; + /** Physical store longitude. */ + longitude?: Maybe; + /** Physical store name. */ + name?: Maybe; + /** Physical store address neighborhood. */ + neighborhood?: Maybe; + /** Physical store phone number. */ + phoneNumber?: Maybe; + /** Physical store ID. */ + physicalStoreId: Scalars['Int']['output']; + /** If the physical store allows pickup. */ + pickup: Scalars['Boolean']['output']; + /** Pickup deadline. */ + pickupDeadline: Scalars['Int']['output']; + /** Physical store state. */ + state?: Maybe; + /** Physical store zip code. */ + zipCode?: Maybe; +}; + +/** Range of prices for this product. */ +export type PriceRange = { + /** The quantity of products in this range. */ + quantity: Scalars['Int']['output']; + /** The price range. */ + range?: Maybe; +}; + +export type PriceTable = { + /** The amount of discount in percentage. */ + discountPercentage: Scalars['Decimal']['output']; + /** The id of this price table. */ + id: Scalars['Long']['output']; + /** The listed regular price of this table. */ + listPrice?: Maybe; + /** The current working price of this table. */ + price: Scalars['Decimal']['output']; +}; + +/** The prices of the product. */ +export type Prices = { + /** The best installment option available. */ + bestInstallment?: Maybe; + /** The amount of discount in percentage. */ + discountPercentage: Scalars['Decimal']['output']; + /** Wether the current price is discounted. */ + discounted: Scalars['Boolean']['output']; + /** List of the possibles installment plans. */ + installmentPlans?: Maybe>>; + /** The listed regular price of the product. */ + listPrice?: Maybe; + /** The multiplication factor used for items that are sold by quantity. */ + multiplicationFactor: Scalars['Float']['output']; + /** The current working price. */ + price: Scalars['Decimal']['output']; + /** + * List of the product different price tables. + * + * Only returned when using the partnerAccessToken or public price tables. + */ + priceTables?: Maybe>>; + /** Lists the different price options when buying the item over the given quantity. */ + wholesalePrices?: Maybe>>; +}; + +/** Input to specify the range of prices to return. */ +export type PricesInput = { + /** The product discount must be greater than or equal to. */ + discount_gte?: InputMaybe; + /** The product discount must be lesser than or equal to. */ + discount_lte?: InputMaybe; + /** Return only products where the listed price is more than the price. */ + discounted?: InputMaybe; + /** The product price must be greater than or equal to. */ + price_gte?: InputMaybe; + /** The product price must be lesser than or equal to. */ + price_lte?: InputMaybe; +}; + +/** A product represents an item for sale in the store. */ +export type Product = Node & { + /** Check if the product can be added to cart directly from spot. */ + addToCartFromSpot?: Maybe; + /** The product url alias. */ + alias?: Maybe; + /** List of the product attributes. */ + attributes?: Maybe>>; + /** The product author. */ + author?: Maybe; + /** Field to check if the product is available in stock. */ + available?: Maybe; + /** The product average rating. From 0 to 5. */ + averageRating?: Maybe; + /** BuyBox informations. */ + buyBox?: Maybe; + /** The product collection. */ + collection?: Maybe; + /** The product condition. */ + condition?: Maybe; + /** The product creation date. */ + createdAt?: Maybe; + /** The product delivery deadline. */ + deadline?: Maybe; + /** Check if the product should be displayed. */ + display?: Maybe; + /** Check if the product should be displayed only for partners. */ + displayOnlyPartner?: Maybe; + /** Check if the product should be displayed on search. */ + displaySearch?: Maybe; + /** The product's unique EAN. */ + ean?: Maybe; + /** Check if the product offers free shipping. */ + freeShipping?: Maybe; + /** The product gender. */ + gender?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** List of the product images. */ + images?: Maybe>>; + /** List of the product insformations. */ + informations?: Maybe>>; + /** Check if its the main variant. */ + mainVariant?: Maybe; + /** The product maximum quantity for an order. */ + maximumOrderQuantity?: Maybe; + /** The product minimum quantity for an order. */ + minimumOrderQuantity?: Maybe; + /** Check if the product is a new release. */ + newRelease?: Maybe; + /** The number of votes that the average rating consists of. */ + numberOfVotes?: Maybe; + /** Parent product unique identifier. */ + parentId?: Maybe; + /** The product prices. */ + prices?: Maybe; + /** Summarized informations about the brand of the product. */ + productBrand?: Maybe; + /** Summarized informations about the categories of the product. */ + productCategories?: Maybe>>; + /** Product unique identifier. */ + productId?: Maybe; + /** The product name. */ + productName?: Maybe; + /** + * Summarized informations about the subscription of the product. + * @deprecated Use subscriptionGroups to get subscription information. + */ + productSubscription?: Maybe; + /** Variant unique identifier. */ + productVariantId?: Maybe; + /** List of promotions this product belongs to. */ + promotions?: Maybe>>; + /** The product publisher */ + publisher?: Maybe; + /** The product seller. */ + seller?: Maybe; + /** List of similar products. */ + similarProducts?: Maybe>>; + /** The product's unique SKU. */ + sku?: Maybe; + /** The values of the spot attribute. */ + spotAttributes?: Maybe>>; + /** The product spot information. */ + spotInformation?: Maybe; + /** Check if the product is on spotlight. */ + spotlight?: Maybe; + /** The available aggregated product stock (all variants) at the default distribution center. */ + stock?: Maybe; + /** List of the product stocks on different distribution centers. */ + stocks?: Maybe>>; + /** List of subscription groups this product belongs to. */ + subscriptionGroups?: Maybe>>; + /** Check if the product is a telesale. */ + telesales?: Maybe; + /** The product last update date. */ + updatedAt?: Maybe; + /** The product video url. */ + urlVideo?: Maybe; + /** The variant name. */ + variantName?: Maybe; + /** The available aggregated variant stock at the default distribution center. */ + variantStock?: Maybe; +}; + + +/** A product represents an item for sale in the store. */ +export type ProductImagesArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +export type ProductAggregations = { + /** List of product filters which can be used to filter subsequent queries. */ + filters?: Maybe>>; + /** Minimum price of the products. */ + maximumPrice: Scalars['Decimal']['output']; + /** Maximum price of the products. */ + minimumPrice: Scalars['Decimal']['output']; + /** List of price ranges for the selected products. */ + priceRanges?: Maybe>>; +}; + + +export type ProductAggregationsFiltersArgs = { + position?: InputMaybe; +}; + +/** The attributes of the product. */ +export type ProductAttribute = Node & { + /** The id of the attribute. */ + attributeId: Scalars['Long']['output']; + /** The display type of the attribute. */ + displayType?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The name of the attribute. */ + name?: Maybe; + /** The type of the attribute. */ + type?: Maybe; + /** The value of the attribute. */ + value?: Maybe; +}; + +export type ProductBrand = { + /** The hotsite url alias fot this brand. */ + alias?: Maybe; + /** The full brand logo URL. */ + fullUrlLogo?: Maybe; + /** The brand id. */ + id: Scalars['Long']['output']; + /** The url that contains the brand logo image. */ + logoUrl?: Maybe; + /** The name of the brand. */ + name?: Maybe; +}; + + +export type ProductBrandFullUrlLogoArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Information about the category of a product. */ +export type ProductCategory = { + /** Wether the category is currently active. */ + active: Scalars['Boolean']['output']; + /** The categories in google format. */ + googleCategories?: Maybe; + /** The category hierarchy. */ + hierarchy?: Maybe; + /** The id of the category. */ + id: Scalars['Int']['output']; + /** Wether this category is the main category for this product. */ + main: Scalars['Boolean']['output']; + /** The category name. */ + name?: Maybe; + /** The category hotsite url alias. */ + url?: Maybe; +}; + +export type ProductCollectionSegment = { + items?: Maybe>>; + page: Scalars['Int']['output']; + pageSize: Scalars['Int']['output']; + totalCount: Scalars['Int']['output']; +}; + +/** Filter product results based on giving attributes. */ +export type ProductExplicitFiltersInput = { + /** The set of attributes do filter. */ + attributes?: InputMaybe; + /** Choose if you want to retrieve only the available products in stock. */ + available?: InputMaybe; + /** The set of brand IDs which the result item brand ID must be included in. */ + brandId?: InputMaybe>; + /** The set of category IDs which the result item category ID must be included in. */ + categoryId?: InputMaybe>; + /** The set of EANs which the result item EAN must be included. */ + ean?: InputMaybe>>; + /** An external parent ID or a list of IDs to search for products with the external parent ID. */ + externalParentId?: InputMaybe>>; + /** Retrieve the product variant only if it contains images. */ + hasImages?: InputMaybe; + /** Ignores the display rules when searching for products. */ + ignoreDisplayRules?: InputMaybe; + /** Retrieve the product variant only if it is the main product variant. */ + mainVariant?: InputMaybe; + /** A parent ID or a list of IDs to search for products with the parent ID. */ + parentId?: InputMaybe>; + /** The set of prices to filter. */ + prices?: InputMaybe; + /** The product unique identifier (you may provide a list of IDs if needed). */ + productId?: InputMaybe>; + /** The product variant unique identifier (you may provide a list of IDs if needed). */ + productVariantId?: InputMaybe>; + /** A product ID or a list of IDs to search for other products with the same parent ID. */ + sameParentAs?: InputMaybe>; + /** The set of SKUs which the result item SKU must be included. */ + sku?: InputMaybe>>; + /** Show products with a quantity of available products in stock greater than or equal to the given number. */ + stock_gte?: InputMaybe; + /** Show products with a quantity of available products in stock less than or equal to the given number. */ + stock_lte?: InputMaybe; + /** The set of stocks to filter. */ + stocks?: InputMaybe; + /** Retrieve products which the last update date is greater than or equal to the given date. */ + updatedAt_gte?: InputMaybe; + /** Retrieve products which the last update date is less than or equal to the given date. */ + updatedAt_lte?: InputMaybe; +}; + +/** Custom attribute defined on store's admin may also be used as a filter. */ +export type ProductFilterInput = { + /** The attribute name. */ + field: Scalars['String']['input']; + /** The set of values which the result filter item value must be included in. */ + values: Array>; +}; + +/** Options available for the given product. */ +export type ProductOption = Node & { + /** A list of attributes available for the given product and its variants. */ + attributes?: Maybe>>; + /** A list of customizations available for the given products. */ + customizations?: Maybe>>; + /** The node unique identifier. */ + id?: Maybe; +}; + + +/** Options available for the given product. */ +export type ProductOptionAttributesArgs = { + filter?: InputMaybe>>; +}; + +/** A product price alert. */ +export type ProductPriceAlert = { + /** The alerted's email. */ + email?: Maybe; + /** The alerted's name. */ + name?: Maybe; + /** The price alert ID. */ + priceAlertId: Scalars['Long']['output']; + /** The product variant ID. */ + productVariantId: Scalars['Long']['output']; + /** The request date. */ + requestDate: Scalars['DateTime']['output']; + /** The target price. */ + targetPrice: Scalars['Decimal']['output']; +}; + +export type ProductRecommendationAlgorithm = + | 'DEFAULT'; + +/** Define the product attribute which the result set will be sorted on. */ +export type ProductSearchSortKeys = + /** The applied discount to the product variant price. */ + | 'DISCOUNT' + /** The product name. */ + | 'NAME' + /** The product variant price. */ + | 'PRICE' + /** Sort in a random way. */ + | 'RANDOM' + /** The date the product was released. */ + | 'RELEASE_DATE' + /** The relevance that the search engine gave to the possible result item based on own criteria. */ + | 'RELEVANCE' + /** The sales number on a period of time. */ + | 'SALES' + /** The quantity in stock of the product variant. */ + | 'STOCK'; + +/** Define the product attribute which the result set will be sorted on. */ +export type ProductSortKeys = + /** The applied discount to the product variant price. */ + | 'DISCOUNT' + /** The product name. */ + | 'NAME' + /** The product variant price. */ + | 'PRICE' + /** Sort in a random way. */ + | 'RANDOM' + /** The date the product was released. */ + | 'RELEASE_DATE' + /** The sales number on a period of time. */ + | 'SALES' + /** The quantity in stock of the product variant. */ + | 'STOCK'; + +export type ProductSubscription = { + /** The amount of discount if this product is sold as a subscription. */ + discount: Scalars['Decimal']['output']; + /** The price of the product when sold as a subscription. */ + price?: Maybe; + /** Wether this product is sold only as a subscrition. */ + subscriptionOnly: Scalars['Boolean']['output']; +}; + +/** Product variants that have the attribute. */ +export type ProductVariant = Node & { + /** The available stock at the default distribution center. */ + aggregatedStock?: Maybe; + /** The product alias. */ + alias?: Maybe; + /** List of the selected variant attributes. */ + attributes?: Maybe>>; + /** Field to check if the product is available in stock. */ + available?: Maybe; + /** The product's EAN. */ + ean?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** The product's images. */ + images?: Maybe>>; + /** The seller's product offers. */ + offers?: Maybe>>; + /** The product prices. */ + prices?: Maybe; + /** Product unique identifier. */ + productId?: Maybe; + /** Variant unique identifier. */ + productVariantId?: Maybe; + /** Product variant name. */ + productVariantName?: Maybe; + /** List of promotions this product variant belongs to. */ + promotions?: Maybe>>; + /** The product's unique SKU. */ + sku?: Maybe; + /** The available stock at the default distribution center. */ + stock?: Maybe; +}; + + +/** Product variants that have the attribute. */ +export type ProductVariantImagesArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** A connection to a list of items. */ +export type ProductsConnection = { + /** A list of edges. */ + edges?: Maybe>; + /** A flattened list of the nodes. */ + nodes?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + totalCount: Scalars['Int']['output']; +}; + +/** An edge in a connection. */ +export type ProductsEdge = { + /** A cursor for use in pagination. */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Information about promotions of a product. */ +export type Promotion = { + /** The promotion html content. */ + content?: Maybe; + /** Where the promotion is shown (spot, product page, etc..). */ + disclosureType?: Maybe; + /** The end date for the promotion. */ + endDate: Scalars['DateTime']['output']; + /** The stamp URL of the promotion. */ + fullStampUrl?: Maybe; + /** The promotion id. */ + id: Scalars['Long']['output']; + /** The stamp of the promotion. */ + stamp?: Maybe; + /** The promotion title. */ + title?: Maybe; +}; + + +/** Information about promotions of a product. */ +export type PromotionFullStampUrlArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +export type QueryRoot = { + /** Get informations about an address. */ + address?: Maybe; + /** Get query completion suggestion. */ + autocomplete?: Maybe; + /** List of banners. */ + banners?: Maybe; + /** List of brands */ + brands?: Maybe; + /** Retrieve a buylist by the given id. */ + buyList?: Maybe; + /** Prices informations */ + calculatePrices?: Maybe; + /** List of categories. */ + categories?: Maybe; + /** Get info from the checkout cart corresponding to the given ID. */ + checkout?: Maybe; + /** Retrieve essential checkout details for a specific cart. */ + checkoutLite?: Maybe; + /** List of contents. */ + contents?: Maybe; + /** Get informations about a customer from the store. */ + customer?: Maybe; + /** Get informations about a customer access token. */ + customerAccessTokenDetails?: Maybe; + /** Retrieve an event list by the token. */ + eventList?: Maybe; + /** Retrieves event types */ + eventListType?: Maybe>>; + /** Retrieves a list of store events. */ + eventLists?: Maybe>>; + /** Retrieve a single hotsite. A hotsite consists of products, banners and contents. */ + hotsite?: Maybe; + /** List of the shop's hotsites. A hotsite consists of products, banners and contents. */ + hotsites?: Maybe; + /** Get information group fields. */ + informationGroupFields?: Maybe>>; + /** List of menu groups. */ + menuGroups?: Maybe>>; + /** + * Get newsletter information group fields. + * @deprecated Use the informationGroupFields + */ + newsletterInformationGroupFields?: Maybe>>; + node?: Maybe; + nodes?: Maybe>>; + /** Get single partner. */ + partner?: Maybe; + /** Get partner by region. */ + partnerByRegion?: Maybe; + /** List of partners. */ + partners?: Maybe; + /** Returns the available payment methods for a given cart ID */ + paymentMethods?: Maybe>>; + /** Retrieve a product by the given id. */ + product?: Maybe; + /** + * Options available for the given product. + * @deprecated Use the product query. + */ + productOptions?: Maybe; + /** Retrieve a list of recommended products by product id. */ + productRecommendations?: Maybe>>; + /** Retrieve a list of products by specific filters. */ + products?: Maybe; + /** Retrieve a list of scripts. */ + scripts?: Maybe>>; + /** Search products with cursor pagination. */ + search?: Maybe; + /** Get the shipping quote groups by providing CEP and checkout or products. */ + shippingQuoteGroups?: Maybe>>; + /** Get the shipping quotes by providing CEP and checkout or product identifier. */ + shippingQuotes?: Maybe>>; + /** Store informations */ + shop?: Maybe; + /** Returns a single store setting */ + shopSetting?: Maybe; + /** Store settings */ + shopSettings?: Maybe>>; + /** Get the URI kind. */ + uri?: Maybe; +}; + + +export type QueryRootAddressArgs = { + cep?: InputMaybe; +}; + + +export type QueryRootAutocompleteArgs = { + limit?: InputMaybe; + partnerAccessToken?: InputMaybe; + query?: InputMaybe; +}; + + +export type QueryRootBannersArgs = { + after?: InputMaybe; + bannerIds?: InputMaybe>; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: BannerSortKeys; +}; + + +export type QueryRootBrandsArgs = { + after?: InputMaybe; + before?: InputMaybe; + brandInput?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: BrandSortKeys; +}; + + +export type QueryRootBuyListArgs = { + id: Scalars['Long']['input']; + partnerAccessToken?: InputMaybe; +}; + + +export type QueryRootCalculatePricesArgs = { + partnerAccessToken?: InputMaybe; + products: Array>; +}; + + +export type QueryRootCategoriesArgs = { + after?: InputMaybe; + before?: InputMaybe; + categoryIds?: InputMaybe>; + first?: InputMaybe; + last?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: CategorySortKeys; + urls?: InputMaybe>>; +}; + + +export type QueryRootCheckoutArgs = { + checkoutId: Scalars['String']['input']; + customerAccessToken?: InputMaybe; +}; + + +export type QueryRootCheckoutLiteArgs = { + checkoutId: Scalars['Uuid']['input']; +}; + + +export type QueryRootContentsArgs = { + after?: InputMaybe; + before?: InputMaybe; + contentIds?: InputMaybe>; + first?: InputMaybe; + last?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: ContentSortKeys; +}; + + +export type QueryRootCustomerArgs = { + customerAccessToken?: InputMaybe; +}; + + +export type QueryRootCustomerAccessTokenDetailsArgs = { + customerAccessToken?: InputMaybe; +}; + + +export type QueryRootEventListArgs = { + eventListToken?: InputMaybe; +}; + + +export type QueryRootEventListsArgs = { + eventDate?: InputMaybe; + eventName?: InputMaybe; + eventType?: InputMaybe; +}; + + +export type QueryRootHotsiteArgs = { + hotsiteId?: InputMaybe; + partnerAccessToken?: InputMaybe; + url?: InputMaybe; +}; + + +export type QueryRootHotsitesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + hotsiteIds?: InputMaybe>; + last?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: HotsiteSortKeys; +}; + + +export type QueryRootInformationGroupFieldsArgs = { + type: EnumInformationGroup; +}; + + +export type QueryRootMenuGroupsArgs = { + partnerAccessToken?: InputMaybe; + position?: InputMaybe; + url: Scalars['String']['input']; +}; + + +export type QueryRootNodeArgs = { + id: Scalars['ID']['input']; +}; + + +export type QueryRootNodesArgs = { + ids: Array; +}; + + +export type QueryRootPartnerArgs = { + partnerAccessToken: Scalars['String']['input']; +}; + + +export type QueryRootPartnerByRegionArgs = { + input: PartnerByRegionInput; +}; + + +export type QueryRootPartnersArgs = { + after?: InputMaybe; + alias?: InputMaybe>>; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + names?: InputMaybe>>; + priceTableIds?: InputMaybe>; + sortDirection?: SortDirection; + sortKey?: PartnerSortKeys; +}; + + +export type QueryRootPaymentMethodsArgs = { + checkoutId: Scalars['Uuid']['input']; +}; + + +export type QueryRootProductArgs = { + partnerAccessToken?: InputMaybe; + productId: Scalars['Long']['input']; +}; + + +export type QueryRootProductOptionsArgs = { + productId: Scalars['Long']['input']; +}; + + +export type QueryRootProductRecommendationsArgs = { + algorithm?: ProductRecommendationAlgorithm; + partnerAccessToken?: InputMaybe; + productId: Scalars['Long']['input']; + quantity?: Scalars['Int']['input']; +}; + + +export type QueryRootProductsArgs = { + after?: InputMaybe; + before?: InputMaybe; + filters: ProductExplicitFiltersInput; + first?: InputMaybe; + last?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: SortDirection; + sortKey?: ProductSortKeys; +}; + + +export type QueryRootScriptsArgs = { + name?: InputMaybe; + pageType?: InputMaybe>; + position?: InputMaybe; + url?: InputMaybe; +}; + + +export type QueryRootSearchArgs = { + autoSecondSearch?: Scalars['Boolean']['input']; + operation?: Operation; + partnerAccessToken?: InputMaybe; + query?: InputMaybe; +}; + + +export type QueryRootShippingQuoteGroupsArgs = { + cep?: InputMaybe; + checkoutId: Scalars['Uuid']['input']; + useSelectedAddress?: InputMaybe; +}; + + +export type QueryRootShippingQuotesArgs = { + cep?: InputMaybe; + checkoutId?: InputMaybe; + productVariantId?: InputMaybe; + products?: InputMaybe>>; + quantity?: InputMaybe; + useSelectedAddress?: InputMaybe; +}; + + +export type QueryRootShopSettingArgs = { + settingName?: InputMaybe; +}; + + +export type QueryRootShopSettingsArgs = { + settingNames?: InputMaybe>>; +}; + + +export type QueryRootUriArgs = { + partnerAccessToken?: InputMaybe; + url: Scalars['String']['input']; +}; + +export type Question = { + answers?: Maybe>>; + question?: Maybe; + questionId?: Maybe; +}; + +/** Represents the product to be removed from the subscription. */ +export type RemoveSubscriptionProductInput = { + /** The Id of the product within the subscription to be removed. */ + subscriptionProductId: Scalars['Long']['input']; +}; + +/** Back in stock registration input parameters. */ +export type RestockAlertInput = { + /** Email to be notified. */ + email: Scalars['String']['input']; + /** Name of the person to be notified. */ + name?: InputMaybe; + /** The product variant id of the product to be notified. */ + productVariantId: Scalars['Long']['input']; +}; + +export type RestockAlertNode = { + /** Email to be notified. */ + email?: Maybe; + /** Name of the person to be notified. */ + name?: Maybe; + /** The product variant id. */ + productVariantId: Scalars['Long']['output']; + /** Date the alert was requested. */ + requestDate: Scalars['DateTime']['output']; +}; + +/** A product review written by a customer. */ +export type Review = { + /** The reviewer name. */ + customer?: Maybe; + /** The reviewer e-mail. */ + email?: Maybe; + /** The review rating. */ + rating: Scalars['Int']['output']; + /** The review content. */ + review?: Maybe; + /** The review date. */ + reviewDate: Scalars['DateTime']['output']; +}; + +/** Review input parameters. */ +export type ReviewCreateInput = { + /** The reviewer's email. */ + email: Scalars['String']['input']; + /** The reviewer's name. */ + name: Scalars['String']['input']; + /** The product variant id to add the review to. */ + productVariantId: Scalars['Long']['input']; + /** The review rating. */ + rating: Scalars['Int']['input']; + /** The google recaptcha token. */ + recaptchaToken?: InputMaybe; + /** The review content. */ + review: Scalars['String']['input']; +}; + +/** Entity SEO information. */ +export type Seo = { + /** Content of SEO. */ + content?: Maybe; + /** Equivalent SEO type for HTTP. */ + httpEquiv?: Maybe; + /** Name of SEO. */ + name?: Maybe; + /** Scheme for SEO. */ + scheme?: Maybe; + /** Type of SEO. */ + type?: Maybe; +}; + +/** Returns the scripts registered in the script manager. */ +export type Script = { + /** The script content. */ + content?: Maybe; + /** The script name. */ + name?: Maybe; + /** The script page type. */ + pageType: ScriptPageType; + /** The script position. */ + position: ScriptPosition; + /** The script priority. */ + priority: Scalars['Int']['output']; +}; + +export type ScriptPageType = + | 'ALL' + | 'BRAND' + | 'CATEGORY' + | 'HOME' + | 'PRODUCT' + | 'SEARCH'; + +export type ScriptPosition = + | 'BODY_END' + | 'BODY_START' + | 'FOOTER_END' + | 'FOOTER_START' + | 'HEADER_END' + | 'HEADER_START'; + +/** Search for relevant products to the searched term. */ +export type Search = { + /** Aggregations from the products. */ + aggregations?: Maybe; + /** A list of banners displayed in search pages. */ + banners?: Maybe>>; + /** List of search breadcrumbs. */ + breadcrumbs?: Maybe>>; + /** A list of contents displayed in search pages. */ + contents?: Maybe>>; + /** Information about forbidden term. */ + forbiddenTerm?: Maybe; + /** The quantity of products displayed per page. */ + pageSize: Scalars['Int']['output']; + /** A cursor based paginated list of products from the search. */ + products?: Maybe; + /** An offset based paginated list of products from the search. */ + productsByOffset?: Maybe; + /** Redirection url in case a term in the search triggers a redirect. */ + redirectUrl?: Maybe; + /** Time taken to perform the search. */ + searchTime?: Maybe; +}; + + +/** Search for relevant products to the searched term. */ +export type SearchProductsArgs = { + after?: InputMaybe; + before?: InputMaybe; + filters?: InputMaybe>>; + first?: InputMaybe; + last?: InputMaybe; + maximumPrice?: InputMaybe; + minimumPrice?: InputMaybe; + onlyMainVariant?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}; + + +/** Search for relevant products to the searched term. */ +export type SearchProductsByOffsetArgs = { + filters?: InputMaybe>>; + limit?: InputMaybe; + maximumPrice?: InputMaybe; + minimumPrice?: InputMaybe; + offset?: InputMaybe; + onlyMainVariant?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}; + +/** Aggregated filters of a list of products. */ +export type SearchFilter = { + /** The name of the field. */ + field?: Maybe; + /** The origin of the field. */ + origin?: Maybe; + /** List of the values of the field. */ + values?: Maybe>>; +}; + +/** Details of a filter value. */ +export type SearchFilterItem = { + /** The name of the value. */ + name?: Maybe; + /** The quantity of product with this value. */ + quantity: Scalars['Int']['output']; +}; + +/** The response data */ +export type SearchRecord = { + /** The date time of the processed request */ + date: Scalars['DateTime']['output']; + /** If the record was successful */ + isSuccess: Scalars['Boolean']['output']; + /** The searched query */ + query?: Maybe; +}; + +/** The information to be saved for reports. */ +export type SearchRecordInput = { + /** The search operation (And, Or) */ + operation?: InputMaybe; + /** The current page */ + page: Scalars['Int']['input']; + /** How many products show in page */ + pageSize: Scalars['Int']['input']; + /** The client search page url */ + pageUrl?: InputMaybe; + /** The user search query */ + query?: InputMaybe; + /** How many products the search returned */ + totalResults: Scalars['Int']['input']; +}; + +/** The selected payment method details. */ +export type SelectedPaymentMethod = { + /** The payment html. */ + html?: Maybe; + /** The unique identifier for the selected payment method. */ + id: Scalars['Uuid']['output']; + /** The list of installments associated with the selected payment method. */ + installments?: Maybe>>; + /** The payment Method Id. */ + paymentMethodId?: Maybe; + /** Payment related scripts. */ + scripts?: Maybe>>; + /** The selected installment. */ + selectedInstallment?: Maybe; + /** The suggested cards. */ + suggestedCards?: Maybe>>; +}; + +/** Details of an installment of the selected payment method. */ +export type SelectedPaymentMethodInstallment = { + /** The adjustment value applied to the installment. */ + adjustment: Scalars['Float']['output']; + /** The installment number. */ + number: Scalars['Int']['output']; + /** The total value of the installment. */ + total: Scalars['Float']['output']; + /** The individual value of each installment. */ + value: Scalars['Float']['output']; +}; + +/** Seller informations. */ +export type Seller = { + /** Seller name */ + name?: Maybe; +}; + +export type SellerInstallment = { + /** Wether the installment has discount. */ + discount: Scalars['Boolean']['output']; + /** Wether the installment has fees. */ + fees: Scalars['Boolean']['output']; + /** The number of installments. */ + number: Scalars['Int']['output']; + /** The value of the installment. */ + value: Scalars['Decimal']['output']; +}; + +export type SellerInstallmentPlan = { + /** The custom display name of this installment plan. */ + displayName?: Maybe; + /** List of the installments. */ + installments?: Maybe>>; +}; + +/** The seller's product offer */ +export type SellerOffer = { + name?: Maybe; + /** The product prices. */ + prices?: Maybe; + /** Variant unique identifier. */ + productVariantId?: Maybe; +}; + +/** The prices of the product. */ +export type SellerPrices = { + /** List of the possibles installment plans. */ + installmentPlans?: Maybe>>; + /** The listed regular price of the product. */ + listPrice?: Maybe; + /** The current working price. */ + price?: Maybe; +}; + +export type ShippingNode = { + /** The shipping deadline. */ + deadline: Scalars['Int']['output']; + /** The shipping deadline in hours. */ + deadlineInHours?: Maybe; + /** The delivery schedule detail. */ + deliverySchedule?: Maybe; + /** The shipping name. */ + name?: Maybe; + /** The shipping quote unique identifier. */ + shippingQuoteId: Scalars['Uuid']['output']; + /** The shipping type. */ + type?: Maybe; + /** The shipping value. */ + value: Scalars['Float']['output']; +}; + +/** The product informations related to the shipping. */ +export type ShippingProduct = { + /** The product unique identifier. */ + productVariantId: Scalars['Int']['output']; + /** The shipping value related to the product. */ + value: Scalars['Float']['output']; +}; + +/** A shipping quote. */ +export type ShippingQuote = Node & { + /** The shipping deadline. */ + deadline: Scalars['Int']['output']; + /** The shipping deadline in hours. */ + deadlineInHours?: Maybe; + /** The available time slots for scheduling the delivery of the shipping quote. */ + deliverySchedules?: Maybe>>; + /** The node unique identifier. */ + id?: Maybe; + /** The shipping name. */ + name?: Maybe; + /** The products related to the shipping. */ + products?: Maybe>>; + /** The shipping quote unique identifier. */ + shippingQuoteId: Scalars['Uuid']['output']; + /** The shipping type. */ + type?: Maybe; + /** The shipping value. */ + value: Scalars['Float']['output']; +}; + +/** A shipping quote group. */ +export type ShippingQuoteGroup = { + /** The distribution center. */ + distributionCenter?: Maybe; + /** The products related to the shipping quote group. */ + products?: Maybe>>; + /** Shipping quotes to group. */ + shippingQuotes?: Maybe>>; +}; + +/** The product informations related to the shipping. */ +export type ShippingQuoteGroupProduct = { + /** The product unique identifier. */ + productVariantId: Scalars['Int']['output']; +}; + +/** Informations about the store. */ +export type Shop = { + /** Checkout URL */ + checkoutUrl?: Maybe; + /** Store main URL */ + mainUrl?: Maybe; + /** Mobile checkout URL */ + mobileCheckoutUrl?: Maybe; + /** Mobile URL */ + mobileUrl?: Maybe; + /** Store modified name */ + modifiedName?: Maybe; + /** Store name */ + name?: Maybe; + /** Physical stores */ + physicalStores?: Maybe>>; + /** The URL to obtain the SitemapImagens.xml file */ + sitemapImagesUrl?: Maybe; + /** The URL to obtain the Sitemap.xml file */ + sitemapUrl?: Maybe; +}; + +/** Store setting. */ +export type ShopSetting = { + /** Setting name */ + name?: Maybe; + /** Setting value */ + value?: Maybe; +}; + +/** Information about a similar product. */ +export type SimilarProduct = { + /** The url alias of this similar product. */ + alias?: Maybe; + /** The file name of the similar product image. */ + image?: Maybe; + /** The URL of the similar product image. */ + imageUrl?: Maybe; + /** The name of the similar product. */ + name?: Maybe; +}; + + +/** Information about a similar product. */ +export type SimilarProductImageUrlArgs = { + h?: InputMaybe; + w?: InputMaybe; +}; + +export type SimpleLogin = { + /** The customer access token */ + customerAccessToken?: Maybe; + /** The simple login question to answer */ + question?: Maybe; + /** The simple login type */ + type: SimpleLoginType; +}; + +/** The simple login type. */ +export type SimpleLoginType = + | 'NEW' + | 'SIMPLE'; + +/** A hotsite is a group of products used to organize them or to make them easier to browse. */ +export type SingleHotsite = Node & { + /** Aggregations from the products. */ + aggregations?: Maybe; + /** A list of banners associated with the hotsite. */ + banners?: Maybe>>; + /** A list of breadcrumbs for the hotsite. */ + breadcrumbs?: Maybe>>; + /** A list of contents associated with the hotsite. */ + contents?: Maybe>>; + /** The hotsite will be displayed until this date. */ + endDate?: Maybe; + /** Expression used to associate products to the hotsite. */ + expression?: Maybe; + /** Hotsite unique identifier. */ + hotsiteId: Scalars['Long']['output']; + /** The node unique identifier. */ + id?: Maybe; + /** The hotsite's name. */ + name?: Maybe; + /** Set the quantity of products displayed per page. */ + pageSize: Scalars['Int']['output']; + /** A list of products associated with the hotsite. Cursor pagination. */ + products?: Maybe; + /** A list of products associated with the hotsite. Offset pagination. */ + productsByOffset?: Maybe; + /** A list of SEO contents associated with the hotsite. */ + seo?: Maybe>>; + /** Sorting information to be used by default on the hotsite. */ + sorting?: Maybe; + /** The hotsite will be displayed from this date. */ + startDate?: Maybe; + /** The subtype of the hotsite. */ + subtype?: Maybe; + /** The template used for the hotsite. */ + template?: Maybe; + /** The hotsite's URL. */ + url?: Maybe; +}; + + +/** A hotsite is a group of products used to organize them or to make them easier to browse. */ +export type SingleHotsiteProductsArgs = { + after?: InputMaybe; + before?: InputMaybe; + filters?: InputMaybe>>; + first?: InputMaybe; + last?: InputMaybe; + maximumPrice?: InputMaybe; + minimumPrice?: InputMaybe; + onlyMainVariant?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}; + + +/** A hotsite is a group of products used to organize them or to make them easier to browse. */ +export type SingleHotsiteProductsByOffsetArgs = { + filters?: InputMaybe>>; + limit?: InputMaybe; + maximumPrice?: InputMaybe; + minimumPrice?: InputMaybe; + offset?: InputMaybe; + onlyMainVariant?: InputMaybe; + partnerAccessToken?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}; + +/** A product represents an item for sale in the store. */ +export type SingleProduct = Node & { + /** Check if the product can be added to cart directly from spot. */ + addToCartFromSpot?: Maybe; + /** The product url alias. */ + alias?: Maybe; + /** Information about the possible selection attributes. */ + attributeSelections?: Maybe; + /** List of the product attributes. */ + attributes?: Maybe>>; + /** The product author. */ + author?: Maybe; + /** Field to check if the product is available in stock. */ + available?: Maybe; + /** The product average rating. From 0 to 5. */ + averageRating?: Maybe; + /** List of product breadcrumbs. */ + breadcrumbs?: Maybe>>; + /** BuyBox informations. */ + buyBox?: Maybe; + /** Buy together products. */ + buyTogether?: Maybe>>; + /** Buy together groups products. */ + buyTogetherGroups?: Maybe>>; + /** The product collection. */ + collection?: Maybe; + /** The product condition. */ + condition?: Maybe; + /** The product creation date. */ + createdAt?: Maybe; + /** A list of customizations available for the given products. */ + customizations?: Maybe>>; + /** The product delivery deadline. */ + deadline?: Maybe; + /** Product deadline alert informations. */ + deadlineAlert?: Maybe; + /** Check if the product should be displayed. */ + display?: Maybe; + /** Check if the product should be displayed only for partners. */ + displayOnlyPartner?: Maybe; + /** Check if the product should be displayed on search. */ + displaySearch?: Maybe; + /** The product's unique EAN. */ + ean?: Maybe; + /** Check if the product offers free shipping. */ + freeShipping?: Maybe; + /** The product gender. */ + gender?: Maybe; + /** The node unique identifier. */ + id?: Maybe; + /** List of the product images. */ + images?: Maybe>>; + /** List of the product insformations. */ + informations?: Maybe>>; + /** Check if its the main variant. */ + mainVariant?: Maybe; + /** The product maximum quantity for an order. */ + maximumOrderQuantity?: Maybe; + /** The product minimum quantity for an order. */ + minimumOrderQuantity?: Maybe; + /** Check if the product is a new release. */ + newRelease?: Maybe; + /** The number of votes that the average rating consists of. */ + numberOfVotes?: Maybe; + /** Product parallel options information. */ + parallelOptions?: Maybe>>; + /** Parent product unique identifier. */ + parentId?: Maybe; + /** The product prices. */ + prices?: Maybe; + /** Summarized informations about the brand of the product. */ + productBrand?: Maybe; + /** Summarized informations about the categories of the product. */ + productCategories?: Maybe>>; + /** Product unique identifier. */ + productId?: Maybe; + /** The product name. */ + productName?: Maybe; + /** + * Summarized informations about the subscription of the product. + * @deprecated Use subscriptionGroups to get subscription information. + */ + productSubscription?: Maybe; + /** Variant unique identifier. */ + productVariantId?: Maybe; + /** List of promotions this product belongs to. */ + promotions?: Maybe>>; + /** The product publisher */ + publisher?: Maybe; + /** List of customer reviews for this product. */ + reviews?: Maybe>>; + /** The product seller. */ + seller?: Maybe; + /** Product SEO informations. */ + seo?: Maybe>>; + /** List of similar products. */ + similarProducts?: Maybe>>; + /** The product's unique SKU. */ + sku?: Maybe; + /** The values of the spot attribute. */ + spotAttributes?: Maybe>>; + /** The product spot information. */ + spotInformation?: Maybe; + /** Check if the product is on spotlight. */ + spotlight?: Maybe; + /** The available aggregated product stock (all variants) at the default distribution center. */ + stock?: Maybe; + /** List of the product stocks on different distribution centers. */ + stocks?: Maybe>>; + /** List of subscription groups this product belongs to. */ + subscriptionGroups?: Maybe>>; + /** Check if the product is a telesale. */ + telesales?: Maybe; + /** The product last update date. */ + updatedAt?: Maybe; + /** The product video url. */ + urlVideo?: Maybe; + /** The variant name. */ + variantName?: Maybe; + /** The available aggregated variant stock at the default distribution center. */ + variantStock?: Maybe; +}; + + +/** A product represents an item for sale in the store. */ +export type SingleProductAttributeSelectionsArgs = { + selected?: InputMaybe>>; +}; + + +/** A product represents an item for sale in the store. */ +export type SingleProductImagesArgs = { + height?: InputMaybe; + width?: InputMaybe; +}; + +/** Define the sort orientation of the result set. */ +export type SortDirection = + /** The results will be sorted in an ascending order. */ + | 'ASC' + /** The results will be sorted in an descending order. */ + | 'DESC'; + +/** The subscription status to update. */ +export type Status = + | 'ACTIVE' + | 'CANCELED' + | 'PAUSED'; + +/** Information about a product stock in a particular distribution center. */ +export type Stock = { + /** The id of the distribution center. */ + id: Scalars['Long']['output']; + /** The number of physical items in stock at this DC. */ + items: Scalars['Long']['output']; + /** The name of the distribution center. */ + name?: Maybe; +}; + +/** Input to specify the range of stocks, distribution center ID, and distribution center name to return. */ +export type StocksInput = { + /** The distribution center Ids to match. */ + dcId?: InputMaybe>; + /** The distribution center names to match. */ + dcName?: InputMaybe>>; + /** The product stock must be greater than or equal to. */ + stock_gte?: InputMaybe; + /** The product stock must be lesser than or equal to. */ + stock_lte?: InputMaybe; +}; + +export type SubscriptionGroup = { + /** The recurring types for this subscription group. */ + recurringTypes?: Maybe>>; + /** The status name of the group. */ + status?: Maybe; + /** The status id of the group. */ + statusId: Scalars['Int']['output']; + /** The subscription group id. */ + subscriptionGroupId: Scalars['Long']['output']; + /** Wether the product is only avaible for subscription. */ + subscriptionOnly: Scalars['Boolean']['output']; +}; + +/** Represents the product to be applied to the subscription. */ +export type SubscriptionProductsInput = { + /** The variant Id of the product. */ + productVariantId: Scalars['Long']['input']; + /** The quantity of the product. */ + quantity: Scalars['Int']['input']; +}; + +export type SubscriptionRecurringType = { + /** The number of days of the recurring type. */ + days: Scalars['Int']['output']; + /** The recurring type display name. */ + name?: Maybe; + /** The recurring type id. */ + recurringTypeId: Scalars['Long']['output']; +}; + +export type SuggestedCard = { + /** Credit card brand. */ + brand?: Maybe; + /** Credit card key. */ + key?: Maybe; + /** Customer name on credit card. */ + name?: Maybe; + /** Credit card number. */ + number?: Maybe; +}; + +/** Represents the Type of Customer's Checking Account. */ +export type TypeCheckingAccount = + /** Credit */ + | 'Credit' + /** Debit */ + | 'Debit'; + +export type UpdateCustomerAddressInput = { + address?: InputMaybe; + address2?: InputMaybe; + addressDetails?: InputMaybe; + addressNumber?: InputMaybe; + cep?: InputMaybe; + city?: InputMaybe; + country?: InputMaybe; + email?: InputMaybe; + name?: InputMaybe; + neighborhood?: InputMaybe; + phone?: InputMaybe; + referencePoint?: InputMaybe; + state?: InputMaybe; + street?: InputMaybe; +}; + +/** Node of URI Kind. */ +export type Uri = { + /** The origin of the hotsite. */ + hotsiteSubtype?: Maybe; + /** Path kind. */ + kind: UriKind; + /** The partner subtype. */ + partnerSubtype?: Maybe; + /** Product alias. */ + productAlias?: Maybe; + /** Product categories IDs. */ + productCategoriesIds?: Maybe>; + /** Redirect status code. */ + redirectCode?: Maybe; + /** Url to redirect. */ + redirectUrl?: Maybe; +}; + +export type UriKind = + | 'BUY_LIST' + | 'HOTSITE' + | 'NOT_FOUND' + | 'PARTNER' + | 'PRODUCT' + | 'REDIRECT'; + +export type WholesalePrices = { + /** The wholesale price. */ + price: Scalars['Decimal']['output']; + /** The minimum quantity required for the wholesale price to be applied */ + quantity: Scalars['Int']['output']; +}; + +/** A representation of available time slots for scheduling a delivery. */ +export type DeliverySchedule = { + /** The date of the delivery schedule. */ + date: Scalars['DateTime']['output']; + /** The list of time periods available for scheduling a delivery. */ + periods?: Maybe>>; +}; + +/** Informations about a forbidden search term. */ +export type ForbiddenTerm = { + /** The suggested search term instead. */ + suggested?: Maybe; + /** The text to display about the term. */ + text?: Maybe; +}; + +export type Order = { + /** Checking account value used for the order. */ + checkingAccount: Scalars['Decimal']['output']; + /** The coupon for discounts. */ + coupon?: Maybe; + /** The date when te order was placed. */ + date: Scalars['DateTime']['output']; + /** The address where the order will be delivered. */ + deliveryAddress?: Maybe; + /** Order discount amount, if any. */ + discount: Scalars['Decimal']['output']; + /** Order interest fee, if any. */ + interestFee: Scalars['Decimal']['output']; + /** Information about order invoices. */ + invoices?: Maybe>>; + /** Information about order notes. */ + notes?: Maybe>>; + /** Order unique identifier. */ + orderId: Scalars['Long']['output']; + /** The date when the order was payed. */ + paymentDate?: Maybe; + /** Information about payments. */ + payments?: Maybe>>; + /** Products belonging to the order. */ + products?: Maybe>>; + /** List of promotions applied to the order. */ + promotions?: Maybe>; + /** The shipping fee. */ + shippingFee: Scalars['Decimal']['output']; + /** Information about order shippings. */ + shippings?: Maybe>>; + /** The order current status. */ + status?: Maybe; + /** List of the order status history. */ + statusHistory?: Maybe>>; + /** List of order subscriptions. */ + subscriptions?: Maybe>>; + /** Order subtotal value. */ + subtotal: Scalars['Decimal']['output']; + /** Order total value. */ + total: Scalars['Decimal']['output']; + /** Information about order trackings. */ + trackings?: Maybe>>; +}; + +export type PaymentMethod = Node & { + /** The node unique identifier. */ + id?: Maybe; + /** The url link that displays for the payment. */ + imageUrl?: Maybe; + /** The name of the payment method. */ + name?: Maybe; +}; + +/** Represents a time period available for scheduling a delivery. */ +export type Period = { + /** The end time of the time period. */ + end?: Maybe; + /** The unique identifier of the time period. */ + id: Scalars['Long']['output']; + /** The start time of the time period. */ + start?: Maybe; +}; + +/** The list of products to quote shipping. */ +export type ProductsInput = { + productVariantId: Scalars['Long']['input']; + quantity: Scalars['Int']['input']; +}; + +export type Wishlist = { + /** Wishlist products. */ + products?: Maybe>>; +}; + +export type CheckoutFragment = { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null }; + +export type ProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; + +export type ProductVariantFragment = { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; + +export type SingleProductPartFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; + +export type SingleProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, buyTogether?: Array<{ productId?: any | null } | null> | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; + +export type RestockAlertNodeFragment = { email?: string | null, name?: string | null, productVariantId: any, requestDate: any }; + +export type NewsletterNodeFragment = { email?: string | null, name?: string | null, createDate: any, updateDate?: any | null }; + +export type ShippingQuoteFragment = { id?: string | null, type?: string | null, name?: string | null, value: number, deadline: number, shippingQuoteId: any, deliverySchedules?: Array<{ date: any, periods?: Array<{ end?: string | null, id: any, start?: string | null } | null> | null } | null> | null, products?: Array<{ productVariantId: number, value: number } | null> | null }; + +export type CustomerFragment = { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null }; + +export type WishlistReducedProductFragment = { productId?: any | null, productName?: string | null }; + +export type GetProductQueryVariables = Exact<{ + productId: Scalars['Long']['input']; +}>; + + +export type GetProductQuery = { product?: { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, buyTogether?: Array<{ productId?: any | null } | null> | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null }; + +export type GetCartQueryVariables = Exact<{ + checkoutId: Scalars['String']['input']; +}>; + + +export type GetCartQuery = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; + +export type CreateCartMutationVariables = Exact<{ [key: string]: never; }>; + + +export type CreateCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; + +export type GetProductsQueryVariables = Exact<{ + filters: ProductExplicitFiltersInput; + first: Scalars['Int']['input']; + sortDirection: SortDirection; + sortKey?: InputMaybe; + after?: InputMaybe; +}>; + + +export type GetProductsQuery = { products?: { totalCount: number, nodes?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null, pageInfo: { hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null } } | null }; + +export type SearchQueryVariables = Exact<{ + operation: Operation; + query?: InputMaybe; + onlyMainVariant?: InputMaybe; + minimumPrice?: InputMaybe; + maximumPrice?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; + filters?: InputMaybe> | InputMaybe>; +}>; + + +export type SearchQuery = { result?: { pageSize: number, redirectUrl?: string | null, searchTime?: string | null, aggregations?: { maximumPrice: any, minimumPrice: any, priceRanges?: Array<{ quantity: number, range?: string | null } | null> | null, filters?: Array<{ field?: string | null, origin?: string | null, values?: Array<{ quantity: number, name?: string | null } | null> | null } | null> | null } | null, breadcrumbs?: Array<{ link?: string | null, text?: string | null } | null> | null, forbiddenTerm?: { text?: string | null, suggested?: string | null } | null, productsByOffset?: { page: number, pageSize: number, totalCount: number, items?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null } | null }; + +export type AddCouponMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; + coupon: Scalars['String']['input']; +}>; + + +export type AddCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; + +export type AddItemToCartMutationVariables = Exact<{ + input: CheckoutProductInput; +}>; + + +export type AddItemToCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; + +export type RemoveCouponMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; +}>; + + +export type RemoveCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; + +export type RemoveItemFromCartMutationVariables = Exact<{ + input: CheckoutProductInput; +}>; + + +export type RemoveItemFromCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; + +export type ProductRestockAlertMutationVariables = Exact<{ + input: RestockAlertInput; +}>; + + +export type ProductRestockAlertMutation = { productRestockAlert?: { email?: string | null, name?: string | null, productVariantId: any, requestDate: any } | null }; + +export type WishlistAddProductMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + productId: Scalars['Long']['input']; +}>; + + +export type WishlistAddProductMutation = { wishlistAddProduct?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null }; + +export type WishlistRemoveProductMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + productId: Scalars['Long']['input']; +}>; + + +export type WishlistRemoveProductMutation = { wishlistRemoveProduct?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null }; + +export type CreateNewsletterRegisterMutationVariables = Exact<{ + input: NewsletterInput; +}>; + + +export type CreateNewsletterRegisterMutation = { createNewsletterRegister?: { email?: string | null, name?: string | null, createDate: any, updateDate?: any | null } | null }; + +export type AutocompleteQueryVariables = Exact<{ + limit?: InputMaybe; + query?: InputMaybe; + partnerAccessToken?: InputMaybe; +}>; + + +export type AutocompleteQuery = { autocomplete?: { suggestions?: Array | null, products?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null }; + +export type ProductRecommendationsQueryVariables = Exact<{ + productId: Scalars['Long']['input']; + algorithm: ProductRecommendationAlgorithm; + partnerAccessToken?: InputMaybe; + quantity: Scalars['Int']['input']; +}>; + + +export type ProductRecommendationsQuery = { productRecommendations?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null }; + +export type ShippingQuotesQueryVariables = Exact<{ + cep?: InputMaybe; + checkoutId?: InputMaybe; + productVariantId?: InputMaybe; + quantity?: InputMaybe; + useSelectedAddress?: InputMaybe; +}>; + + +export type ShippingQuotesQuery = { shippingQuotes?: Array<{ id?: string | null, type?: string | null, name?: string | null, value: number, deadline: number, shippingQuoteId: any, deliverySchedules?: Array<{ date: any, periods?: Array<{ end?: string | null, id: any, start?: string | null } | null> | null } | null> | null, products?: Array<{ productVariantId: number, value: number } | null> | null } | null> | null }; + +export type GetUserQueryVariables = Exact<{ + customerAccessToken?: InputMaybe; +}>; + + +export type GetUserQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; + +export type GetWislistQueryVariables = Exact<{ + customerAccessToken?: InputMaybe; +}>; + + +export type GetWislistQuery = { customer?: { wishlist?: { products?: Array<{ productId?: any | null, productName?: string | null } | null> | null } | null } | null }; + +export type GetUrlQueryVariables = Exact<{ + url: Scalars['String']['input']; +}>; + + +export type GetUrlQuery = { uri?: { hotsiteSubtype?: HotsiteSubtype | null, kind: UriKind, partnerSubtype?: PartnerSubtype | null, productAlias?: string | null, productCategoriesIds?: Array | null, redirectCode?: string | null, redirectUrl?: string | null } | null }; + +export type CreateProductReviewMutationVariables = Exact<{ + email: Scalars['String']['input']; + name: Scalars['String']['input']; + productVariantId: Scalars['Long']['input']; + rating: Scalars['Int']['input']; + review: Scalars['String']['input']; +}>; + + +export type CreateProductReviewMutation = { createProductReview?: { customer?: string | null, email?: string | null, rating: number, review?: string | null, reviewDate: any } | null }; + +export type SendGenericFormMutationVariables = Exact<{ + body?: InputMaybe; + file?: InputMaybe; + recaptchaToken?: InputMaybe; +}>; + + +export type SendGenericFormMutation = { sendGenericForm?: { isSuccess: boolean } | null }; + +export type HotsiteQueryVariables = Exact<{ + url?: InputMaybe; + filters?: InputMaybe> | InputMaybe>; + limit?: InputMaybe; + maximumPrice?: InputMaybe; + minimumPrice?: InputMaybe; + onlyMainVariant?: InputMaybe; + offset?: InputMaybe; + sortDirection?: InputMaybe; + sortKey?: InputMaybe; +}>; + + +export type HotsiteQuery = { result?: { endDate?: any | null, expression?: string | null, id?: string | null, name?: string | null, pageSize: number, startDate?: any | null, subtype?: HotsiteSubtype | null, template?: string | null, url?: string | null, hotsiteId: any, aggregations?: { maximumPrice: any, minimumPrice: any, filters?: Array<{ field?: string | null, origin?: string | null, values?: Array<{ name?: string | null, quantity: number } | null> | null } | null> | null, priceRanges?: Array<{ quantity: number, range?: string | null } | null> | null } | null, productsByOffset?: { page: number, pageSize: number, totalCount: number, items?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null, breadcrumbs?: Array<{ link?: string | null, text?: string | null } | null> | null, seo?: Array<{ content?: string | null, httpEquiv?: string | null, name?: string | null, scheme?: string | null, type?: string | null } | null> | null, sorting?: { direction?: SortDirection | null, field?: ProductSortKeys | null } | null } | null }; + +export type ProductOptionsQueryVariables = Exact<{ + productId: Scalars['Long']['input']; +}>; + + +export type ProductOptionsQuery = { productOptions?: { id?: string | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, values?: Array<{ value?: string | null, productVariants?: Array<{ aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null> | null } | null> | null } | null }; + +export type ShopQueryVariables = Exact<{ [key: string]: never; }>; + + +export type ShopQuery = { shop?: { checkoutUrl?: string | null, mainUrl?: string | null, mobileCheckoutUrl?: string | null, mobileUrl?: string | null, modifiedName?: string | null, name?: string | null } | null }; + +export type CustomerCreateMutationVariables = Exact<{ + input?: InputMaybe; +}>; + + +export type CustomerCreateMutation = { customerCreate?: { customerId: any, customerName?: string | null, customerType?: string | null } | null }; + +export type CustomerAuthenticatedLoginMutationVariables = Exact<{ + input: Scalars['String']['input']; + pass: Scalars['String']['input']; +}>; + + +export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, type?: LoginType | null, validUntil: any } | null }; diff --git a/checkout/graphql/storefront.graphql.json b/checkout/graphql/storefront.graphql.json new file mode 100644 index 000000000..345399d05 --- /dev/null +++ b/checkout/graphql/storefront.graphql.json @@ -0,0 +1,27810 @@ +{ + "data": { + "__schema": { + "queryType": { + "name": "QueryRoot" + }, + "mutationType": { + "name": "Mutation" + }, + "subscriptionType": null, + "types": [ + { + "kind": "OBJECT", + "name": "__Directive", + "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", + "fields": [ + { + "name": "args", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isRepeatable", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "locations", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "__DirectiveLocation", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "onField", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use `locations`." + }, + { + "name": "onFragment", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use `locations`." + }, + { + "name": "onOperation", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use `locations`." + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "__DirectiveLocation", + "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "QUERY", + "description": "Location adjacent to a query operation.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "MUTATION", + "description": "Location adjacent to a mutation operation.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SUBSCRIPTION", + "description": "Location adjacent to a subscription operation.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FIELD", + "description": "Location adjacent to a field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FRAGMENT_DEFINITION", + "description": "Location adjacent to a fragment definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FRAGMENT_SPREAD", + "description": "Location adjacent to a fragment spread.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INLINE_FRAGMENT", + "description": "Location adjacent to an inline fragment.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "VARIABLE_DEFINITION", + "description": "Location adjacent to a variable definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SCHEMA", + "description": "Location adjacent to a schema definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SCALAR", + "description": "Location adjacent to a scalar definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "OBJECT", + "description": "Location adjacent to an object type definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FIELD_DEFINITION", + "description": "Location adjacent to a field definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ARGUMENT_DEFINITION", + "description": "Location adjacent to an argument definition", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INTERFACE", + "description": "Location adjacent to an interface definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "UNION", + "description": "Location adjacent to a union definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM", + "description": "Location adjacent to an enum definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM_VALUE", + "description": "Location adjacent to an enum value definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_OBJECT", + "description": "Location adjacent to an input object type definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_FIELD_DEFINITION", + "description": "Location adjacent to an input object field definition.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__EnumValue", + "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", + "fields": [ + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Field", + "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", + "fields": [ + { + "name": "args", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__InputValue", + "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", + "fields": [ + { + "name": "defaultValue", + "description": "A GraphQL-formatted string representing the default value for this input value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Schema", + "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", + "fields": [ + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "directives", + "description": "A list of all directives supported by this server.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Directive", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mutationType", + "description": "If this server supports mutation, the type that mutation operations will be rooted at.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "queryType", + "description": "The type that query operations will be rooted at.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionType", + "description": "If this server support subscription, the type that subscription operations will be rooted at.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "types", + "description": "A list of all types supported by this server.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Type", + "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", + "fields": [ + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "enumValues", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__EnumValue", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fields", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Field", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "inputFields", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "interfaces", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "kind", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "__TypeKind", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ofType", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "possibleTypes", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "specifiedByURL", + "description": "`specifiedByURL` may return a String (in the form of a URL) for custom scalars, otherwise it will return `null`.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "__TypeKind", + "description": "An enum describing what kind of type a given `__Type` is.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "SCALAR", + "description": "Indicates this type is a scalar.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "OBJECT", + "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INTERFACE", + "description": "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "UNION", + "description": "Indicates this type is a union. `possibleTypes` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM", + "description": "Indicates this type is an enum. `enumValues` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_OBJECT", + "description": "Indicates this type is an input object. `inputFields` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "LIST", + "description": "Indicates this type is a list. `ofType` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NON_NULL", + "description": "Indicates this type is a non-null. `ofType` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Uuid", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutCustomer", + "description": "Represents a customer node in the checkout.", + "fields": [ + { + "name": "checkingAccountBalance", + "description": "Customer's checking account balance.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cnpj", + "description": "Taxpayer identification number for businesses.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cpf", + "description": "Brazilian individual taxpayer registry identification.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerId", + "description": "Customer's unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerName", + "description": "Customer's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "email", + "description": "The email address of the customer.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "phoneNumber", + "description": "Customer's phone number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Checkout", + "description": null, + "fields": [ + { + "name": "cep", + "description": "The CEP.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkingAccountActive", + "description": "Indicates if the checking account is being used.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkingAccountValue", + "description": "Total used from checking account.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutId", + "description": "The checkout unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "completed", + "description": "Indicates if the checkout is completed.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "coupon", + "description": "The coupon for discounts.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "couponDiscount", + "description": "The total coupon discount applied at checkout.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customer", + "description": "The customer associated with the checkout.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutCustomer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizationValue", + "description": "The total value of customizations added to the products.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discount", + "description": "The discount applied at checkout excluding any coupons.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "login", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "metadata", + "description": "The metadata related to this checkout.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Metadata", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "orders", + "description": "The checkout orders informations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutOrder", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentFees", + "description": "The additional fees applied based on the payment method.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "A list of products associated with the checkout.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutProductNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedAddress", + "description": "The selected delivery address for the checkout.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutAddress", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedPaymentMethod", + "description": "The selected payment method", + "args": [], + "type": { + "kind": "OBJECT", + "name": "SelectedPaymentMethod", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedShipping", + "description": "Selected Shipping.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ShippingNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedShippingGroups", + "description": "Selected shipping quote groups.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutShippingQuoteGroupNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingFee", + "description": "The shipping fee.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subtotal", + "description": "The subtotal value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "total", + "description": "The total value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalDiscount", + "description": "The total discount applied at checkout.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updateDate", + "description": "The last update date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "Url for the current checkout id.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrder", + "description": "Represents a node in the checkout order.", + "fields": [ + { + "name": "adjustments", + "description": "The list of adjustments applied to the order.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutOrderAdjustment", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "date", + "description": "The date of the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "delivery", + "description": "Details of the delivery or store pickup.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutOrderDelivery", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discountValue", + "description": "The discount value of the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "dispatchTimeText", + "description": "The dispatch time text from the shop settings.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "interestValue", + "description": "The interest value of the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "orderId", + "description": "The ID of the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "orderStatus", + "description": "The order status.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "OrderStatus", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "payment", + "description": "The payment information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutOrderPayment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "The list of products in the order.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutOrderProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingValue", + "description": "The shipping value of the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalValue", + "description": "The total value of the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ShippingNode", + "description": null, + "fields": [ + { + "name": "deadline", + "description": "The shipping deadline.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineInHours", + "description": "The shipping deadline in hours.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliverySchedule", + "description": "The delivery schedule detail.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "DeliveryScheduleDetail", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The shipping name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingQuoteId", + "description": "The shipping quote unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The shipping type.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The shipping value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ShippingQuoteGroup", + "description": "A shipping quote group.", + "fields": [ + { + "name": "distributionCenter", + "description": "The distribution center.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "DistributionCenter", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "The products related to the shipping quote group.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ShippingQuoteGroupProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingQuotes", + "description": "Shipping quotes to group.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "GroupShippingQuote", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Customer", + "description": "A customer from the store.", + "fields": [ + { + "name": "address", + "description": "A specific customer's address.", + "args": [ + { + "name": "addressId", + "description": "An address unique identifier to be searched.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "addresses", + "description": "Customer's addresses.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "birthDate", + "description": "Customer's birth date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "businessPhoneNumber", + "description": "Customer's business phone number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkingAccountBalance", + "description": "Customer's checking account balance.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkingAccountHistory", + "description": "Customer's checking account History.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CustomerCheckingAccountHistoryNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cnpj", + "description": "Taxpayer identification number for businesses.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "companyName", + "description": "Entities legal name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cpf", + "description": "Brazilian individual taxpayer registry identification.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "creationDate", + "description": "Creation Date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerId", + "description": "Customer's unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerName", + "description": "Customer's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerType", + "description": "Indicates if it is a natural person or company profile.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliveryAddress", + "description": "Customer's delivery address.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "email", + "description": "Customer's email address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "gender", + "description": "Customer's gender.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "informationGroups", + "description": "Customer information groups.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CustomerInformationGroupNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mobilePhoneNumber", + "description": "Customer's mobile phone number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "A specific order placed by the customer.", + "args": [ + { + "name": "orderId", + "description": "An order unique identifier to be searched.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": "0" + } + ], + "type": { + "kind": "OBJECT", + "name": "order", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "orders", + "description": "List of orders placed by the customer.", + "args": [ + { + "name": "offset", + "description": "The offset used to paginate.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": "0" + }, + { + "name": "sortDirection", + "description": "Define the sort orientation of the result set.", + "type": { + "kind": "ENUM", + "name": "OrderSortDirection", + "ofType": null + }, + "defaultValue": "DESC" + }, + { + "name": "sortKey", + "description": "Define the order attribute which the result set will be sorted on.", + "type": { + "kind": "ENUM", + "name": "CustomerOrderSortKeys", + "ofType": null + }, + "defaultValue": "DATE" + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerOrderCollectionSegment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ordersStatistics", + "description": "Statistics about the orders the customer made in a specific timeframe.", + "args": [ + { + "name": "dateGte", + "description": "Filter que customer orders by date greater than or equal the specified date.", + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "dateLt", + "description": "Filter que customer orders by date lesser than the specified date.", + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "onlyPaidOrders", + "description": "Toggle to apply the statistics only on orders with paid status.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": "true" + }, + { + "name": "partnerId", + "description": "The partner id which the order was made with.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerOrdersStatistics", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partners", + "description": "Get info about the associated partners.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Partner", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "phoneNumber", + "description": "Customer's phone number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "residentialAddress", + "description": "Customer's residential address.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "responsibleName", + "description": "Responsible's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rg", + "description": "Registration number Id.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stateRegistration", + "description": "State registration number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptions", + "description": "Customer's subscriptions.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CustomerSubscription", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updateDate", + "description": "Date of the last update.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "wishlist", + "description": "Customer wishlist.", + "args": [ + { + "name": "productsIds", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "wishlist", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerSubscription", + "description": null, + "fields": [ + { + "name": "billingAddress", + "description": "Subscription billing address.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cancellationDate", + "description": "The date when the subscription was cancelled.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "coupon", + "description": "The coupon code applied to the subscription.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "date", + "description": "The date of the subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliveryAddress", + "description": "Subscription delivery address.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "intercalatedRecurrenceDate", + "description": "The date of intercalated recurring payments.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nextRecurrenceDate", + "description": "The date of the next recurring payment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "orders", + "description": "Subscription orders.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "order", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pauseDate", + "description": "The date when the subscription was paused.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "payment", + "description": "The payment details for the subscription.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerSubscriptionPayment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "The list of products associated with the subscription.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CustomerSubscriptionProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "recurring", + "description": "The details of the recurring subscription.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerSubscriptionRecurring", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "status", + "description": "The subscription status.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroupId", + "description": "The subscription group id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionId", + "description": "Subscription unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Hotsite", + "description": "A hotsite is a group of products used to organize them or to make them easier to browse.", + "fields": [ + { + "name": "banners", + "description": "A list of banners associated with the hotsite.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Banner", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "contents", + "description": "A list of contents associated with the hotsite.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Content", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endDate", + "description": "The hotsite will be displayed until this date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "expression", + "description": "Expression used to associate products to the hotsite.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hotsiteId", + "description": "Hotsite unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The hotsite's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageSize", + "description": "Set the quantity of products displayed per page.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "A list of products associated with the hotsite.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sorting", + "description": "Sorting information to be used by default on the hotsite.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "HotsiteSorting", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startDate", + "description": "The hotsite will be displayed from this date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subtype", + "description": "The subtype of the hotsite.", + "args": [], + "type": { + "kind": "ENUM", + "name": "HotsiteSubtype", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "template", + "description": "The template used for the hotsite.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The hotsite's URL.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SingleHotsite", + "description": "A hotsite is a group of products used to organize them or to make them easier to browse.", + "fields": [ + { + "name": "aggregations", + "description": "Aggregations from the products.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductAggregations", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "banners", + "description": "A list of banners associated with the hotsite.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Banner", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "breadcrumbs", + "description": "A list of breadcrumbs for the hotsite.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Breadcrumb", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "contents", + "description": "A list of contents associated with the hotsite.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Content", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endDate", + "description": "The hotsite will be displayed until this date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "expression", + "description": "Expression used to associate products to the hotsite.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hotsiteId", + "description": "Hotsite unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The hotsite's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageSize", + "description": "Set the quantity of products displayed per page.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "A list of products associated with the hotsite. Cursor pagination.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "filters", + "description": "List of filters. Check filters result for available inputs.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ProductFilterInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "maximumPrice", + "description": "Maximum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "minimumPrice", + "description": "Minimum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "onlyMainVariant", + "description": "Toggle the return of only main variants.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "true" + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productsByOffset", + "description": "A list of products associated with the hotsite. Offset pagination.", + "args": [ + { + "name": "filters", + "description": "List of filters. Check filters result for available inputs.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ProductFilterInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "limit", + "description": "The number of products to return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "maximumPrice", + "description": "Maximum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "minimumPrice", + "description": "Minimum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "offset", + "description": "The offset used to paginate.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": "0" + }, + { + "name": "onlyMainVariant", + "description": "Toggle the return of only main variants.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "true" + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductCollectionSegment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo", + "description": "A list of SEO contents associated with the hotsite.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SEO", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sorting", + "description": "Sorting information to be used by default on the hotsite.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "HotsiteSorting", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startDate", + "description": "The hotsite will be displayed from this date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subtype", + "description": "The subtype of the hotsite.", + "args": [], + "type": { + "kind": "ENUM", + "name": "HotsiteSubtype", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "template", + "description": "The template used for the hotsite.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The hotsite's URL.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductCollectionSegment", + "description": null, + "fields": [ + { + "name": "items", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "page", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageSize", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalCount", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerOrderCollectionSegment", + "description": null, + "fields": [ + { + "name": "items", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "order", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "page", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageSize", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalCount", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Search", + "description": "Search for relevant products to the searched term.", + "fields": [ + { + "name": "aggregations", + "description": "Aggregations from the products.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductAggregations", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "banners", + "description": "A list of banners displayed in search pages.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Banner", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "breadcrumbs", + "description": "List of search breadcrumbs.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Breadcrumb", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "contents", + "description": "A list of contents displayed in search pages.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Content", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "forbiddenTerm", + "description": "Information about forbidden term.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "forbiddenTerm", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageSize", + "description": "The quantity of products displayed per page.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "A cursor based paginated list of products from the search.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "filters", + "description": "List of filters. Check filters result for available inputs.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ProductFilterInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "maximumPrice", + "description": "Maximum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "minimumPrice", + "description": "Minimum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "onlyMainVariant", + "description": "Toggle the return of only main variants.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "true" + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "ENUM", + "name": "ProductSearchSortKeys", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productsByOffset", + "description": "An offset based paginated list of products from the search.", + "args": [ + { + "name": "filters", + "description": "List of filters. Check filters result for available inputs.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ProductFilterInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "limit", + "description": "The number of products to return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": "10" + }, + { + "name": "maximumPrice", + "description": "Maximum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "minimumPrice", + "description": "Minimum price filter.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "offset", + "description": "The offset used to paginate.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": "0" + }, + { + "name": "onlyMainVariant", + "description": "Toggle the return of only main variants.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "true" + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "ENUM", + "name": "ProductSearchSortKeys", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductCollectionSegment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "redirectUrl", + "description": "Redirection url in case a term in the search triggers a redirect.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "searchTime", + "description": "Time taken to perform the search.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Brand", + "description": "Informations about brands and its products.", + "fields": [ + { + "name": "active", + "description": "If the brand is active at the platform.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "alias", + "description": "The alias for the brand's hotsite.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "brandId", + "description": "Brand unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createdAt", + "description": "The date the brand was created in the database.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fullUrlLogo", + "description": "The full brand logo URL.", + "args": [ + { + "name": "height", + "description": "The height of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The brand's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "A list of products from the brand.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + } + }, + "defaultValue": "NAME" + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updatedAt", + "description": "The last update date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlCarrossel", + "description": "A web address to be redirected.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlLink", + "description": "A web address linked to the brand.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlLogo", + "description": "The url of the brand's logo.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductOption", + "description": "Options available for the given product.", + "fields": [ + { + "name": "attributes", + "description": "A list of attributes available for the given product and its variants.", + "args": [ + { + "name": "filter", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AttributeFilterInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Attribute", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizations", + "description": "A list of customizations available for the given products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Customization", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "ProductFilterInput", + "description": "Custom attribute defined on store's admin may also be used as a filter.", + "fields": null, + "inputFields": [ + { + "name": "field", + "description": "The attribute name.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "values", + "description": "The set of values which the result filter item value must be included in.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Category", + "description": "Categories are used to arrange your products into different sections by similarity.", + "fields": [ + { + "name": "categoryId", + "description": "Category unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "children", + "description": "A list of child categories, if it exists.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Category", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "A description to the category.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayMenu", + "description": "Field to check if the category is displayed in the store's menu.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hotsiteAlias", + "description": "The hotsite alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hotsiteUrl", + "description": "The URL path for the category.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "The url to access the image linked to the category.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrlLink", + "description": "The web address to access the image linked to the category.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The category's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parent", + "description": "The parent category, if it exists.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Category", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parentCategoryId", + "description": "The parent category unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "position", + "description": "The position the category will be displayed.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "A list of products associated with the category.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + } + }, + "defaultValue": "NAME" + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlLink", + "description": "A web address linked to the category.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Customization", + "description": "Some products can have customizations, such as writing your name on it or other predefined options.", + "fields": [ + { + "name": "cost", + "description": "Cost of customization.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizationId", + "description": "Customization unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "groupName", + "description": "Customization group's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maxLength", + "description": "Maximum allowed size of the field.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The customization's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "Priority order of customization.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "Type of customization.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": "Value of customization.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SingleProduct", + "description": "A product represents an item for sale in the store.", + "fields": [ + { + "name": "addToCartFromSpot", + "description": "Check if the product can be added to cart directly from spot.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "alias", + "description": "The product url alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributeSelections", + "description": "Information about the possible selection attributes.", + "args": [ + { + "name": "selected", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AttributeFilterInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "AttributeSelection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributes", + "description": "List of the product attributes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductAttribute", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "author", + "description": "The product author.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "available", + "description": "Field to check if the product is available in stock.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "averageRating", + "description": "The product average rating. From 0 to 5.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "breadcrumbs", + "description": "List of product breadcrumbs.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Breadcrumb", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyBox", + "description": "BuyBox informations.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "BuyBox", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyTogether", + "description": "Buy together products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SingleProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyTogetherGroups", + "description": "Buy together groups products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BuyTogetherGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "collection", + "description": "The product collection.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "condition", + "description": "The product condition.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createdAt", + "description": "The product creation date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizations", + "description": "A list of customizations available for the given products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Customization", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadline", + "description": "The product delivery deadline.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineAlert", + "description": "Product deadline alert informations.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "DeadlineAlert", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "display", + "description": "Check if the product should be displayed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnlyPartner", + "description": "Check if the product should be displayed only for partners.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displaySearch", + "description": "Check if the product should be displayed on search.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ean", + "description": "The product's unique EAN.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "freeShipping", + "description": "Check if the product offers free shipping.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "gender", + "description": "The product gender.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "images", + "description": "List of the product images.", + "args": [ + { + "name": "height", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Image", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "informations", + "description": "List of the product insformations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Information", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mainVariant", + "description": "Check if its the main variant.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maximumOrderQuantity", + "description": "The product maximum quantity for an order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "minimumOrderQuantity", + "description": "The product minimum quantity for an order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "newRelease", + "description": "Check if the product is a new release.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "numberOfVotes", + "description": "The number of votes that the average rating consists of.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parallelOptions", + "description": "Product parallel options information.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parentId", + "description": "Parent product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "prices", + "description": "The product prices.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Prices", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productBrand", + "description": "Summarized informations about the brand of the product.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductBrand", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productCategories", + "description": "Summarized informations about the categories of the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductCategory", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productId", + "description": "Product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productName", + "description": "The product name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productSubscription", + "description": "Summarized informations about the subscription of the product.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductSubscription", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use subscriptionGroups to get subscription information." + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "promotions", + "description": "List of promotions this product belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Promotion", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "publisher", + "description": "The product publisher", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "reviews", + "description": "List of customer reviews for this product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Review", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seller", + "description": "The product seller.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Seller", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo", + "description": "Product SEO informations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SEO", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "similarProducts", + "description": "List of similar products. ", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SimilarProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sku", + "description": "The product's unique SKU.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotAttributes", + "description": "The values of the spot attribute.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotInformation", + "description": "The product spot information.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotlight", + "description": "Check if the product is on spotlight.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stock", + "description": "The available aggregated product stock (all variants) at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stocks", + "description": "List of the product stocks on different distribution centers.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Stock", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroups", + "description": "List of subscription groups this product belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SubscriptionGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "telesales", + "description": "Check if the product is a telesale.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updatedAt", + "description": "The product last update date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlVideo", + "description": "The product video url.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variantName", + "description": "The variant name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variantStock", + "description": "The available aggregated variant stock at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BuyList", + "description": "A buy list represents a list of items for sale in the store.", + "fields": [ + { + "name": "addToCartFromSpot", + "description": "Check if the product can be added to cart directly from spot.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "alias", + "description": "The product url alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributeSelections", + "description": "Information about the possible selection attributes.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "AttributeSelection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributes", + "description": "List of the product attributes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductAttribute", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "author", + "description": "The product author.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "available", + "description": "Field to check if the product is available in stock.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "averageRating", + "description": "The product average rating. From 0 to 5.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "breadcrumbs", + "description": "List of product breadcrumbs.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Breadcrumb", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyBox", + "description": "BuyBox informations.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "BuyBox", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyListId", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyListProducts", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BuyListProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyTogether", + "description": "Buy together products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SingleProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyTogetherGroups", + "description": "Buy together groups products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BuyTogetherGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "collection", + "description": "The product collection.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "condition", + "description": "The product condition.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createdAt", + "description": "The product creation date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizations", + "description": "A list of customizations available for the given products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Customization", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadline", + "description": "The product delivery deadline.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineAlert", + "description": "Product deadline alert informations.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "DeadlineAlert", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "display", + "description": "Check if the product should be displayed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnlyPartner", + "description": "Check if the product should be displayed only for partners.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displaySearch", + "description": "Check if the product should be displayed on search.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ean", + "description": "The product's unique EAN.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "freeShipping", + "description": "Check if the product offers free shipping.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "gender", + "description": "The product gender.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "images", + "description": "List of the product images.", + "args": [ + { + "name": "height", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Image", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "informations", + "description": "List of the product insformations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Information", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mainVariant", + "description": "Check if its the main variant.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maximumOrderQuantity", + "description": "The product maximum quantity for an order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "minimumOrderQuantity", + "description": "The product minimum quantity for an order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "newRelease", + "description": "Check if the product is a new release.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "numberOfVotes", + "description": "The number of votes that the average rating consists of.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parallelOptions", + "description": "Product parallel options information.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parentId", + "description": "Parent product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "prices", + "description": "The product prices.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Prices", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productBrand", + "description": "Summarized informations about the brand of the product.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductBrand", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productCategories", + "description": "Summarized informations about the categories of the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductCategory", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productId", + "description": "Product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productName", + "description": "The product name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productSubscription", + "description": "Summarized informations about the subscription of the product.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductSubscription", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use subscriptionGroups to get subscription information." + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "promotions", + "description": "List of promotions this product belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Promotion", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "publisher", + "description": "The product publisher", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "reviews", + "description": "List of customer reviews for this product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Review", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seller", + "description": "The product seller.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Seller", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo", + "description": "Product SEO informations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SEO", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "similarProducts", + "description": "List of similar products. ", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SimilarProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sku", + "description": "The product's unique SKU.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotAttributes", + "description": "The values of the spot attribute.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotInformation", + "description": "The product spot information.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotlight", + "description": "Check if the product is on spotlight.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stock", + "description": "The available aggregated product stock (all variants) at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stocks", + "description": "List of the product stocks on different distribution centers.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Stock", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroups", + "description": "List of subscription groups this product belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SubscriptionGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "telesales", + "description": "Check if the product is a telesale.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updatedAt", + "description": "The product last update date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlVideo", + "description": "The product video url.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variantName", + "description": "The variant name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variantStock", + "description": "The available aggregated variant stock at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductVariant", + "description": "Product variants that have the attribute.", + "fields": [ + { + "name": "aggregatedStock", + "description": "The available stock at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "alias", + "description": "The product alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributes", + "description": "List of the selected variant attributes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductAttribute", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "available", + "description": "Field to check if the product is available in stock.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ean", + "description": "The product's EAN.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "images", + "description": "The product's images.", + "args": [ + { + "name": "height", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Image", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offers", + "description": "The seller's product offers.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SellerOffer", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "prices", + "description": "The product prices.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Prices", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productId", + "description": "Product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantName", + "description": "Product variant name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "promotions", + "description": "List of promotions this product variant belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Promotion", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sku", + "description": "The product's unique SKU.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stock", + "description": "The available stock at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Shop", + "description": "Informations about the store.", + "fields": [ + { + "name": "checkoutUrl", + "description": "Checkout URL", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mainUrl", + "description": "Store main URL", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mobileCheckoutUrl", + "description": "Mobile checkout URL", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mobileUrl", + "description": "Mobile URL", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "modifiedName", + "description": "Store modified name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Store name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "physicalStores", + "description": "Physical stores", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PhysicalStore", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sitemapImagesUrl", + "description": "The URL to obtain the SitemapImagens.xml file", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sitemapUrl", + "description": "The URL to obtain the Sitemap.xml file", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Any", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Upload", + "description": "The `Upload` scalar type represents a file upload.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MenuGroup", + "description": "Informations about menu groups.", + "fields": [ + { + "name": "fullImageUrl", + "description": "The full image URL.", + "args": [ + { + "name": "height", + "description": "The height of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "Menu group image url.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "menuGroupId", + "description": "Menu group identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "menus", + "description": "List of menus associated with the current group", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Menu", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Menu group name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partnerId", + "description": "Menu group partner id.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "position", + "description": "Menu group position.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderProductNode", + "description": null, + "fields": [ + { + "name": "adjusts", + "description": "List of adjusts on the product price, if any.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderAdjustNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributes", + "description": "The product attributes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderAttributeNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizationPrice", + "description": "The cost of the customizations, if any.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customizations", + "description": "List of customizations for the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderCustomizationNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discount", + "description": "Amount of discount in the product price, if any.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "gift", + "description": "If the product is a gift.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "image", + "description": "The product image.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "listPrice", + "description": "The product list price.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The product name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "packagingPrice", + "description": "The cost of the packagings, if any.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "packagings", + "description": "List of packagings for the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderPackagingNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The product price.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productSeller", + "description": "Information about the product seller.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "OrderSellerNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "Quantity of the given product in the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "salePrice", + "description": "The product sale price.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sku", + "description": "The product SKU.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "trackings", + "description": "List of trackings for the order.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderTrackingNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "unitaryValue", + "description": "Value of an unit of the product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductNode", + "description": null, + "fields": [ + { + "name": "adjustments", + "description": "The product adjustment information", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutProductAdjustmentNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ajustedPrice", + "description": "The price adjusted with promotions and other price changes", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributeSelections", + "description": "Information about the possible selection attributes.", + "args": [ + { + "name": "selected", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AttributeFilterInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "AttributeSelection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "brand", + "description": "The product brand", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "category", + "description": "The product category", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customization", + "description": "The product customization.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutProductCustomizationNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "gift", + "description": "If the product is a gift", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "googleCategory", + "description": "The product Google category", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "The product URL image", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "informations", + "description": "The product informations", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installmentFee", + "description": "The product installment fee", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installmentValue", + "description": "The product installment value", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "listPrice", + "description": "The product list price", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "metadata", + "description": "The metadata related to this checkout.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Metadata", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The product name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "numberOfInstallments", + "description": "The product number of installments", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The product price", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productAttributes", + "description": "The product attributes", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutProductAttributeNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productId", + "description": "The product unique identifier", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "The product variant unique identifier", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "The product quantity", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seller", + "description": "The product seller.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutProductSellerNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingDeadline", + "description": "The product shipping deadline", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutShippingDeadlineNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sku", + "description": "The product SKU", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscription", + "description": "The product subscription information", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutProductSubscription", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalAdjustedPrice", + "description": "The total price adjusted with promotions and other price changes", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalListPrice", + "description": "The total list price", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The product URL", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "String", + "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Boolean", + "description": "The `Boolean` scalar type represents `true` or `false`.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Int", + "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ApplyPolicy", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "BEFORE_RESOLVER", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "AFTER_RESOLVER", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "ID", + "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Long", + "description": "The `Long` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "CustomerOrderSortKeys", + "description": "Define the order attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The order ID.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DATE", + "description": "The date the order was placed.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "STATUS", + "description": "The order current status.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "AMOUNT", + "description": "The total order value.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "OrderSortDirection", + "description": "Define the sort orientation of the result set.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "DESC", + "description": "The results will be sorted in an descending order.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ASC", + "description": "The results will be sorted in an ascending order.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductsConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductsEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalCount", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ProductSortKeys", + "description": "Define the product attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "NAME", + "description": "The product name.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SALES", + "description": "The sales number on a period of time.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PRICE", + "description": "The product variant price.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DISCOUNT", + "description": "The applied discount to the product variant price.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RANDOM", + "description": "Sort in a random way.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RELEASE_DATE", + "description": "The date the product was released.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "STOCK", + "description": "The quantity in stock of the product variant.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "SortDirection", + "description": "Define the sort orientation of the result set.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ASC", + "description": "The results will be sorted in an ascending order.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DESC", + "description": "The results will be sorted in an descending order.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Decimal", + "description": "The built-in `Decimal` scalar type.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ProductSearchSortKeys", + "description": "Define the product attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "RELEVANCE", + "description": "The relevance that the search engine gave to the possible result item based on own criteria.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NAME", + "description": "The product name.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SALES", + "description": "The sales number on a period of time.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PRICE", + "description": "The product variant price.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DISCOUNT", + "description": "The applied discount to the product variant price.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RANDOM", + "description": "Sort in a random way.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RELEASE_DATE", + "description": "The date the product was released.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "STOCK", + "description": "The quantity in stock of the product variant.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "AttributeFilterInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "attributeId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "value", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PageInfo", + "description": "Information about pagination in a connection.", + "fields": [ + { + "name": "endCursor", + "description": "When paginating forwards, the cursor to continue.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hasNextPage", + "description": "Indicates whether more edges exist following the set defined by the clients arguments.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hasPreviousPage", + "description": "Indicates whether more edges exist prior the set defined by the clients arguments.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startCursor", + "description": "When paginating backwards, the cursor to continue.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Product", + "description": "A product represents an item for sale in the store.", + "fields": [ + { + "name": "addToCartFromSpot", + "description": "Check if the product can be added to cart directly from spot.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "alias", + "description": "The product url alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributes", + "description": "List of the product attributes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductAttribute", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "author", + "description": "The product author.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "available", + "description": "Field to check if the product is available in stock.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "averageRating", + "description": "The product average rating. From 0 to 5.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyBox", + "description": "BuyBox informations.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "BuyBox", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "collection", + "description": "The product collection.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "condition", + "description": "The product condition.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createdAt", + "description": "The product creation date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadline", + "description": "The product delivery deadline.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "display", + "description": "Check if the product should be displayed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnlyPartner", + "description": "Check if the product should be displayed only for partners.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displaySearch", + "description": "Check if the product should be displayed on search.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ean", + "description": "The product's unique EAN.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "freeShipping", + "description": "Check if the product offers free shipping.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "gender", + "description": "The product gender.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "images", + "description": "List of the product images.", + "args": [ + { + "name": "height", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Image", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "informations", + "description": "List of the product insformations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Information", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mainVariant", + "description": "Check if its the main variant.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maximumOrderQuantity", + "description": "The product maximum quantity for an order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "minimumOrderQuantity", + "description": "The product minimum quantity for an order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "newRelease", + "description": "Check if the product is a new release.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "numberOfVotes", + "description": "The number of votes that the average rating consists of.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parentId", + "description": "Parent product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "prices", + "description": "The product prices.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Prices", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productBrand", + "description": "Summarized informations about the brand of the product.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductBrand", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productCategories", + "description": "Summarized informations about the categories of the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductCategory", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productId", + "description": "Product unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productName", + "description": "The product name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productSubscription", + "description": "Summarized informations about the subscription of the product.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductSubscription", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use subscriptionGroups to get subscription information." + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "promotions", + "description": "List of promotions this product belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Promotion", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "publisher", + "description": "The product publisher", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seller", + "description": "The product seller.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Seller", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "similarProducts", + "description": "List of similar products. ", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SimilarProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sku", + "description": "The product's unique SKU.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotAttributes", + "description": "The values of the spot attribute.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotInformation", + "description": "The product spot information.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "spotlight", + "description": "Check if the product is on spotlight.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stock", + "description": "The available aggregated product stock (all variants) at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stocks", + "description": "List of the product stocks on different distribution centers.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Stock", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroups", + "description": "List of subscription groups this product belongs to.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SubscriptionGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "telesales", + "description": "Check if the product is a telesale.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updatedAt", + "description": "The product last update date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlVideo", + "description": "The product video url.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variantName", + "description": "The variant name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variantStock", + "description": "The available aggregated variant stock at the default distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductsEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "QueryRoot", + "description": null, + "fields": [ + { + "name": "address", + "description": "Get informations about an address.", + "args": [ + { + "name": "cep", + "description": "The address zip code.", + "type": { + "kind": "SCALAR", + "name": "CEP", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "AddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "autocomplete", + "description": "Get query completion suggestion.", + "args": [ + { + "name": "limit", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "query", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Autocomplete", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "banners", + "description": "List of banners.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "bannerIds", + "description": "Filter the list by specific banner ids.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "BannerSortKeys", + "ofType": null + } + }, + "defaultValue": "ID" + } + ], + "type": { + "kind": "OBJECT", + "name": "BannersConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "brands", + "description": "List of brands", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "brandInput", + "description": "Brand input", + "type": { + "kind": "INPUT_OBJECT", + "name": "BrandFilterInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "BrandSortKeys", + "ofType": null + } + }, + "defaultValue": "ID" + } + ], + "type": { + "kind": "OBJECT", + "name": "BrandsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "buyList", + "description": "Retrieve a buylist by the given id.", + "args": [ + { + "name": "id", + "description": "The list ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "BuyList", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "calculatePrices", + "description": "Prices informations", + "args": [ + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "products", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CalculatePricesProductsInput", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Prices", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "categories", + "description": "List of categories.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "categoryIds", + "description": "Filter the list by specific category ids.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "CategorySortKeys", + "ofType": null + } + }, + "defaultValue": "ID" + }, + { + "name": "urls", + "description": "Filter the list by specific urls", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CategoriesConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkout", + "description": "Get info from the checkout cart corresponding to the given ID.", + "args": [ + { + "name": "checkoutId", + "description": "The cart ID used for checkout operations.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutLite", + "description": "Retrieve essential checkout details for a specific cart.", + "args": [ + { + "name": "checkoutId", + "description": "The cart ID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CheckoutLite", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "contents", + "description": "List of contents.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "contentIds", + "description": "Filter the list by specific content ids.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ContentSortKeys", + "ofType": null + } + }, + "defaultValue": "ID" + } + ], + "type": { + "kind": "OBJECT", + "name": "ContentsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customer", + "description": "Get informations about a customer from the store.", + "args": [ + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerAccessTokenDetails", + "description": "Get informations about a customer access token.", + "args": [ + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessTokenDetails", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "eventList", + "description": "Retrieve an event list by the token.", + "args": [ + { + "name": "eventListToken", + "description": "The event list token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "EventList", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "eventListType", + "description": "Retrieves event types", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "EventListType", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "eventLists", + "description": "Retrieves a list of store events.", + "args": [ + { + "name": "eventDate", + "description": "The event date.", + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "eventName", + "description": "The event name.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "eventType", + "description": "The event type name.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "EventListStore", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hotsite", + "description": "Retrieve a single hotsite. A hotsite consists of products, banners and contents.", + "args": [ + { + "name": "hotsiteId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "url", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "SingleHotsite", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hotsites", + "description": "List of the shop's hotsites. A hotsite consists of products, banners and contents.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "hotsiteIds", + "description": "Filter the list by specific hotsite ids.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "HotsiteSortKeys", + "ofType": null + } + }, + "defaultValue": "ID" + } + ], + "type": { + "kind": "OBJECT", + "name": "HotsitesConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "informationGroupFields", + "description": "Get information group fields.", + "args": [ + { + "name": "type", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "EnumInformationGroup", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "InformationGroupFieldNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "menuGroups", + "description": "List of menu groups.", + "args": [ + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "position", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "url", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "MenuGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "newsletterInformationGroupFields", + "description": "Get newsletter information group fields.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "InformationGroupFieldNode", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use the informationGroupFields" + }, + { + "name": "node", + "description": null, + "args": [ + { + "name": "id", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": null, + "args": [ + { + "name": "ids", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partner", + "description": "Get single partner.", + "args": [ + { + "name": "partnerAccessToken", + "description": "Filter the partner by access token.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Partner", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partnerByRegion", + "description": "Get partner by region.", + "args": [ + { + "name": "input", + "description": "Filter the partner by cep or region ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "PartnerByRegionInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Partner", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partners", + "description": "List of partners.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "alias", + "description": "Filter the list by specific alias.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "names", + "description": "Filter the list by specific names.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "priceTableIds", + "description": "Filter the list by specific price table ids.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "PartnerSortKeys", + "ofType": null + } + }, + "defaultValue": "ID" + } + ], + "type": { + "kind": "OBJECT", + "name": "PartnersConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentMethods", + "description": "Returns the available payment methods for a given cart ID", + "args": [ + { + "name": "checkoutId", + "description": "The cart ID used for checking available payment methods.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "paymentMethod", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "product", + "description": "Retrieve a product by the given id.", + "args": [ + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productId", + "description": "The product ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "SingleProduct", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productOptions", + "description": "Options available for the given product.", + "args": [ + { + "name": "productId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductOption", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use the product query." + }, + { + "name": "productRecommendations", + "description": "Retrieve a list of recommended products by product id.", + "args": [ + { + "name": "algorithm", + "description": "Algorithm type.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ProductRecommendationAlgorithm", + "ofType": null + } + }, + "defaultValue": "DEFAULT" + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productId", + "description": "The product identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": "The number of product recommendations.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": "5" + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "Retrieve a list of products by specific filters.", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "filters", + "description": "The product filters to apply.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ProductExplicitFiltersInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sortDirection", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + } + }, + "defaultValue": "ASC" + }, + { + "name": "sortKey", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + } + }, + "defaultValue": "NAME" + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductsConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "scripts", + "description": "Retrieve a list of scripts.", + "args": [ + { + "name": "name", + "description": "The script name.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "pageType", + "description": "The script page type list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ScriptPageType", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "position", + "description": "The script position.", + "type": { + "kind": "ENUM", + "name": "ScriptPosition", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "url", + "description": "Url for available scripts.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Script", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "search", + "description": "Search products with cursor pagination.", + "args": [ + { + "name": "autoSecondSearch", + "description": "Toggle to perform second search automatically when the primary search returns no products.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": "false" + }, + { + "name": "operation", + "description": "The operation to perform between query terms.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "Operation", + "ofType": null + } + }, + "defaultValue": "AND" + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "query", + "description": "The search query.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Search", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingQuoteGroups", + "description": "Get the shipping quote groups by providing CEP and checkout or products.", + "args": [ + { + "name": "cep", + "description": "CEP to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "CEP", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "checkoutId", + "description": "Checkout identifier to get the shipping quotes.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "useSelectedAddress", + "description": "Use the selected address to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ShippingQuoteGroup", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingQuotes", + "description": "Get the shipping quotes by providing CEP and checkout or product identifier.", + "args": [ + { + "name": "cep", + "description": "CEP to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "CEP", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "checkoutId", + "description": "Checkout identifier to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "Product identifier to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "products", + "description": "List of Products to get the shipping quotes.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "productsInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": "Quantity of the product to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": "1" + }, + { + "name": "useSelectedAddress", + "description": "Use the selected address to get the shipping quotes.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ShippingQuote", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shop", + "description": "Store informations", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Shop", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shopSetting", + "description": "Returns a single store setting", + "args": [ + { + "name": "settingName", + "description": "Setting name", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ShopSetting", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shopSettings", + "description": "Store settings", + "args": [ + { + "name": "settingNames", + "description": "Setting names", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ShopSetting", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "uri", + "description": "Get the URI kind.", + "args": [ + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "url", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Uri", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Mutation", + "description": null, + "fields": [ + { + "name": "checkoutAddCoupon", + "description": "Add coupon to checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "coupon", + "description": "The coupon.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "A customer's access token", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutAddMetadata", + "description": "Add metadata to checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "A customer's access token", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "metadata", + "description": "The list of metadata to add", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutMetadataInput", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutAddMetadataForProductVariant", + "description": "Add metadata to a checkout product", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "A customer's access token", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "metadata", + "description": "The list of metadata to add", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutMetadataInput", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The product to be modifed", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutAddProduct", + "description": "Add products to an existing checkout", + "args": [ + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "input", + "description": "Params to add products to an existing checkout", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutAddressAssociate", + "description": "Associate the address with a checkout.", + "args": [ + { + "name": "addressId", + "description": "The address ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutClone", + "description": "Clones a cart by the given checkout ID, returns the newly created checkout ID", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "copyUser", + "description": "Flag indicating whether to copy the existing Customer information to the new Checkout. Default is false", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": "false" + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutComplete", + "description": "Completes a checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "comments", + "description": "Order comments.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "paymentData", + "description": "Payment data.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutCustomerAssociate", + "description": "Associate the customer with a checkout.", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutDeleteSuggestedCard", + "description": "Delete a suggested card", + "args": [ + { + "name": "cardKey", + "description": "The card key", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "paymentMethodId", + "description": "The payment method ID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutGiftVariantSelection", + "description": "Selects the variant of a gift product", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The variant id to select.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutPartnerAssociate", + "description": "Associate the partner with a checkout.", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": "The partner access token.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutPartnerDisassociate", + "description": "Disassociates the checkout from the partner and returns a new checkout.", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutRemoveCoupon", + "description": "Remove coupon to checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutRemoveMetadata", + "description": "Removes metadata keys from a checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "A customer's access token", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "keys", + "description": "The list of metadata keys to remove", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutRemoveProduct", + "description": "Remove products from an existing checkout", + "args": [ + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "input", + "description": "Params to remove products from an existing checkout", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutRemoveProductCustomization", + "description": "Remove Customization to Checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "customizationId", + "description": "The product customization unique identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The ID of the variant to be removed.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutRemoveProductSubscription", + "description": "Remove Subscription to Checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The ID of the variant to be removed.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutReset", + "description": "Resets a specific area of a checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "types", + "description": "The reset types to apply", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "CheckoutResetType", + "ofType": null + } + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutSelectInstallment", + "description": "Select installment.", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "installmentNumber", + "description": "The number of installments.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "selectedPaymentMethodId", + "description": "The selected payment method ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutSelectPaymentMethod", + "description": "Select payment method.", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "paymentMethodId", + "description": "The payment method ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutSelectShippingQuote", + "description": "Select shipping quote", + "args": [ + { + "name": "additionalInformation", + "description": "The additional information for in-store pickup.", + "type": { + "kind": "INPUT_OBJECT", + "name": "InStorePickupAdditionalInformationInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "deliveryScheduleInput", + "description": "The delivery schedule.", + "type": { + "kind": "INPUT_OBJECT", + "name": "DeliveryScheduleInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "distributionCenterId", + "description": "The distribution center ID.", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "shippingQuoteId", + "description": "The shipping quote unique identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutUpdateProduct", + "description": "Update a product of an existing checkout", + "args": [ + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "input", + "description": "Params of the updated product of the existing checkout", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductUpdateInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "checkoutUseCheckingAccount", + "description": "Use balance checking account checkout", + "args": [ + { + "name": "checkoutId", + "description": "The checkout ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "useBalance", + "description": "Use checking account balance", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createCheckout", + "description": "Create a new checkout", + "args": [ + { + "name": "products", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductItemInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createNewsletterRegister", + "description": "Register an email in the newsletter.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "NewsletterInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "NewsletterNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createProductReview", + "description": "Adds a review to a product variant.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ReviewCreateInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Review", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createSearchTermRecord", + "description": "Record a searched term for admin reports", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "SearchRecordInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "SearchRecord", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerAccessTokenCreate", + "description": "Creates a new customer access token with an expiration time.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CustomerAccessTokenInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use the CustomerAuthenticatedLogin mutation." + }, + { + "name": "customerAccessTokenRenew", + "description": "Renews the expiration time of a customer access token. The token must not be expired.", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerAddressCreate", + "description": "Create an address.", + "args": [ + { + "name": "address", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateCustomerAddressInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerAddressRemove", + "description": "Delete an existing address, if it is not the only registered address", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "id", + "description": "The customer address unique identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerAddressUpdate", + "description": "Change an existing address", + "args": [ + { + "name": "address", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateCustomerAddressInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "id", + "description": "The customer address unique identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerAuthenticatedLogin", + "description": "Creates a new customer access token with an expiration time.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CustomerAuthenticateInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerCompletePartialRegistration", + "description": "Allows the user to complete the required information for a partial registration.", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "input", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CustomerSimpleCreateInputGraphInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerCreate", + "description": "Creates a new customer register.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CustomerCreateInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerEmailChange", + "description": "Changes user email.", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "input", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CustomerEmailChangeInput", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerImpersonate", + "description": "Impersonates a customer, generating an access token with expiration time.", + "args": [ + { + "name": "customerAccessToken", + "description": "The customer access token.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "input", + "description": "The e-mail input.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerPasswordChange", + "description": "Changes user password.", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "input", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CustomerPasswordChangeInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerPasswordChangeByRecovery", + "description": "Change user password by recovery.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CustomerPasswordChangeByRecoveryInput", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerPasswordRecovery", + "description": "Sends a password recovery email to the user.", + "args": [ + { + "name": "input", + "description": "The input used to login. Can be either an email or a CPF/CNPJ, if the option is enabled on store settings.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSimpleLoginStart", + "description": "Returns the user associated with a simple login (CPF or Email) if exists, else return a New user.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "SimpleLogin", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSimpleLoginVerifyAnwser", + "description": "Verify if the answer to a simple login question is correct, returns a new question if the answer is incorrect", + "args": [ + { + "name": "answerId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "input", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "questionId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "SimpleLogin", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSocialLoginFacebook", + "description": "Returns the user associated with a Facebook account if exists, else return a New user.", + "args": [ + { + "name": "facebookAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSocialLoginGoogle", + "description": "Returns the user associated with a Google account if exists, else return a New user.", + "args": [ + { + "name": "clientId", + "description": "[Deprecated: Google no longer sends this information in the authentication process] The client Id returned from the google credential object.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "userCredential", + "description": "The user credential after authorizing through the google popup window.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSubscriptionAddressChange", + "description": "Allows a customer to change the delivery address for an existing subscription.", + "args": [ + { + "name": "addressId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscriptionId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSubscriptionProductAdd", + "description": "Add products to an existing subscription", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "products", + "description": "Products to be added to an existing subscription.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "SubscriptionProductsInput", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "subscriptionId", + "description": "Subscription identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSubscriptionProductRemove", + "description": "Remove products to an existing subscription", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscriptionId", + "description": "Subscription identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscriptionProducts", + "description": "Products to be removed from an existing subscription.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "RemoveSubscriptionProductInput", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerSubscriptionUpdateStatus", + "description": "Allows a customer to change an existing subscription status.", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "status", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "Status", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscriptionId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerUpdate", + "description": "Updates a customer register.", + "args": [ + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CustomerUpdateInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "eventListAddProduct", + "description": "Adds products to the event list.", + "args": [ + { + "name": "eventListToken", + "description": "The event list token", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "products", + "description": "Products to be added", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "EventListAddProductInput", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partnerAccessTokenCreate", + "description": "Creates a new closed scope partner access token with an expiration time.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "PartnerAccessTokenInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "PartnerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productCounterOfferSubmit", + "description": "Submits a counteroffer for a product.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CounterOfferInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productFriendRecommend", + "description": "Mutation for recommend a product to a friend", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "FriendRecommendInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productPriceAlert", + "description": "Add a price alert.", + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AddPriceAlertInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ProductPriceAlert", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productRestockAlert", + "description": "Creates an alert to notify when the product is back in stock.", + "args": [ + { + "name": "input", + "description": "Params to create an alert for product back in stock.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "RestockAlertInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "partnerAccessToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "RestockAlertNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sendGenericForm", + "description": "Send a generic form.", + "args": [ + { + "name": "body", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Any", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "file", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Upload", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "OperationResult", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updateAddress", + "description": "Change an existing address", + "args": [ + { + "name": "address", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateCustomerAddressInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customerAccessToken", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "id", + "description": "The customer address unique identifier.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use the CustomerAddressUpdate mutation." + }, + { + "name": "wishlistAddProduct", + "description": "Adds a product to the customer's wishlist.", + "args": [ + { + "name": "customerAccessToken", + "description": "A customer's access token", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productId", + "description": "ID of the product to be added to the customer's wishlist", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "wishlistRemoveProduct", + "description": "Removes a product from the customer's wishlist.", + "args": [ + { + "name": "customerAccessToken", + "description": "A customer's access token", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productId", + "description": "ID of the product to be removed from the customer's wishlist", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INTERFACE", + "name": "Node", + "description": null, + "fields": [ + { + "name": "id", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": [ + { + "kind": "OBJECT", + "name": "Checkout", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Customer", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Hotsite", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "SingleHotsite", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Brand", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "ProductOption", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Category", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Customization", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "SingleProduct", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "BuyList", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "ProductVariant", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "MenuGroup", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Product", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Partner", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Banner", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Content", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Attribute", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "ProductAttribute", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Menu", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "ShippingQuote", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "paymentMethod", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "InformationGroupFieldNode", + "ofType": null + } + ] + }, + { + "kind": "OBJECT", + "name": "CheckoutShippingQuoteGroupNode", + "description": null, + "fields": [ + { + "name": "distributionCenter", + "description": "The distribution center.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "DistributionCenter", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "The products related to the shipping quote group.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ShippingQuoteGroupProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedShipping", + "description": "Selected Shipping.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ShippingNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SelectedPaymentMethod", + "description": "The selected payment method details.", + "fields": [ + { + "name": "html", + "description": "The payment html.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The unique identifier for the selected payment method.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installments", + "description": "The list of installments associated with the selected payment method.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SelectedPaymentMethodInstallment", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentMethodId", + "description": "The payment Method Id.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "scripts", + "description": "Payment related scripts.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedInstallment", + "description": "The selected installment.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "SelectedPaymentMethodInstallment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "suggestedCards", + "description": "The suggested cards.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SuggestedCard", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutAddress", + "description": "Represents an address node in the checkout.", + "fields": [ + { + "name": "addressNumber", + "description": "The street number of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cep", + "description": "The ZIP code of the address.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "city", + "description": "The city of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "complement", + "description": "The additional address information.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "neighborhood", + "description": "The neighborhood of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "referencePoint", + "description": "The reference point for the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "state", + "description": "The state of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "street", + "description": "The street name of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Metadata", + "description": "Some products can have metadata, like diferent types of custom information. A basic key value pair.", + "fields": [ + { + "name": "key", + "description": "Metadata key.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "Metadata value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "DateTime", + "description": "The `DateTime` scalar represents an ISO-8601 compliant date time type.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderDelivery", + "description": "The delivery or store pickup details.", + "fields": [ + { + "name": "address", + "description": "The delivery or store pickup address.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutOrderAddress", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cost", + "description": "The cost of delivery or pickup.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliveryTime", + "description": "The estimated delivery or pickup time, in days.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliveryTimeInHours", + "description": "The estimated delivery or pickup time, in hours.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the recipient.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderPayment", + "description": "The checkout order payment.", + "fields": [ + { + "name": "card", + "description": "The card payment information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutOrderCardPayment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "invoice", + "description": "The bank invoice payment information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutOrderInvoicePayment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the payment method.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pix", + "description": "The Pix payment information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutOrderPixPayment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "OrderStatus", + "description": "Represents the status of an order.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "PAID", + "description": "Order has been paid.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "AWAITING_PAYMENT", + "description": "Order is awaiting payment.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELLED_TEMPORARILY_DENIED_CARD", + "description": "Order has been cancelled - Card Temporarily Denied.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELLED_DENIED_CARD", + "description": "Order has been cancelled - Card Denied.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELLED_FRAUD", + "description": "Order has been cancelled - Fraud.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELLED_SUSPECT_FRAUD", + "description": "Order has been cancelled - Suspected Fraud.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELLED_ORDER_CANCELLED", + "description": "Order has been cancelled.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELLED", + "description": "Order has been cancelled.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SENT", + "description": "Order has been sent.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "AUTHORIZED", + "description": "Order has been authorized.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SENT_INVOICED", + "description": "Order has been sent - Invoiced.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RETURNED", + "description": "Order has been returned.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DOCUMENTS_FOR_PURCHASE", + "description": "Documents needed for purchase.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "APPROVED_ANALYSIS", + "description": "Order has been approved in analysis.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RECEIVED_GIFT_CARD", + "description": "Order has been received - Gift Card.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SEPARATED", + "description": "Order has been separated.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ORDERED", + "description": "Order has been placed.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DELIVERED", + "description": "Order has been delivered.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "AWAITING_PAYMENT_CHANGE", + "description": "Order is awaiting change of payment method.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CHECKED_ORDER", + "description": "Order has been checked.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PICK_UP_IN_STORE", + "description": "Available for pick-up in store.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DENIED_PAYMENT", + "description": "Payment denied, but the order has not been cancelled.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CREDITED", + "description": "Order has been credited.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderProduct", + "description": "Represents a node in the checkout order products.", + "fields": [ + { + "name": "adjustments", + "description": "The list of adjustments applied to the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutOrderProductAdjustment", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "attributes", + "description": "The list of attributes of the product.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutOrderProductAttribute", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "The image URL of the product.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the product.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "The ID of the product variant.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "The quantity of the product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "unitValue", + "description": "The unit value of the product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderAdjustment", + "description": "Represents an adjustment applied to checkout.", + "fields": [ + { + "name": "name", + "description": "The name of the adjustment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type of the adjustment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the adjustment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DeliveryScheduleDetail", + "description": "The delivery schedule detail.", + "fields": [ + { + "name": "date", + "description": "The date of the delivery schedule.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endDateTime", + "description": "The end date and time of the delivery schedule.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endTime", + "description": "The end time of the delivery schedule.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startDateTime", + "description": "The start date and time of the delivery schedule.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startTime", + "description": "The start time of the delivery schedule.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Float", + "description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point).", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DistributionCenter", + "description": "A distribution center.", + "fields": [ + { + "name": "id", + "description": "The distribution center unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sellerName", + "description": "The distribution center seller name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ShippingQuoteGroupProduct", + "description": "The product informations related to the shipping.", + "fields": [ + { + "name": "productVariantId", + "description": "The product unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "GroupShippingQuote", + "description": "The shipping quotes for group.", + "fields": [ + { + "name": "deadline", + "description": "The shipping deadline.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineInHours", + "description": "The shipping deadline, in hours.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The shipping name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingQuoteId", + "description": "The shipping quote unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The shipping type.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The shipping value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerAddressNode", + "description": null, + "fields": [ + { + "name": "address", + "description": "Address street.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "address2", + "description": "Address street 2.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "addressDetails", + "description": "Address details.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "addressNumber", + "description": "Address number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cep", + "description": "zip code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "city", + "description": "address city.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "country", + "description": "Country.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "email", + "description": "The email of the customer address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the customer address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "neighborhood", + "description": "Address neighborhood.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "phone", + "description": "The phone of the customer address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "referencePoint", + "description": "Address reference point.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "state", + "description": "State.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "street", + "description": "Address street.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use the 'address' field to get the address." + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Partner", + "description": "Partners are used to assign specific products or price tables depending on its scope.", + "fields": [ + { + "name": "alias", + "description": "The partner alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endDate", + "description": "The partner is valid until this date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fullUrlLogo", + "description": "The full partner logo URL.", + "args": [ + { + "name": "height", + "description": "The height of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "logoUrl", + "description": "The partner logo's URL.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The partner's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "origin", + "description": "The partner's origin.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partnerAccessToken", + "description": "The partner's access token.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partnerId", + "description": "Partner unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "portfolioId", + "description": "Portfolio identifier assigned to this partner.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "priceTableId", + "description": "Price table identifier assigned to this partner.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startDate", + "description": "The partner is valid from this date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type of scoped the partner is used.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "wishlist", + "description": null, + "fields": [ + { + "name": "products", + "description": "Wishlist products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerInformationGroupNode", + "description": null, + "fields": [ + { + "name": "exibitionName", + "description": "The group exibition name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fields", + "description": "The group fields.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CustomerInformationGroupFieldNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The group name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerCheckingAccountHistoryNode", + "description": null, + "fields": [ + { + "name": "date", + "description": "Customer's checking account history date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "historic", + "description": "Description of the customer's checking account history.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "Type of customer's checking account history.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "TypeCheckingAccount", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "Value of customer's checking account history.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "order", + "description": null, + "fields": [ + { + "name": "checkingAccount", + "description": "Checking account value used for the order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "coupon", + "description": "The coupon for discounts.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "date", + "description": "The date when te order was placed.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliveryAddress", + "description": "The address where the order will be delivered.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "OrderDeliveryAddressNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discount", + "description": "Order discount amount, if any.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "interestFee", + "description": "Order interest fee, if any.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "invoices", + "description": "Information about order invoices.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderInvoiceNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notes", + "description": "Information about order notes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderNoteNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "orderId", + "description": "Order unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentDate", + "description": "The date when the order was payed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "payments", + "description": "Information about payments.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderPaymentNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "Products belonging to the order.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderProductNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "promotions", + "description": "List of promotions applied to the order.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingFee", + "description": "The shipping fee.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippings", + "description": "Information about order shippings.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderShippingNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "status", + "description": "The order current status.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "OrderStatusNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "statusHistory", + "description": "List of the order status history.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderStatusNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptions", + "description": "List of order subscriptions.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderSubscriptionNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subtotal", + "description": "Order subtotal value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "total", + "description": "Order total value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "trackings", + "description": "Information about order trackings.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderTrackingNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerOrdersStatistics", + "description": null, + "fields": [ + { + "name": "productsQuantity", + "description": "The number of products the customer made from the number of orders.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "The number of orders the customer made.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerSubscriptionPayment", + "description": null, + "fields": [ + { + "name": "card", + "description": "The details of the payment card associated with the subscription.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerSubscriptionPaymentCard", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type of payment for the subscription.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerSubscriptionRecurring", + "description": null, + "fields": [ + { + "name": "days", + "description": "The number of days between recurring payments.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "The description of the recurring subscription.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the recurring subscription.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "recurringId", + "description": "The recurring subscription id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "removed", + "description": "Indicates whether the recurring subscription is removed.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerSubscriptionProduct", + "description": null, + "fields": [ + { + "name": "productVariantId", + "description": "The id of the product variant associated with the subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "The quantity of the product variant in the subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "removed", + "description": "Indicates whether the product variant is removed from the subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionProductId", + "description": "The id of the subscription product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The monetary value of the product variant in the subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "HotsiteSorting", + "description": null, + "fields": [ + { + "name": "direction", + "description": null, + "args": [], + "type": { + "kind": "ENUM", + "name": "SortDirection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "field", + "description": null, + "args": [], + "type": { + "kind": "ENUM", + "name": "ProductSortKeys", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "HotsiteSubtype", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "CATEGORY", + "description": "Hotsite created from a category.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BRAND", + "description": "Hotsite created from a brand.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PORTFOLIO", + "description": "Hotsite created from a portfolio.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BUY_LIST", + "description": "Hotsite created from a buy list (lista de compra).", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Banner", + "description": "A banner is usually an image used to show sales, highlight products, announcements or to redirect to another page or hotsite on click.", + "fields": [ + { + "name": "altText", + "description": "Banner's alternative text.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "bannerId", + "description": "Banner unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "bannerName", + "description": "Banner's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "bannerUrl", + "description": "URL where the banner is stored.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "creationDate", + "description": "The date the banner was created.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnAllPages", + "description": "Field to check if the banner should be displayed on all pages.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnCategories", + "description": "Field to check if the banner should be displayed on category pages.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnSearches", + "description": "Field to check if the banner should be displayed on search pages.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayOnWebsite", + "description": "Field to check if the banner should be displayed on the website.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayToPartners", + "description": "Field to check if the banner should be displayed to partners.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": "The banner's height in px.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "openNewTab", + "description": "Field to check if the banner URL should open in another tab on click.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "The displaying order of the banner.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "position", + "description": "The displaying position of the banner.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "searchTerms", + "description": "A list of terms to display the banner on search.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "The banner's title.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlOnClick", + "description": "URL to be redirected on click.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": "The banner's width in px.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Content", + "description": "Contents are used to show things to the user.", + "fields": [ + { + "name": "content", + "description": "The content in html to be displayed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "contentId", + "description": "Content unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "creationDate", + "description": "The date the content was created.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": "The content's height in px.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "position", + "description": "The content's position.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "searchTerms", + "description": "A list of terms to display the content on search.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "The content's title.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": "The content's width in px.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SEO", + "description": "Entity SEO information.", + "fields": [ + { + "name": "content", + "description": "Content of SEO.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "httpEquiv", + "description": "Equivalent SEO type for HTTP.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Name of SEO.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "scheme", + "description": "Scheme for SEO.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "Type of SEO.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Breadcrumb", + "description": "Informations about breadcrumb.", + "fields": [ + { + "name": "link", + "description": "Breadcrumb link.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "text", + "description": "Breadcrumb text.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductAggregations", + "description": null, + "fields": [ + { + "name": "filters", + "description": "List of product filters which can be used to filter subsequent queries.", + "args": [ + { + "name": "position", + "description": "The filter position.", + "type": { + "kind": "ENUM", + "name": "FilterPosition", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SearchFilter", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maximumPrice", + "description": "Minimum price of the products.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "minimumPrice", + "description": "Maximum price of the products.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "priceRanges", + "description": "List of price ranges for the selected products.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PriceRange", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "forbiddenTerm", + "description": "Informations about a forbidden search term.", + "fields": [ + { + "name": "suggested", + "description": "The suggested search term instead.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "text", + "description": "The text to display about the term.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Attribute", + "description": "Attributes available for the variant products from the given productId.", + "fields": [ + { + "name": "attributeId", + "description": "The id of the attribute.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayType", + "description": "The display type of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": "The values of the attribute.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "AttributeValue", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Review", + "description": "A product review written by a customer.", + "fields": [ + { + "name": "customer", + "description": "The reviewer name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "email", + "description": "The reviewer e-mail.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating", + "description": "The review rating.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "review", + "description": "The review content.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "reviewDate", + "description": "The review date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BuyTogetherGroup", + "description": "BuyTogetherGroups informations.", + "fields": [ + { + "name": "name", + "description": "BuyTogether name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "BuyTogether products", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SingleProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "BuyTogether type", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "BuyTogetherType", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeSelection", + "description": "Attributes available for the variant products from the given productId.", + "fields": [ + { + "name": "canBeMatrix", + "description": "Check if the current product attributes can be rendered as a matrix.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "candidateVariant", + "description": "The candidate variant given the current input filters. Variant may be from brother product Id.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductVariant", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "matrix", + "description": "Informations about the attribute matrix.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "AttributeMatrix", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectedVariant", + "description": "The selected variant given the current input filters. Variant may be from brother product Id.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "ProductVariant", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selections", + "description": "Attributes available for the variant products from the given productId.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "AttributeSelectionOption", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DeadlineAlert", + "description": "Deadline alert informations.", + "fields": [ + { + "name": "deadline", + "description": "Deadline alert time", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "Deadline alert description", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "secondDeadline", + "description": "Second deadline alert time", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "secondDescription", + "description": "Second deadline alert description", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "secondTitle", + "description": "Second deadline alert title", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "Deadline alert title", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Image", + "description": "Informations about an image of a product.", + "fields": [ + { + "name": "fileName", + "description": "The name of the image file.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mini", + "description": "Check if the image is used for the product main image.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "Numeric order the image should be displayed.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "print", + "description": "Check if the image is used for the product prints only.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The url to retrieve the image", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Promotion", + "description": "Information about promotions of a product.", + "fields": [ + { + "name": "content", + "description": "The promotion html content.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "disclosureType", + "description": "Where the promotion is shown (spot, product page, etc..).", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endDate", + "description": "The end date for the promotion.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fullStampUrl", + "description": "The stamp URL of the promotion.", + "args": [ + { + "name": "height", + "description": "The height of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The promotion id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stamp", + "description": "The stamp of the promotion.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "The promotion title.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductBrand", + "description": null, + "fields": [ + { + "name": "alias", + "description": "The hotsite url alias fot this brand.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fullUrlLogo", + "description": "The full brand logo URL.", + "args": [ + { + "name": "height", + "description": "The height of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The brand id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "logoUrl", + "description": "The url that contains the brand logo image.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the brand.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Prices", + "description": "The prices of the product.", + "fields": [ + { + "name": "bestInstallment", + "description": "The best installment option available.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "BestInstallment", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discountPercentage", + "description": "The amount of discount in percentage.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discounted", + "description": "Wether the current price is discounted.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installmentPlans", + "description": "List of the possibles installment plans.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "InstallmentPlan", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "listPrice", + "description": "The listed regular price of the product.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "multiplicationFactor", + "description": "The multiplication factor used for items that are sold by quantity.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The current working price.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "priceTables", + "description": "List of the product different price tables. \n\n Only returned when using the partnerAccessToken or public price tables.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PriceTable", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "wholesalePrices", + "description": "Lists the different price options when buying the item over the given quantity.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "WholesalePrices", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductSubscription", + "description": null, + "fields": [ + { + "name": "discount", + "description": "The amount of discount if this product is sold as a subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The price of the product when sold as a subscription.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionOnly", + "description": "Wether this product is sold only as a subscrition.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductAttribute", + "description": "The attributes of the product.", + "fields": [ + { + "name": "attributeId", + "description": "The id of the attribute.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayType", + "description": "The display type of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Stock", + "description": "Information about a product stock in a particular distribution center.", + "fields": [ + { + "name": "id", + "description": "The id of the distribution center.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "items", + "description": "The number of physical items in stock at this DC.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the distribution center.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductCategory", + "description": "Information about the category of a product.", + "fields": [ + { + "name": "active", + "description": "Wether the category is currently active.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "googleCategories", + "description": "The categories in google format.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "hierarchy", + "description": "The category hierarchy.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The id of the category.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "main", + "description": "Wether this category is the main category for this product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The category name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The category hotsite url alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Information", + "description": "Information registred to the product.", + "fields": [ + { + "name": "id", + "description": "The information id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "The information title.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The information type.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The information value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SubscriptionGroup", + "description": null, + "fields": [ + { + "name": "recurringTypes", + "description": "The recurring types for this subscription group.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SubscriptionRecurringType", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "status", + "description": "The status name of the group.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "statusId", + "description": "The status id of the group.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroupId", + "description": "The subscription group id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionOnly", + "description": "Wether the product is only avaible for subscription.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SimilarProduct", + "description": "Information about a similar product.", + "fields": [ + { + "name": "alias", + "description": "The url alias of this similar product.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "image", + "description": "The file name of the similar product image.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "The URL of the similar product image.", + "args": [ + { + "name": "h", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "w", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the similar product.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BuyBox", + "description": "BuyBox informations.", + "fields": [ + { + "name": "installmentPlans", + "description": "List of the possibles installment plans.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "InstallmentPlan", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maximumPrice", + "description": "Maximum price among sellers.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "minimumPrice", + "description": "Minimum price among sellers.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantityOffers", + "description": "Quantity of offers.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sellers", + "description": "List of sellers.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Seller", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Seller", + "description": "Seller informations.", + "fields": [ + { + "name": "name", + "description": "Seller name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BuyListProduct", + "description": "Contains the id and quantity of a product in the buy list.", + "fields": [ + { + "name": "productId", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SellerOffer", + "description": "The seller's product offer", + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "prices", + "description": "The product prices.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "SellerPrices", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PhysicalStore", + "description": "Informations about the physical store.", + "fields": [ + { + "name": "additionalText", + "description": "Additional text.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "address", + "description": "Physical store address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "addressDetails", + "description": "Physical store address details.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "addressNumber", + "description": "Physical store address number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "city", + "description": "Physical store address city.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "country", + "description": "Physical store country.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ddd", + "description": "Physical store DDD.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliveryDeadline", + "description": "Delivery deadline.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "email", + "description": "Physical store email.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "latitude", + "description": "Physical store latitude.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "longitude", + "description": "Physical store longitude.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Physical store name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "neighborhood", + "description": "Physical store address neighborhood.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "phoneNumber", + "description": "Physical store phone number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "physicalStoreId", + "description": "Physical store ID.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pickup", + "description": "If the physical store allows pickup.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pickupDeadline", + "description": "Pickup deadline.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "state", + "description": "Physical store state.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "zipCode", + "description": "Physical store zip code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Menu", + "description": "Informations about menu items.", + "fields": [ + { + "name": "cssClass", + "description": "Menu css class to apply.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fullImageUrl", + "description": "The full image URL.", + "args": [ + { + "name": "height", + "description": "The height of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "Menu image url address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "level", + "description": "Menu hierarchy level.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "link", + "description": "Menu link address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "menuGroupId", + "description": "Menu group identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "menuId", + "description": "Menu identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Menu name.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "openNewTab", + "description": "Menu hierarchy level.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "Menu position order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "parentMenuId", + "description": "Parent menu identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "text", + "description": "Menu extra text.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderAdjustNode", + "description": null, + "fields": [ + { + "name": "name", + "description": "The adjust name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "note", + "description": "Note about the adjust.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "Type of adjust.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "Amount to be adjusted.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderAttributeNode", + "description": null, + "fields": [ + { + "name": "name", + "description": "The attribute name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The attribute value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderPackagingNode", + "description": null, + "fields": [ + { + "name": "cost", + "description": "The packaging cost.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "The packaging description.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "message", + "description": "The message added to the packaging.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The packaging name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderCustomizationNode", + "description": null, + "fields": [ + { + "name": "cost", + "description": "The customization cost.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The customization name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The customization value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderTrackingNode", + "description": null, + "fields": [ + { + "name": "code", + "description": "The tracking code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The URL for tracking.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderSellerNode", + "description": null, + "fields": [ + { + "name": "name", + "description": "The seller's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutShippingDeadlineNode", + "description": null, + "fields": [ + { + "name": "deadline", + "description": "The shipping deadline", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "The shipping description", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "secondDescription", + "description": "The shipping second description", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "secondTitle", + "description": "The shipping second title", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "The shipping title", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductAttributeNode", + "description": null, + "fields": [ + { + "name": "name", + "description": "The attribute name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The attribute type", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The attribute value", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductSubscription", + "description": "Information for the subscription of a product in checkout.", + "fields": [ + { + "name": "availableSubscriptions", + "description": "The available subscriptions.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutProductSubscriptionItemNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selected", + "description": "The selected subscription.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CheckoutProductSubscriptionItemNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductAdjustmentNode", + "description": null, + "fields": [ + { + "name": "observation", + "description": "The observation referent adjustment in Product", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type that was applied in product adjustment", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value that was applied to the product adjustment", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductSellerNode", + "description": null, + "fields": [ + { + "name": "distributionCenterId", + "description": "The distribution center ID.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sellerName", + "description": "The seller name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductCustomizationNode", + "description": null, + "fields": [ + { + "name": "availableCustomizations", + "description": "The available product customizations.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Customization", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The product customization unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": "The product customization values.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CheckoutProductCustomizationValueNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "CEP", + "description": "Represents a CEP", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BannersConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BannersEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Banner", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BrandsConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BrandsEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Brand", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "totalCount", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CategoriesConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CategoriesEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Category", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ContentsConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ContentsEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Content", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "HotsitesConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "HotsitesEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Hotsite", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PartnersConnection", + "description": "A connection to a list of items.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PartnersEdge", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A flattened list of the nodes.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Partner", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BannersEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Banner", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BrandsEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Brand", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CategoriesEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Category", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ContentsEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Content", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "HotsitesEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Hotsite", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PartnersEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Partner", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderProductAdjustment", + "description": "Represents an adjustment applied to a product in the checkout order.", + "fields": [ + { + "name": "additionalInformation", + "description": "Additional information about the adjustment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the adjustment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The type of the adjustment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the adjustment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderProductAttribute", + "description": "Represents an attribute of a product.", + "fields": [ + { + "name": "name", + "description": "The name of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderCardPayment", + "description": "This represents a Card payment node in the checkout order.", + "fields": [ + { + "name": "brand", + "description": "The brand card.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cardInterest", + "description": "The interest generated by the card.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installments", + "description": "The installments generated for the card.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The cardholder name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "The final four numbers on the card.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderPixPayment", + "description": "This represents a Pix payment node in the checkout order.", + "fields": [ + { + "name": "qrCode", + "description": "The QR code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "qrCodeExpirationDate", + "description": "The expiration date of the QR code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "qrCodeUrl", + "description": "The image URL of the QR code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderInvoicePayment", + "description": "The invoice payment information.", + "fields": [ + { + "name": "digitableLine", + "description": "The digitable line.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentLink", + "description": "The payment link.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutOrderAddress", + "description": "The delivery or store Pickup Address.", + "fields": [ + { + "name": "address", + "description": "The street address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cep", + "description": "The ZIP code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "city", + "description": "The city.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "complement", + "description": "Additional information or details about the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isPickupStore", + "description": "Indicates whether the order is for store pickup.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "neighborhood", + "description": "The neighborhood.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pickupStoreText", + "description": ".", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SuggestedCard", + "description": null, + "fields": [ + { + "name": "brand", + "description": "Credit card brand.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "key", + "description": "Credit card key.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Customer name on credit card.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "Credit card number.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SelectedPaymentMethodInstallment", + "description": "Details of an installment of the selected payment method.", + "fields": [ + { + "name": "adjustment", + "description": "The adjustment value applied to the installment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "The installment number.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "total", + "description": "The total value of the installment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The individual value of each installment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "RemoveSubscriptionProductInput", + "description": "Represents the product to be removed from the subscription.", + "fields": null, + "inputFields": [ + { + "name": "subscriptionProductId", + "description": "The Id of the product within the subscription to be removed.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "SubscriptionProductsInput", + "description": "Represents the product to be applied to the subscription.", + "fields": null, + "inputFields": [ + { + "name": "productVariantId", + "description": "The variant Id of the product.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": "The quantity of the product.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "Status", + "description": "The subscription status to update.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ACTIVE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PAUSED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "SearchRecordInput", + "description": "The information to be saved for reports.", + "fields": null, + "inputFields": [ + { + "name": "operation", + "description": "The search operation (And, Or)", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "page", + "description": "The current page", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "pageSize", + "description": "How many products show in page", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "pageUrl", + "description": "The client search page url", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "query", + "description": "The user search query", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "totalResults", + "description": "How many products the search returned", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SearchRecord", + "description": "The response data", + "fields": [ + { + "name": "date", + "description": "The date time of the processed request", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isSuccess", + "description": "If the record was successful", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "query", + "description": "The searched query", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CounterOfferInput", + "description": "Input data for submitting a counter offer for a product.", + "fields": null, + "inputFields": [ + { + "name": "additionalInfo", + "description": "Any additional information or comments provided by the user regarding the counter offer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "email", + "description": "The email address of the user submitting the counter offer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "price", + "description": "The proposed price by the user for the product.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The unique identifier of the product variant for which the counter offer is made.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "url", + "description": "URL linking to the page or the location where the product is listed.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "FriendRecommendInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "buyListId", + "description": "The buy list id", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "fromEmail", + "description": "Email of who is recommending a product", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "fromName", + "description": "Who is recommending", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "message", + "description": "The message", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productId", + "description": "The Product Id", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "toEmail", + "description": "Email of the person who will receive a product recommendation", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "toName", + "description": "Name of the person who will receive a product recommendation", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "RestockAlertInput", + "description": "Back in stock registration input parameters.", + "fields": null, + "inputFields": [ + { + "name": "email", + "description": "Email to be notified.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "name", + "description": "Name of the person to be notified.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The product variant id of the product to be notified.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "RestockAlertNode", + "description": null, + "fields": [ + { + "name": "email", + "description": "Email to be notified.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "Name of the person to be notified.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "The product variant id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "requestDate", + "description": "Date the alert was requested.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "AddPriceAlertInput", + "description": "Price alert input parameters.", + "fields": null, + "inputFields": [ + { + "name": "email", + "description": "The alerted's email.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "name", + "description": "The alerted's name.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The product variant id to create the price alert.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "targetPrice", + "description": "The target price to alert.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProductPriceAlert", + "description": "A product price alert.", + "fields": [ + { + "name": "email", + "description": "The alerted's email.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The alerted's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "priceAlertId", + "description": "The price alert ID.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "The product variant ID.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "requestDate", + "description": "The request date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "targetPrice", + "description": "The target price.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "ReviewCreateInput", + "description": "Review input parameters.", + "fields": null, + "inputFields": [ + { + "name": "email", + "description": "The reviewer's email.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "name", + "description": "The reviewer's name.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The product variant id to add the review to.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "rating", + "description": "The review rating.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": "The google recaptcha token.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "review", + "description": "The review content.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "NewsletterInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "email", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "informationGroupValues", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "InformationGroupValueInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "name", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "recaptchaToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "NewsletterNode", + "description": null, + "fields": [ + { + "name": "createDate", + "description": "Newsletter creation date.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "email", + "description": "The newsletter receiver email.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The newsletter receiver name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updateDate", + "description": "Newsletter update date.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerSimpleCreateInputGraphInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "birthDate", + "description": "The date of birth of the customer.", + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cnpj", + "description": "The Brazilian tax identification number for corporations.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "corporateName", + "description": "The legal name of the corporate customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cpf", + "description": "The Brazilian tax identification number for individuals.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "customerType", + "description": "Indicates if it is a natural person or company profile.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "EntityType", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "email", + "description": "The email of the customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "fullName", + "description": "The full name of the customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "isStateRegistrationExempt", + "description": "Indicates if the customer is state registration exempt.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "primaryPhoneAreaCode", + "description": "The area code for the customer's primary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "primaryPhoneNumber", + "description": "The customer's primary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "stateRegistration", + "description": "The state registration number for businesses.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SimpleLogin", + "description": null, + "fields": [ + { + "name": "customerAccessToken", + "description": "The customer access token", + "args": [], + "type": { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "question", + "description": "The simple login question to answer", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Question", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The simple login type", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SimpleLoginType", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerEmailChangeInput", + "description": "The input to change the user email.", + "fields": null, + "inputFields": [ + { + "name": "newEmail", + "description": "The new email.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerPasswordChangeInput", + "description": "The input to change the user password.", + "fields": null, + "inputFields": [ + { + "name": "currentPassword", + "description": "The current password.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "newPassword", + "description": "The new password.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "newPasswordConfirmation", + "description": "New password confirmation.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerPasswordChangeByRecoveryInput", + "description": "The input to change the user password by recovery.", + "fields": null, + "inputFields": [ + { + "name": "key", + "description": "Key generated for password recovery.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "newPassword", + "description": "The new password.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "newPasswordConfirmation", + "description": "New password confirmation.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerUpdateInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "birthDate", + "description": "The date of birth of the customer.", + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "corporateName", + "description": "The legal name of the corporate customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "fullName", + "description": "The full name of the customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "gender", + "description": "The gender of the customer.", + "type": { + "kind": "ENUM", + "name": "Gender", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "informationGroupValues", + "description": "The customer information group values.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "InformationGroupValueInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "primaryPhoneNumber", + "description": "The customer's primary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "primaryPhoneNumberInternational", + "description": "The customer's primary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "rg", + "description": "The Brazilian register identification number for individuals.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "secondaryPhoneNumber", + "description": "The customer's secondary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "secondaryPhoneNumberInternational", + "description": "The customer's secondary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "stateRegistration", + "description": "The state registration number for businesses.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerCreateInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "address", + "description": "The street address for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "address2", + "description": "The street address for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addressComplement", + "description": "Any additional information related to the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addressNumber", + "description": "The building number for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "birthDate", + "description": "The date of birth of the customer.", + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cep", + "description": "The CEP for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "city", + "description": "The city for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cnpj", + "description": "The Brazilian tax identification number for corporations.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "corporateName", + "description": "The legal name of the corporate customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "country", + "description": "The country for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cpf", + "description": "The Brazilian tax identification number for individuals.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "customerType", + "description": "Indicates if it is a natural person or company profile.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "EntityType", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "email", + "description": "The email of the customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "fullName", + "description": "The full name of the customer.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "gender", + "description": "The gender of the customer.", + "type": { + "kind": "ENUM", + "name": "Gender", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "informationGroupValues", + "description": "The customer information group values.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "InformationGroupValueInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "isStateRegistrationExempt", + "description": "Indicates if the customer is state registration exempt.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "neighborhood", + "description": "The neighborhood for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "newsletter", + "description": "Indicates if the customer has subscribed to the newsletter.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "password", + "description": "The password for the customer's account.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "passwordConfirmation", + "description": "The password confirmation for the customer's account.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "primaryPhoneAreaCode", + "description": "The area code for the customer's primary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "primaryPhoneNumber", + "description": "The customer's primary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "receiverName", + "description": "The name of the receiver for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "reference", + "description": "A reference point or description to help locate the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "reseller", + "description": "Indicates if the customer is a reseller.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "secondaryPhoneAreaCode", + "description": "The area code for the customer's secondary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "secondaryPhoneNumber", + "description": "The customer's secondary phone number.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "state", + "description": "The state for the registered address.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "stateRegistration", + "description": "The state registration number for businesses.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "PartnerAccessTokenInput", + "description": "The input to authenticate closed scope partners.", + "fields": null, + "inputFields": [ + { + "name": "password", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "username", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PartnerAccessToken", + "description": null, + "fields": [ + { + "name": "token", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "validUntil", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerAuthenticateInput", + "description": "The input to authenticate a user.", + "fields": null, + "inputFields": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "password", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CustomerAccessTokenInput", + "description": "The input to authenticate a user.", + "fields": null, + "inputFields": [ + { + "name": "email", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "password", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerAccessToken", + "description": null, + "fields": [ + { + "name": "isMaster", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "legacyToken", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "token", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The user login type", + "args": [], + "type": { + "kind": "ENUM", + "name": "LoginType", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "validUntil", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "EventListAddProductInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "productVariantId", + "description": "The unique identifier of the product variant.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": "The quantity of the product to be added.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CreateCustomerAddressInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "address", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "address2", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addressDetails", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addressNumber", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cep", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "CEP", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "city", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "country", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "CountryCode", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "email", + "description": null, + "type": { + "kind": "SCALAR", + "name": "EmailAddress", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "name", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "neighborhood", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "phone", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "referencePoint", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "state", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "street", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "UpdateCustomerAddressInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "address", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "address2", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addressDetails", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addressNumber", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "cep", + "description": null, + "type": { + "kind": "SCALAR", + "name": "CEP", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "city", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "country", + "description": null, + "type": { + "kind": "SCALAR", + "name": "CountryCode", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "email", + "description": null, + "type": { + "kind": "SCALAR", + "name": "EmailAddress", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "name", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "neighborhood", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "phone", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "referencePoint", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "state", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "street", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "CheckoutResetType", + "description": "The checkout areas available to reset", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "PAYMENT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OperationResult", + "description": "Result of the operation.", + "fields": [ + { + "name": "isSuccess", + "description": "If the operation is a success.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutMetadataInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "key", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "value", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerInformationGroupFieldNode", + "description": null, + "fields": [ + { + "name": "name", + "description": "The field name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "The field order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "required", + "description": "If the field is required.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The field value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "InStorePickupAdditionalInformationInput", + "description": "The additional information about in-store pickup", + "fields": null, + "inputFields": [ + { + "name": "document", + "description": "The document", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "name", + "description": "The name", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DeliveryScheduleInput", + "description": "Input for delivery scheduling.", + "fields": null, + "inputFields": [ + { + "name": "date", + "description": "The date.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "periodId", + "description": "The period ID.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductUpdateInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "id", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "product", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductItemUpdateInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "id", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "products", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductItemInput", + "ofType": null + } + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductItemInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "customization", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutCustomizationInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customizationId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "metadata", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutMetadataInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscription", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CheckoutSubscriptionInput", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Uri", + "description": "Node of URI Kind.", + "fields": [ + { + "name": "hotsiteSubtype", + "description": "The origin of the hotsite.", + "args": [], + "type": { + "kind": "ENUM", + "name": "HotsiteSubtype", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "kind", + "description": "Path kind.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "UriKind", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "partnerSubtype", + "description": "The partner subtype.", + "args": [], + "type": { + "kind": "ENUM", + "name": "PartnerSubtype", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productAlias", + "description": "Product alias.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productCategoriesIds", + "description": "Product categories IDs.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "redirectCode", + "description": "Redirect status code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "redirectUrl", + "description": "Url to redirect.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ShopSetting", + "description": "Store setting.", + "fields": [ + { + "name": "name", + "description": "Setting name", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "Setting value", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "productsInput", + "description": "The list of products to quote shipping.", + "fields": null, + "inputFields": [ + { + "name": "productVariantId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ShippingQuote", + "description": "A shipping quote.", + "fields": [ + { + "name": "deadline", + "description": "The shipping deadline.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineInHours", + "description": "The shipping deadline in hours.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deliverySchedules", + "description": "The available time slots for scheduling the delivery of the shipping quote.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "deliverySchedule", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The shipping name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "The products related to the shipping.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ShippingProduct", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingQuoteId", + "description": "The shipping quote unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The shipping type.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The shipping value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "Operation", + "description": "Types of operations to perform between query terms.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "AND", + "description": "Performs AND operation between query terms.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "OR", + "description": "Performs OR operation between query terms.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ScriptPageType", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ALL", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "HOME", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SEARCH", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CATEGORY", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BRAND", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PRODUCT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ScriptPosition", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "HEADER_START", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "HEADER_END", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BODY_START", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BODY_END", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FOOTER_START", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FOOTER_END", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Script", + "description": "Returns the scripts registered in the script manager.", + "fields": [ + { + "name": "content", + "description": "The script content.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The script name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageType", + "description": "The script page type.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ScriptPageType", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "position", + "description": "The script position.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ScriptPosition", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "priority", + "description": "The script priority.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CalculatePricesProductsInput", + "description": "The products to calculate prices.", + "fields": null, + "inputFields": [ + { + "name": "productVariantId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "quantity", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ProductRecommendationAlgorithm", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "DEFAULT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "ProductExplicitFiltersInput", + "description": "Filter product results based on giving attributes.", + "fields": null, + "inputFields": [ + { + "name": "attributes", + "description": "The set of attributes do filter.", + "type": { + "kind": "INPUT_OBJECT", + "name": "AttributeInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "available", + "description": "Choose if you want to retrieve only the available products in stock.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "brandId", + "description": "The set of brand IDs which the result item brand ID must be included in.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "categoryId", + "description": "The set of category IDs which the result item category ID must be included in.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "ean", + "description": "The set of EANs which the result item EAN must be included.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "externalParentId", + "description": "An external parent ID or a list of IDs to search for products with the external parent ID.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "hasImages", + "description": "Retrieve the product variant only if it contains images.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "ignoreDisplayRules", + "description": "Ignores the display rules when searching for products.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "mainVariant", + "description": "Retrieve the product variant only if it is the main product variant.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "parentId", + "description": "A parent ID or a list of IDs to search for products with the parent ID.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "prices", + "description": "The set of prices to filter.", + "type": { + "kind": "INPUT_OBJECT", + "name": "PricesInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productId", + "description": "The product unique identifier (you may provide a list of IDs if needed).", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": "The product variant unique identifier (you may provide a list of IDs if needed).", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "sameParentAs", + "description": "A product ID or a list of IDs to search for other products with the same parent ID.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "sku", + "description": "The set of SKUs which the result item SKU must be included.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "stock_gte", + "description": "Show products with a quantity of available products in stock greater than or equal to the given number.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "stock_lte", + "description": "Show products with a quantity of available products in stock less than or equal to the given number.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "stocks", + "description": "The set of stocks to filter.", + "type": { + "kind": "INPUT_OBJECT", + "name": "StocksInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "updatedAt_gte", + "description": "Retrieve products which the last update date is greater than or equal to the given date.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "updatedAt_lte", + "description": "Retrieve products which the last update date is less than or equal to the given date.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "paymentMethod", + "description": null, + "fields": [ + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "imageUrl", + "description": "The url link that displays for the payment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the payment method.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "PartnerByRegionInput", + "description": "Input for partners.", + "fields": null, + "inputFields": [ + { + "name": "cep", + "description": "CEP to get the regional partners.", + "type": { + "kind": "SCALAR", + "name": "CEP", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "regionId", + "description": "Region ID to get the regional partners.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "PartnerSortKeys", + "description": "Define the partner attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The partner unique identifier.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NAME", + "description": "The partner name.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "EnumInformationGroup", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "PESSOA_FISICA", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PESSOA_JURIDICA", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NEWSLETTER", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "InformationGroupFieldNode", + "description": null, + "fields": [ + { + "name": "displayType", + "description": "The information group field display type.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fieldName", + "description": "The information group field name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The node unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order", + "description": "The information group field order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "required", + "description": "If the information group field is required.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": "The information group field preset values.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "InformationGroupFieldValueNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Node", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "HotsiteSortKeys", + "description": "Define the hotsite attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The hotsite id.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NAME", + "description": "The hotsite name.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "URL", + "description": "The hotsite url.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EventListStore", + "description": "Represents a list of store events.", + "fields": [ + { + "name": "date", + "description": "Date of the event", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "eventType", + "description": "Event type name of the event", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "logoUrl", + "description": "URL of the event's logo", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the event.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The URL of the event.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EventListType", + "description": "Represents a list of events types.", + "fields": [ + { + "name": "logoUrl", + "description": "The URL of the event's logo.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the event.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "urlPath", + "description": "The URL path of the event.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EventList", + "description": "Represents a list of events with their details.", + "fields": [ + { + "name": "coverUrl", + "description": "URL of the event's cover image", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "date", + "description": "Date of the event", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "eventType", + "description": "Type of the event", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isOwner", + "description": "Indicates if the token is from the owner of this event list", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "logoUrl", + "description": "URL of the event's logo", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ownerName", + "description": "Name of the event owner", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "Event title", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "URL of the event", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerAccessTokenDetails", + "description": null, + "fields": [ + { + "name": "customerId", + "description": "The customer id", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "identifier", + "description": "The identifier linked to the access token", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isMaster", + "description": "Specifies whether the user is a master user", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "origin", + "description": "The user login origin", + "args": [], + "type": { + "kind": "ENUM", + "name": "LoginOrigin", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": "The user login type", + "args": [], + "type": { + "kind": "ENUM", + "name": "LoginType", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "validUntil", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "ContentSortKeys", + "description": "Define the content attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The content's unique identifier.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CreationDate", + "description": "The content's creation date.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutLite", + "description": null, + "fields": [ + { + "name": "completed", + "description": "Indicates if the checkout is completed.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "customerId", + "description": "The customer ID associated with the checkout.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "CategorySortKeys", + "description": "Define the category attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The category unique identifier.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NAME", + "description": "The category name.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "BrandSortKeys", + "description": "Define the brand attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The brand unique identifier.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NAME", + "description": "The brand name.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "BrandFilterInput", + "description": "Filter brand results based on giving attributes.", + "fields": null, + "inputFields": [ + { + "name": "brandIds", + "description": "Its unique identifier (you may provide a list of IDs if needed).", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "groupIds", + "description": "Its brand group unique identifier (you may provide a list of IDs if needed).", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "groupNames", + "description": "The set of group brand names which the result item name must be included in.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "names", + "description": "The set of brand names which the result item name must be included in.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "BannerSortKeys", + "description": "Define the banner attribute which the result set will be sorted on.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ID", + "description": "The banner's unique identifier.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CREATION_DATE", + "description": "The banner's creation date.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Autocomplete", + "description": "Get query completion suggestion.", + "fields": [ + { + "name": "products", + "description": "Suggested products based on the current query.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Product", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "suggestions", + "description": "List of possible query completions.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AddressNode", + "description": null, + "fields": [ + { + "name": "cep", + "description": "Zip code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "city", + "description": "Address city.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "country", + "description": "Address country.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "neighborhood", + "description": "Address neighborhood.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "state", + "description": "Address state.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "street", + "description": "Address street.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "TypeCheckingAccount", + "description": "Represents the Type of Customer's Checking Account.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "Credit", + "description": "Credit", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "Debit", + "description": "Debit", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderNoteNode", + "description": null, + "fields": [ + { + "name": "date", + "description": "Date the note was added to the order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "note", + "description": "The note added to the order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "user", + "description": "The user who added the note to the order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderDeliveryAddressNode", + "description": null, + "fields": [ + { + "name": "addressNumber", + "description": "The street number of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cep", + "description": "The ZIP code of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "city", + "description": "The city of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "complement", + "description": "The additional address information.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "country", + "description": "The country of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "neighboorhood", + "description": "The neighborhood of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "receiverName", + "description": "The receiver's name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "referencePoint", + "description": "The reference point for the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "state", + "description": "The state of the address, abbreviated.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "street", + "description": "The street name of the address.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderShippingNode", + "description": null, + "fields": [ + { + "name": "deadline", + "description": "Limit date of delivery, in days.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineInHours", + "description": "Limit date of delivery, in hours.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deadlineText", + "description": "Deadline text message.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "distributionCenterId", + "description": "Distribution center unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pickUpId", + "description": "The order pick up unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "products", + "description": "The products belonging to the order.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderShippingProductNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "promotion", + "description": "Amount discounted from shipping costs, if any.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "refConnector", + "description": "Shipping company connector identifier code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "scheduleFrom", + "description": "Start date of shipping schedule.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "scheduleUntil", + "description": "Limit date of shipping schedule.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingFee", + "description": "Shipping fee value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingName", + "description": "The shipping name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "shippingTableId", + "description": "Shipping rate table unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "total", + "description": "The total value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "volume", + "description": "Order package size.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "weight", + "description": "The order weight, in grams.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderInvoiceNode", + "description": null, + "fields": [ + { + "name": "accessKey", + "description": "The invoice access key.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "invoiceCode", + "description": "The invoice identifier code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "serialDigit", + "description": "The invoice serial digit.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The invoice URL.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderPaymentNode", + "description": null, + "fields": [ + { + "name": "additionalInfo", + "description": "Additional information for the payment.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "OrderPaymentAdditionalInfoNode", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "boleto", + "description": "The boleto information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "OrderPaymentBoletoNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "card", + "description": "The card information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "OrderPaymentCardNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "discount", + "description": "Order discounted value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fees", + "description": "Order additional fees value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installmentValue", + "description": "Value per installment.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installments", + "description": "Number of installments.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "message", + "description": "Message about payment transaction.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentOption", + "description": "The chosen payment option for the order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pix", + "description": "The pix information.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "OrderPaymentPixNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "status", + "description": "Current payment status.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "total", + "description": "Order total value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderStatusNode", + "description": null, + "fields": [ + { + "name": "changeDate", + "description": "The date when status has changed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "status", + "description": "Order status.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "statusId", + "description": "Status unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderSubscriptionNode", + "description": null, + "fields": [ + { + "name": "recurringDays", + "description": "The length of the order signature period.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "recurringName", + "description": "The order subscription period type.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroupId", + "description": "The order signing group identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionId", + "description": "subscription unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionOrderId", + "description": "The subscription's order identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The subscription fee for the order.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CustomerSubscriptionPaymentCard", + "description": null, + "fields": [ + { + "name": "brand", + "description": "The brand of the payment card (e.g., Visa, MasterCard).", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "expiration", + "description": "The expiration date of the payment card.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "The masked or truncated number of the payment card.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SearchFilter", + "description": "Aggregated filters of a list of products.", + "fields": [ + { + "name": "field", + "description": "The name of the field.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "origin", + "description": "The origin of the field.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": "List of the values of the field.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SearchFilterItem", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "FilterPosition", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "VERTICAL", + "description": "Vertical filter position.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "HORIZONTAL", + "description": "Horizontal filter position.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BOTH", + "description": "Both filter position.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PriceRange", + "description": "Range of prices for this product.", + "fields": [ + { + "name": "quantity", + "description": "The quantity of products in this range.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "range", + "description": "The price range.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeValue", + "description": "Attributes values with variants", + "fields": [ + { + "name": "productVariants", + "description": "Product variants that have the attribute.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProductVariant", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "BuyTogetherType", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "PRODUCT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CAROUSEL", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeSelectionOption", + "description": "Attributes available for the variant products from the given productId.", + "fields": [ + { + "name": "attributeId", + "description": "The id of the attribute.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayType", + "description": "The display type of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": "The values of the attribute.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "AttributeSelectionOptionValue", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "varyByParent", + "description": "If the attributes varies by parent.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeMatrix", + "description": null, + "fields": [ + { + "name": "column", + "description": "Information about the column attribute.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "AttributeMatrixInfo", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "data", + "description": "The matrix products data. List of rows.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "AttributeMatrixProduct", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "row", + "description": "Information about the row attribute.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "AttributeMatrixInfo", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BestInstallment", + "description": null, + "fields": [ + { + "name": "discount", + "description": "Wether the installment has discount.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "displayName", + "description": "The custom display name of the best installment plan option.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fees", + "description": "Wether the installment has fees.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of the best installment plan option.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "The number of installments.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the installment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "InstallmentPlan", + "description": null, + "fields": [ + { + "name": "displayName", + "description": "The custom display name of this installment plan.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installments", + "description": "List of the installments.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Installment", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The name of this installment plan.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "PriceTable", + "description": null, + "fields": [ + { + "name": "discountPercentage", + "description": "The amount of discount in percentage.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The id of this price table.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "listPrice", + "description": "The listed regular price of this table.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The current working price of this table.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "WholesalePrices", + "description": null, + "fields": [ + { + "name": "price", + "description": "The wholesale price.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "The minimum quantity required for the wholesale price to be applied", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SubscriptionRecurringType", + "description": null, + "fields": [ + { + "name": "days", + "description": "The number of days of the recurring type.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The recurring type display name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "recurringTypeId", + "description": "The recurring type id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SellerPrices", + "description": "The prices of the product.", + "fields": [ + { + "name": "installmentPlans", + "description": "List of the possibles installment plans.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SellerInstallmentPlan", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "listPrice", + "description": "The listed regular price of the product.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The current working price.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductSubscriptionItemNode", + "description": null, + "fields": [ + { + "name": "name", + "description": "Display text.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "recurringDays", + "description": "The number of days of the recurring type.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "recurringTypeId", + "description": "The recurring type id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selected", + "description": "If selected.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroupDiscount", + "description": "Subscription group discount value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionGroupId", + "description": "The subscription group id.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CheckoutProductCustomizationValueNode", + "description": null, + "fields": [ + { + "name": "cost", + "description": "The product customization cost.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The product customization name.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The product customization value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "EmailAddress", + "description": "The EmailAddress scalar type constitutes a valid email address, represented as a UTF-8 character sequence. The scalar follows the specification defined by the HTML Spec https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "CountryCode", + "description": "String representing a country code", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SellerInstallmentPlan", + "description": null, + "fields": [ + { + "name": "displayName", + "description": "The custom display name of this installment plan.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "installments", + "description": "List of the installments.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SellerInstallment", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Installment", + "description": null, + "fields": [ + { + "name": "discount", + "description": "Wether the installment has discount.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fees", + "description": "Wether the installment has fees.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "The number of installments.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the installment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeMatrixProduct", + "description": null, + "fields": [ + { + "name": "available", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stock", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeMatrixInfo", + "description": null, + "fields": [ + { + "name": "displayType", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "values", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "AttributeMatrixRowColumnInfoValue", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeSelectionOptionValue", + "description": null, + "fields": [ + { + "name": "alias", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "available", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "printUrl", + "description": null, + "args": [ + { + "name": "height", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selected", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the attribute.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SearchFilterItem", + "description": "Details of a filter value.", + "fields": [ + { + "name": "name", + "description": "The name of the value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "The quantity of product with this value.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderPaymentPixNode", + "description": null, + "fields": [ + { + "name": "qrCode", + "description": "The QR code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "qrCodeExpirationDate", + "description": "The expiration date of the QR code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "qrCodeUrl", + "description": "The image URL of the QR code.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderPaymentBoletoNode", + "description": null, + "fields": [ + { + "name": "digitableLine", + "description": "The digitable line.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "paymentLink", + "description": "The payment link.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderPaymentCardNode", + "description": null, + "fields": [ + { + "name": "brand", + "description": "The brand of the card.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "maskedNumber", + "description": "The masked credit card number with only the last 4 digits displayed.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderPaymentAdditionalInfoNode", + "description": null, + "fields": [ + { + "name": "key", + "description": "Additional information key.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "Additional information value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "OrderShippingProductNode", + "description": null, + "fields": [ + { + "name": "distributionCenterId", + "description": "Distribution center unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "price", + "description": "The product price.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "productVariantId", + "description": "Variant unique identifier.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "quantity", + "description": "Quantity of the given product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "LoginOrigin", + "description": "The user login origin.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "SOCIAL", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SIMPLE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "InformationGroupFieldValueNode", + "description": null, + "fields": [ + { + "name": "order", + "description": "The information group field value order.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The information group field value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "StocksInput", + "description": "Input to specify the range of stocks, distribution center ID, and distribution center name to return.", + "fields": null, + "inputFields": [ + { + "name": "dcId", + "description": "The distribution center Ids to match.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "dcName", + "description": "The distribution center names to match.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "stock_gte", + "description": "The product stock must be greater than or equal to.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "stock_lte", + "description": "The product stock must be lesser than or equal to.", + "type": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "PricesInput", + "description": "Input to specify the range of prices to return.", + "fields": null, + "inputFields": [ + { + "name": "discount_gte", + "description": "The product discount must be greater than or equal to.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "discount_lte", + "description": "The product discount must be lesser than or equal to.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "discounted", + "description": "Return only products where the listed price is more than the price.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "price_gte", + "description": "The product price must be greater than or equal to.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "price_lte", + "description": "The product price must be lesser than or equal to.", + "type": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "AttributeInput", + "description": "Input to specify which attributes to match.", + "fields": null, + "inputFields": [ + { + "name": "id", + "description": "The attribute Ids to match.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "name", + "description": "The attribute name to match.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "type", + "description": "The attribute type to match.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "value", + "description": "The attribute value to match", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "deliverySchedule", + "description": "A representation of available time slots for scheduling a delivery.", + "fields": [ + { + "name": "date", + "description": "The date of the delivery schedule.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "DateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "periods", + "description": "The list of time periods available for scheduling a delivery.", + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "period", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ShippingProduct", + "description": "The product informations related to the shipping.", + "fields": [ + { + "name": "productVariantId", + "description": "The product unique identifier.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The shipping value related to the product.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "PartnerSubtype", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "OPEN", + "description": "Partner 'open' subtype.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CLOSED", + "description": "Partner 'closed' subtype.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CLIENT", + "description": "Partner 'client' subtype.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "UriKind", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "PRODUCT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "HOTSITE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "REDIRECT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NOT_FOUND", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PARTNER", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "BUY_LIST", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutSubscriptionInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "recurringTypeId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscriptionGroupId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutCustomizationInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "customizationId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "value", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CheckoutProductItemUpdateInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "customization", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CheckoutCustomizationInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "customizationId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "productVariantId", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "subscription", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "CheckoutSubscriptionInput", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "LoginType", + "description": "The user login type.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "NEW", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SIMPLE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "AUTHENTICATED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "Gender", + "description": "The customer's gender.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "MALE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FEMALE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Question", + "description": null, + "fields": [ + { + "name": "answers", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Answer", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "question", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "questionId", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "SimpleLoginType", + "description": "The simple login type.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "NEW", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SIMPLE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "EntityType", + "description": "Define the entity type of the customer registration.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "PERSON", + "description": "An individual person, a physical person.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "COMPANY", + "description": "Legal entity, a company, business, organization.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INTERNATIONAL", + "description": "An international person, a legal international entity.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "InformationGroupValueInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "id", + "description": "The information group field unique identifier.", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "value", + "description": "The information group field value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Answer", + "description": null, + "fields": [ + { + "name": "id", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "period", + "description": "Represents a time period available for scheduling a delivery.", + "fields": [ + { + "name": "end", + "description": "The end time of the time period.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "The unique identifier of the time period.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Long", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "start", + "description": "The start time of the time period.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AttributeMatrixRowColumnInfoValue", + "description": null, + "fields": [ + { + "name": "printUrl", + "description": null, + "args": [ + { + "name": "height", + "description": "The height of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "width", + "description": "The width of the image the url will return.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SellerInstallment", + "description": null, + "fields": [ + { + "name": "discount", + "description": "Wether the installment has discount.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fees", + "description": "Wether the installment has fees.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "number", + "description": "The number of installments.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "value", + "description": "The value of the installment.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Decimal", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + } + ], + "directives": [ + { + "name": "skip", + "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", + "locations": [ + "FIELD", + "FRAGMENT_SPREAD", + "INLINE_FRAGMENT" + ], + "args": [ + { + "name": "if", + "description": "Skipped when true.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ] + }, + { + "name": "include", + "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", + "locations": [ + "FIELD", + "FRAGMENT_SPREAD", + "INLINE_FRAGMENT" + ], + "args": [ + { + "name": "if", + "description": "Included when true.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ] + }, + { + "name": "defer", + "description": "The `@defer` directive may be provided for fragment spreads and inline fragments to inform the executor to delay the execution of the current fragment to indicate deprioritization of the current fragment. A query with `@defer` directive will cause the request to potentially return multiple responses, where non-deferred data is delivered in the initial response and data deferred is delivered in a subsequent response. `@include` and `@skip` take precedence over `@defer`.", + "locations": [ + "FRAGMENT_SPREAD", + "INLINE_FRAGMENT" + ], + "args": [ + { + "name": "if", + "description": "Deferred when true.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "label", + "description": "If this argument label has a value other than null, it will be passed on to the result of this defer directive. This label is intended to give client applications a way to identify to which fragment a deferred result belongs to.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ] + }, + { + "name": "stream", + "description": "The `@stream` directive may be provided for a field of `List` type so that the backend can leverage technology such as asynchronous iterators to provide a partial list in the initial response, and additional list items in subsequent responses. `@include` and `@skip` take precedence over `@stream`.", + "locations": [ + "FIELD" + ], + "args": [ + { + "name": "if", + "description": "Streamed when true.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "initialCount", + "description": "The initial elements that shall be send down to the consumer.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": "0" + }, + { + "name": "label", + "description": "If this argument label has a value other than null, it will be passed on to the result of this stream directive. This label is intended to give client applications a way to identify to which fragment a streamed result belongs to.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ] + }, + { + "name": "deprecated", + "description": "The @deprecated directive is used within the type system definition language to indicate deprecated portions of a GraphQL service’s schema,such as deprecated fields on a type or deprecated enum values.", + "locations": [ + "FIELD_DEFINITION", + "ENUM_VALUE" + ], + "args": [ + { + "name": "reason", + "description": "Deprecations include a reason for why it is deprecated, which is formatted using Markdown syntax (as specified by CommonMark).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": "\"No longer supported.\"" + } + ] + }, + { + "name": "authorize", + "description": null, + "locations": [ + "SCHEMA", + "OBJECT", + "FIELD_DEFINITION" + ], + "args": [ + { + "name": "apply", + "description": "Defines when when the resolver shall be executed.By default the resolver is executed after the policy has determined that the current user is allowed to access the field.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "ApplyPolicy", + "ofType": null + } + }, + "defaultValue": "BEFORE_RESOLVER" + }, + { + "name": "policy", + "description": "The name of the authorization policy that determines access to the annotated resource.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "roles", + "description": "Roles that are allowed to access the annotated resource.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null + } + ] + }, + { + "name": "specifiedBy", + "description": "The `@specifiedBy` directive is used within the type system definition language to provide a URL for specifying the behavior of custom scalar definitions.", + "locations": [ + "SCALAR" + ], + "args": [ + { + "name": "url", + "description": "The specifiedBy URL points to a human-readable specification. This field will only read a result for scalar types.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ] + } + ] + } + } +} diff --git a/checkout/logo.png b/checkout/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..69fe03bddb8c65b182b10cb23d88c3bb0d9b768d GIT binary patch literal 165326 zcmV*UKwH0wP)xyiRLI-OWpbB0+&5co!*(1PKtpxz?%7j0iWgc`*0Ls0&C+u@(-hvLYiq{IcC_ z+cpdO=KuYF0RUj`Ohg30)eHa=nS1=u{@@P49dM%fwVmU{L=HCtK*V@(5K(+RF0~%< z;l0D%05HpXLVU|i-JOWyPwN%j&CNw*y^E@{h`X(g+1@uUa<6%p#xS`((kcM)9pTFZ zn){=Vu)VCA5s@%&PhOuZ8nd>icd~CAA7>I#txK(%lH^j%-P8yGJQ{N6DFAaf_o`K^ zx?9RJj{8r3_sM_%@Bicd_uv2RC!c^QmqNrwsOIjLMAX#GmZh3Gu}Dg)rmE(a5{o2v z7iI!#Rd)kOm_;}VGZ6t}DdSLb&ca;hNtbC%>76InPp=PG``tTFpB%<9CmM4aQcfU( z!<`9C#L**e0Epw!S~srq5N^UmL}u1H&D;rYZl(a#OdV>zs4k11=6R~M);cZAG%x36 zQFC*jsxDRMs;Bcb&2_FiS6!BB4s%p9B4$oRY;bc|_0x1Vk8TlWK3rYJprn+TXgZ(g zc@dUe24PV%cU$IpS!QBl=2CK9X06IZ?iS-rM7wbmW;0VWH=NJs<55NMw}1P;{oUXF z-GBK%{|f=9)9uyOK~>Gv%wk6P-AQQf!n~c{?jYiOb0g-G_iwF#vOaTovpQA~i0i2- zIhe=^)FC2{6r;8Ih(O$K1Tgb@)o4(h=j}hZJ23&|7E9tjj@(v8X?9zYDXD{X!3 z?NYoC2TbNhXtR+xM(gord|9hnw*pSs^x&QIsXaR24P3tLYH=`;6A3d5le_ArRS#ik z`-yk(TH9b|wQ7JkwS^boiUFkPQNY%wMpu?na>+T%n>RP#|M2@?|HjvU|LKc7@NTy^ zcPE&)RjY0es97Kp%%D!pWX2$o#6)TqQx9%JOaw`in1qRdoKne>g@?q6*(nc)@!e-n zzw+$qek@n}-PLYP#EFp;WnywC2LS{pI1!OkjP^R4qK8++bti%|5exSX1^_v^2m?q= z22wy4W+K3oaLs8b`IP2T^P;vam8ixwy(D*3HFjqL5y4_}B@rfK4rtazn1x7E%B7HS zN@8lJsstx;H(Glh0AL!hNX#rOT6LZmcVl9AC4#W9aGc`?cbn!#Rhh9UKK=dgfAW)` z{MBFn)qnch*LJ&ov`4jG`edDrz`FeCv3dLG4*CZ+!bcBl%g`K*4)H5`q`1DcbqkLc zkN^f^2cm<*a&d5=FCu4;&Y?>WGPpy>=JrF1G;uOHtgue4P9OLNOu8%^NOLGmAVPVbclbZf@Y{at?!R zMcd6&Uw$SS0AU%1VH}6!>G;#1{PZ8c{g1!>?F$F4#*u|p)g0C@p{niKnBq!iDx8=_ zHSmq%snw0lB~e%<51GBlp#qG5pvf`Zp<7L zGtk7{h#6qOHl6Lf4yao!R)PUeFls1D?&Ps)vp7)#g|WkgVxo>kRhZ|h^HNV6gsQ5E zwFtYgFgx?2MoR@r7*1vuOFgH=!YSu63?xiMb*Th*RRy*E%iUCon2D;pxdoK4u-2sy z8_b=&J(rr1QQ$ZcF>}s_1+QM-eDu*ryKy(2&tLo6Uk}5zY6VDDMK0}MA?)Ftqux7s zuzUSmp#+F=Z_S3 zulw5n8-Iq0z+~>RM@2hXgosVU)b|)8hOj#^4Z|=^(~o}iqks5s|LsRV{)qxt2g)Uf z!M~!3#X@yBz%0~SLc;9i?o8-t=19yA2v9_ZQc4mbq$KVtpnb_tcH>w7?A>>sKG~Hr zmNewlaRfpxa3^PsiF^k^HzwNfkdda6rU#l^{;B@60V&wB9i%xsOfvte*A!N4w)*_pM;J{d|3#KYDDhcabmjz;O4PR5b&hxASMQMZJ4<;b4m%o+qZ9j_~Re`*Z=ze zeDJ}CZ_mhrG7Ld3c=x*XVw?irJCF%Z?jEjkm=D6-P@O0z+3&`ZQcir>4NM^SaVSr( zuAW|BedV2J*N4N9Bry^b!;_l;FatTegB)%Q1auJq*Uj)IC9a3(;|@re;+gZmyMplyXW8_%cuC zZsu;yc<+GVVMvl`bfct{OWGd}O!VT#3-ePFDZ`i&pU)>#jajiQ3cwu>0)a(Lbr^6w z`|m&d?6;r%?#0U&r_(7=$=!fEtl|nN_srG1tE1aau3^r1Z|Tkq3}}03ViOUA3?$ud z-BK+8l3y-K00o^H-7R!sIBkar7t@IYD(~%x-_v+?67+fZ_3-(LEiAacu*sC(Aq(nqg6A_DfRTUPdc26eaYT7tf zo2JRsoJa`Hq=X=ngvo(vUgl*6h&dKf3qeQ{n7fOe}Fg@<7r$1&wR&GYT?m~uW` zU8S7V{d_zwTC)%nF$)oynVD)VC8CnNR)6v0<*Qe(&eL>|K*c*$**ye#FgdML*yL{O z6bhScd*Xv1?)}^x1qYb>H12LVfOH`_+-b8FFttv;8{LQ#i0^W_+hYY6r#3COtGA81 z-H$%pYjvDv<^WVpl6XI-ZR>5v_P*Z(cMXjg73!=iIx02fU+?nAAn1<{74E{vL)+)k zbF`Cl?UUe2+}xd-EkFqPU?M~WgPc5^)8LpLF=Wx_7q7_N-7MvtOL5@ktCt^q_`!!i z`0)0O>ph-4d1CH!T_SQ}-bmeb5Qxazmeu~(2sdIT$|5OAkd!6KZYcZRI1c&AVYe$O zi9ESJyz}JAejG|lLr&yQrVM8|If$GIE1Cq95gg{AEfB1u-3HX$!a5Dk5@3tKABBw; z1{H|VjVc03xGHd$L}3Y$h+}b3a;WOeHJq%Ra!M&LS`Afgo+e#pxDP2&tU0%(YOPDr z3?|cBmkMG@6h4lcGI2v$keZr1m=dy@pU%?=lyTS{_9f+U99eiAcXe6jN!1+eIf+QB zb+K7vl!L@I!;2TsKl$|2+v9P!+Yu451j9m)ItzEanCR8mxwn>kn{pdK`J-sEbz%U3 z{1UHdp3cAPc*GaD@EPkOWU{{1uZ?0N$OTZsgLQy=hzsjH;tOUG5r|C}Cn6DAmttFo z{&3l^P~z10`G+wSYJhUbpy&=^`;GY#KR)K~zr}0`J2Q5b?$TWTv^7nMXmx7n?!V27 zCNei}kWa)MMt9gJafM+R#&LXo^XBLO{LdeJ@WJOV=8`e)cO+b=d0DEY)J@5?t%#V2 zle>Y5BT^l)TLNW~QgVtV!@M7ctHXXjmfcvMULAHN=fsEo{>fpV6AK`4x5{t^*qz|y z1P^-zZTBLFDHsjy*M5Mn6Wv@1=sSl2u=@kz)J#_bQG*yJ0y~J^T@6kVL`WhacA{D> zNh&!nbvdP(g@@|rc|M+J1~L;9Nlp^+aB?D?r`fE+85YrWgS)wgcR-BQzR+5oV9Lv~ z0Cao29mZi8hW+7?MF1>IO*ub(`s{o@-Mo2YOO=#T&a3GPVoB`2EER9wy!rKSe)H+4 zpFX+1W+F+fW-If+4|cn|zk1)%xyJ(up*iX>_tdQ~ityoG`)PH++*$w+xWqNWoI_uhvhh0tp0-BKy_UFptm%iH_>h#@ z9(No|+I+eK5V`|+XSeL$TsJb?qs1=KEXn)sTZ0dGcUQB}L~Ptcc0>#d0HkxY(WPo8 zM9h4dVVlMPaJa!N#3ld})D005PHA4|k3atS{rBJh`9J@Q0c9X&S(d71K;NsG!a`sX zpl^4C*ma1=5#%eFkQkXMiDcoD(vz#h_2DoMX&myC!+t*w!n7NQoS5AR?%gV32Lse_ z#JkC1)QD!^*qvKr);k27TZ|F_>jAooRUKw!k#_3 zd#$CEl5;*!b54>%OhR;;=h}5lL`Wi%n3=)MG%RXMtyP@}1QTi?3!s|Du$#N8F7xeq zp5!*a`|h)G90AZu5nAOZINqEuIgwKBe`!Ak< z@t^+F*T!*B)2bTUALfAQ4HfZ7XkxpY#^i5(e$Pq22QK%#5F&C%Gjn30xqDv-kJu(X zu=q!hFr1h-YbJKy)qqF8AAt4qI8&HcjoiKGx!VhOuxvHReFGfs9vsbMXFhV!U6^?I zr_f%w88Q31TXyy){?wVTW`r{+JahmdpaRG)pls3ITI*_hP@noOK(_vBO}W>v)1L88 zBbi*==Vlk(T1>Jel1n+A&%gcMZ{K_Gy?^@t2X9Xp3x;7ZcQdmHK-is5W&)9f-*GWK z-8r^sW+vpEhMb0y$DD&|y}sIyrKCi=u^e^-6P1);1{e{@95A@YLq@PQddl4z;R+{) z!_8fYJ0s9y0T+RT86n8mEwL5$tny_k-QW2DXJQrs*vyHGsx7MQNJ4>RmUI|~T*^4j z^HPWN9DpLX$I~>E$fBu~v@CU61jH<&j%CqlUaDF(t6EiKZ!Y1qh(HK^ zqxT?fAQj?63I6)^^rIjB=x_d)zxmJq`EPf-J(deIf(JUUZCrBQ z_B#0XKQV=`-C6a^^jg>BJ%rls#POf^YvP`5@(4A+kFUh-?PImj-9X9K`&gri_q>2r ztFoOd_nw~{X7NVY>g!65rS06ev%8Ptgnz4stv}I)B3WD@2kAYpvVIztekwNK&mmRQLEOnA&y};La>Xq?CL*pMUf5#~=OZhrj;# zH??BiBjwyEDGzI|hsMl^A`Xn4#NFX4%;e5Yi6t>JVI0ahlp*K+ZZ{6Ykn>@;yE^Q4 zA)!y47z7iBM2s9AN;+`Fof~aPD-r0MB@qwREj!Z)S%tUdWa|mhiMSKLboUk_4hROE ziHL=m0Wu3ukenEB%EgOvM96UoR?acx&X*2HNB|2RyFsO z{k-58zxc)b?|=8*cb@&nul@DCC3Ek%ySX-9cwaM*OsDPAGt=$t<-6jPi#^+|_}2So z7c_D5t?%_{D;r_CF(o<#6Ekm3?kz@K?$=whUYzeD;{DrgfUs@U05J=5$hXj0W4im329Z@lw0@a7?|^CO0#3Z&>fvHnv)IhyitErw5|F4Vh=nDvBj;iccUMzR z%sBzngIREM0+}asTeMbH$}A!VRG^zCt;0}aR-Dggt(J2VW?>3*Br%6Sl5!@Z*)(M;?&mW; z{`lihKKJZ+JOAz2P1BIDzCqc~NrtS^YIquwwki&u7>wbLw~5&?b%h z_|s!9>zUr3y-BixNboYVd6@y2+N^UJDq3R=w0tIWPmI% zJe@7t-myG;oS$0oU#iw5Y259I>G_K*eTA4*VjWya36CDH9ffzj0psTgFMtt7H~mu*eaR| z`u742-o!2hkk-n=%mDFHm;G+HEY-}6TtWe&-4A*|w3#~_ND$x%kgx=%kdv7UOOnK# z9F&L~s{wM0Ey=mE)GE1{dsSQ1m^tS}M9Z?gesiPdW}Xu>7r0H!%!E>sgU7V1=6>VL zvcP*7vw4mId5u$_=Xt5s)R=iF1;9Md%e=S`yWOsoay%VXYvL>^F>^|?5Sdk15NUP1 zdGqFrFP`7t-j2In*uqtVgTF_Y#y)h%B)QXXeF@WM+ZJJRXSo9l^Sl6FtIqRso+e_B zrbg&J_JH@5yGhJj?*dS_bi#rsW>;@r zL+lP{gA3fDlpcA6FZd!V5=gSwsDwoPIp)1HMD z7jBSGblEyOvaq{dP;&z}bV)MiHQctD8Pxx!GK?vu+w<|)zxmA%KKkfa|N5`fgmHwV z#4H^<>?$JUQ%lB`0b`fU}!0!HJ-7 zYgDy^%m8P&tG4+{?yyi&2DQ5LMM-s8YYgO%gJ*VB^&ce$)my}QE>AcK~>QWas z15u5f@b98ae|C*p{uR&|42{15JPzs;FdN4E7FR;5yyh|H7{GXd6& z)`&hX^L+E>=6F1-`RRN_bv<2}gZ{nM}>t11(hQo!`dC!c=s z;fFu@+0WkI&M8Auid7Wfh#jdtgMol>=~K^?5vIhHgoJr0xumok%Jt!}8^^ex zDG@BOFhT1QK}>4iN)wXAZY4~#h7yBZVj_aMku#%dRm0W@2Z5z0KoT!Y9R@)sS(aY^gb?4EWXc)i4Z~5d@-k z!-mHDlaF9ASb|%m)dBkh$6Y9C-rd&sx%>>cgGm}`2eOuh&qQG2dxkE38K8L6t$kUs z5?~#GP9a2~B(ALHt}N`0_Z9#ma`Dc%l`MfZvx3}O)}Nch9qbJ(AOsd!mL(b=+)4n% zYQ3+%j0dqz7YEq8Mi#(@|81k@%sdVQ5q6CkQ(}}Mc}t$UM4_0N zBSuTcgp%_(j&LLQk|h8o6lx`<{Wv^1?4Lfl-i>3)rKAuyK*+fTk3B^N0XKMsfkmiI zW)O!rVb&-)Lr>t)nD@ zHO;v&k*TZJlyYn;L4wCI+R%*yKz`l)&13* zo0o6i)M}E`P?Cd+@NOt($|=>Vb42Sxexe%bi~zzbU_v-Ok{3E z%qcS=rKBQDo2!`5)0@|?Zf|bp({V`G=EiU$Fmu)Fu5gRpkk@<~;*bk@!x|&A2($(I z=rS*LesO#I;`tXhZ(b8zO_zB(-o9PtnS~{1=B(yb9ZM3jUCBKcjkv3&?&J{vn*e1q zn{jVF-}|{i{^rBgk%Pm`!*)$6Ez5%LK&>ZtZ5ThaT~;J{XoSQa9lnm@!{ZW-1lj;d z3(EnQkS%~D5=2SRqFQT69xqSV*roxg$jA(_JxM^@4O^m}E zp6s#FVc{fFO35j|dj0x4-~H}4zWL2x{_@vVvD=eK&$RNb%+Ht@=7}jK9&*Y|!ikA; zl9YrASvW}=O5TrUHHz9-+gRS3JG;OUdo`8+KPh`|)eLP4OGaU642^Rbk7pFQ1; zV>O@VS>|b}IxUO31zt%g`2YY>SO6_$80Yi(`Sa(`o<7Yv6VWo)B~>@K20jpGVRp0g zX?peI#p{9ePv86c*T4RYU;JWTaCM-ot1D}DeCWcoA?OPg=EO848A}qTCe{)n zLKeXNwI&fJQZubpQlj2nYZ%e0Qa513x?xUXR5}sI{BM&d z1{Xl&MNw=c!kotJ?#I(N#LGR5*o=|mz(K~&p!S1`RAXV zk4LDw)hxsufp1Sa2@4SsOlwtDVlu1Kbgs)XO{cdvug|C3>3j^kW1h~-JZW8mHD`hl zdG&}cB>}`sE{9#>#7yi?L-ySu!V&e8h~PQEf0%{+Q;v0&Zb^#nrIX{5Ru}8)a(Sl>InF9&jkHgu&8+$IXI9PYi;QJE$w0BP59)HSboQH^+^cTiWoJ zb)znikN!E{-VQ?diCo3n}7Y+ zm;cA#{^ehMmEdM|F}=DvxYzl3ETstZ?d|b&I-X8P(^~8D_U+B_cr%@kZ*N}LWsX8q zOypY8gxW4Gy_3pNEWm{+Y^6HiqMjXGG83w>4@C^*5baVg`Z6u-mmTX$!v#nFAO+i} zeoLZYiaKK}!|d*{U01av>47|i199VXwdRsI&{g^O0cDE|k=!Av*+&r?#U}i`UB;^) z)ucyF`DU@XsaBD){Z^RJTjtpA26QhE9wG?9Ot+E~_=RA$uBMmN%taZngHr z5J~&Po``<_&%gNlfB1jD`~LfHjy4uNeR?g4&*!tLcjW~Kpp-00WJr=l;8t=Pb4G+5 z%$P7FISj+$u#Y+ehut{j>}~`T0=W@^w!)=wpv=}4O2n%$Xq%P3GU!c3-KrxtxNXUL zQJ}zyn8va{pHDf^%?-&Zr|R#e*Nn9_%`BgW(%OI%QBzg%Ax3q zeMKUx(U~X-128?isWEaYNl0}$9#4y*3_H#vA?Hjf^E7Mc;@YB1UAClJJ1lT z=x)&A^4GhkuPHeX&$-L0g!(x025tL?-k3XN2@Atpr2=N|^!0so@Gg!`DXLp=7#f|t zT-QMd8UUA?m+fLA9Fm=!TDhIJ!Mba$M8qNyP2{^EwI26ANs@GFKBzrK0%gO5J?{ttfe=4MHPVaPOsoNc@*XVU;9~ z%ebi$JPC<#W|S-?NfzFfT$0pff_upl*?LjwGzuJ25@vGMZd!%`5)@M>9lOg0K==~m zZZpE*gecL{zT)wutXgxUGAF5HqW(##|}|=E9;5FuVC!qPQFjB}thi znR^m3RYX9GndZd}P_0o#s5x9f6Z}!tX0DPc+%%<}Q%WL|cDtQFeR_NI=51Y$x3@q0 z*-u3LFaN_=B~e|@<4|6{e13Ct13284dAhlIUF$RqC8xv!kx0U8=xa&O&Wvy$n8`HvhSmu!oT+G!R+oX+VIwGt}5v&r2!oU{lZpfQv8jDhAY zU*bdpqN={8UrGN3`7Y|@2-Mp;d6>;FEQF|~R_?eQIrXXP*& zKt!tyn_7o--OlvHwvnPOe_`Y(#uG}~@h%5b>4 znocjL$$$IXkKLEoFaP3j7|iC9d7h5*JVnUgtTLvd_|=Y+gtSe;4lpbfC{ghfeFdT# z+p}+K`}nb<#zWP{Jx|B| zjt6w_xCq|14u4-azM@ahj9vjNcB)4U3-sij_J_L?KnAeZJz!#UXW>>lyptDv$+ff1 zeH%+k#12J=4D`FK=|aJJtm(z;LK2pBAKn^P>+Og*v|3^11~toRtK~PKsWV&Dvik}o z)D%Ugx#V#-n(0q}_S3I_{p&yY=!esSv0xm>7GnXC2ffcsNX$8hs07j~zB&<-q@38u zg+!Q!l6ONHN*+rdhb&QZgy9Bq<5qHc9l98%OA(3fIE83x?HThZl@tkizBzpzMvAhC zERsZWPVqAUQ?1aPGl1jiR7x?`d7g7h#JntvFf(&qmZ;?%ruQ20l_W&ONs?sidq!x| zR}-BY3)izZVl<^|4=Kt-grHW`R0xTEm3~dL4oR5kFc!T!5d8LZX2O_rh{5VKJ9F9X zQ%V3$^W2{~8i|;m9+mK#=?W&)>drdP%iEi`MPwYxVSi;$m(%g>@pgXs{EPW?^VL6p z_U!4tPStJEx(xdvGZcE*3zG{~^6F;jwH*jurVD7T^E`Qv6z-`W@MDEjc zx|z?vt9E6;7))3li%X%Dpa8LpN*xQD>bu z9#$kl#Orbzh=h`Ad!x&(qh3iM>?RndW=tT7EH%3aqQNnRw^d4Uv(LZy{CnT~-uJ%u zz1t&(jH|0bnA}5S7lt(gKA1=diHQk06nGBikgIXxBtXfs8^^I$vK-D13?qI_d=Ei zC5I`4f?{)E9LJQhssX(cRiw9cJ~pOSHH}M{c}tbJ)c0$`zh>VGGh8c#kl;#C5D6cK zF?N1oHb)|liZE`KkP>k&L#>t?#6unH(lK`-W|kH^*L51h%#NpHNvWi~-yg`-b@n>f zWq$SibQtjNlVKQAO0vwz8LB5C8h52G^E@4`KXo9t)q0wyx-3j=rswmyR?C@EVxSk< zWbAe&0$~OxX3iy-Y#82s=hqZdY}dKO{(If)(5t!YuwB1JaXB~ zTtqWfh(H#VKIH;u@q?gcg?UI&pL|wIM}Efo3f9BvWdXVZ0`y zr@i+fj3egsqYoZ|&r2rGUDQ~SW&I&!wd;lAl?Y+9_fMiR&cxP@>{tM9YjpyXBsnJ* z`PIMt>Vpry|Ji4+6XE)LC@H&pN{Lez0s;%%gS`*_0Pcw?F~OW1LX?FG$RfLOIPAt@ zD3Qpw?h9>LTk)(Y>~hHfaCcC9ubZ1|58`w>q79#Suhz7c)bCfY$jW187Up;xSQ7La zePI-Y+AVNknx-Vu;yY#xkO&b;NE z`(Nl7g%hPpmQ~!%EtzRks*NNR*rYyp-jtMa;~O6*IGUN zDWg`K!nFzE3G1sq;AUF&?d|Phw}0oWe>P-Z&bRZ)gdhcQozJ)X@mk0gYReq`K3i2? zmh-vR#SLawYgMhCCPa#=JODAQI*IQ0gD{!Z-EKS__QNnR(V|*wP2<(H_@wFSll^`y zLWq)1%y1$jg5Ql0KjcI<2FoL?s&BULz7$skynOxPQfzOi>s7TJZaT+i9xoz^e3yG6 zlE$GJHareH6q`HZLCB`F_ZNSJ+TyS%(b(zdP3ZbTXtw=p+gc~>SSi(JN%gP#YFHA} zr7R=Uy329Yxw9TWY7}_%hp@Q0YK@pev_VxYfPtuT! zNA79MKy)Suv73g+LEbA5G)GE>QeqMU0aNW` zgP$;wffh<=bpWUpSu=2hnswS#ty*i&84zbuo6RKUe39_*^aR5+QW3QTK#vk2CS|%zXWr-xCS}T)*cu{wk zT`5)-=9H4;@)v*hXRlwqe);C+u;1@?6r~OIwz(yBpF~ZkX`1JG zD4DI~loueUe0|tQ@m;rC=UV4k>+Av2X1BLD^X#hvNNamC5sU+8p(H%+#w5f-<5&)d zkq9Z#;c&=VQc7Cu?eTOxo?N0PxiBiMvOB_=4X`(J;pKOhIejiuV`3p_SF(%eHK->g_t|@u$Qdv|xUR0=bxD&XPdgdxfV>dEGCbE`08 zN(3`?>6vfLNGXU1r;fpBzJPVGv;J1Upnh83TGqBAaZ=Xa3knkdd<>3~cW;4r4hLQmoD3$#5$@RO>o`QKi95|)@I4sM47>228 zI!!mn({f%YN~r3sC1Vi-^ga)Jz$M1*M=hIik&9!nCToForv7?LnW0(>c{lpJew(yGhRZ6+omlET+l zV-`|f+!Mu1FFM`%sHbyh4R062`tw7;rcQ<5XIs|=<0}DS@cvpH>p|L(Aus@0KiSGF z*1HmK^`LhUu&Kf>sk#^2Rn53)_;LZ5?xC#E$=geXEz%a%gAT-|`bIzB zgD#;)S_c(I-5_ej4H3gUcnbIa`dDsHIt;^Zzptu4|M}0q{q1jm{PD*GTwe`EQq?M5 z(2AwTij6nvNn=lfe`p&s3xznEi9uk72uXWW4mb#@phAQiL1{)5%9n;UEXh>E4P_@Y zH`Bb-Smg00(3d=ffWB4Ur=3=^#%GK;t)_FkfHkTAPNa7TLncU06B zNx9YgY zr_(gus2aJ|*||s&xP z*O+%8rM`+tB&`vX_2OG{E-aC?dH2?808scE4}~gNosMoN-zx}s&(3l;g53N1`b9Il zTY<10Tj5D#ZP&n%Z+5v&7DAG=eMTmBVt3QX=#Q$qaC6To?e}|!|N7Uz{?`BepWpxR z`>$TjIYF3Bl^i*z9QqoOs__;pCIa{HIQRF@MKVs3AW3aVC8v~A4$TWwqHd3{G`Lia z8j%4l);*6<<(Rq2hH(pcSfA@ct2O(f_2{}zS5aS(x zU2+x>!m@fdr3@txNpi{qvse&3(ejw&mtTFAS*_zqmqHM@1odvo%)I=A`az+@jY{69a^lsO#9NKWm5n^xM@%OpW3!> zVDB#3nkf9xvL!-)OI3W=%smmej2l9CPnr#X=^XR^GUf&)4F2I86jFOG;j=ww&zX)Ve3QEK4aRo+B7>t+gXjGbO3ji%rZToJfQ?rBremScHiw zms+cuv9KA`k+2#{VK{G;7ZH=}FZZE7D*!juUSJT^U$rO9o+K-qNw2v}!UTdUtEv!6 zk|GRvVoojwnyQ}8r~OcBtpLmyBaaYIgO6A^W?*t+0V!coyFHzSWtWAS=QEC{`p#2z zv#-2+_4Imwbr^Rg4?~G~;bFfkMMRv*qQ02f8O_^tQ20s&SArWsO^In)CM=;CtY#BI z32<;3va_7exAQUyGy9tM+Lls^skRAIu5hzqw6}rM%@Q)TV915pi6i6FH+g!r;S^L& zwYqyGwyv6yiyzSv>MpLtJ(vjVV~Y{%Y1?BJygy=|#CO}b?)-IyP7XK;+uJYFRVE6s z2m`}nVYtiYui-t#&s)3)Y}?d>F4Kzdhc5^ur&1?RId>IhB&hW5H_UEZhM!i=Pk~eUdn*loCsLH~n=MU5pZnsaWKlj*SIF z6s6c>wPR2n6NGAUC~-6bbU0Es$`NTklgSg)>PnW(B(MMP+^Mu$lq-rh4W>`*gf zu2r?Y=?E#|EAKvg=ShBgJ-qvDzZ+7W&yq+OlGt706T{(ZwSttWw!A4bcWWgx;fYDz zn5d*-u5M;lr#jEB3&995TWn$Hc^nWHBggwoE_!rI!WR|nMb6kYT^Av2w^aLTY|{Z2 zVr5(P7%M-Ajx50!w9TO-LYS``Hupk#gcZ;cVYA@rj-mAE@lf8rUD6>Zq0Ym#7PiNy z4zl-;&34^AJ0LidmN|GAZq`q>O-dr(YqhO!3+}^!d%sdknTuv}&S~5Y?)IyH{nau_ZBe0+!weqS0-U9B1PCioU)TFYF0H1A9iEPiCLz3nPyeLygjcm zYkdki!yMI}mO9Ct;=PLr@4kEZ+F$?GfB5q&t2ftsDVc6`c3UI~Ilh%Y2 z0n1IRE)1M+z~~}TV0Z5p$Hp$}HP{>*3|%i}n+(ACBKLl4v)sUI;I6lRjUTnQsSH?XK7`hd*&WT zF@5If7HMKqbfY9DwKFj>TsY)iEf=%()y1N0Vzx_JAO{@8*4}p0youh8P8MvEg;dqu zwJI2;l&W=AFmFQpq_sxN^zyclpl_O#gqS2H3H}8h)z7djPTjUOOF6g7Nj+#4m$^(5 zqSZ+6^w(v=ct6Z_Q$r8J#5obUFrBB_%mTQx$dFUbNzGDDPKl{5LPZ!Q?{+&kyn6ix z-d?uSOxC6qY@3~RvdYY+X)54Dk;8uY>Ysn*op-Lk^6u67cCOQF0hO#~6+Vag?5^t0 zY=F92RP%2}XuPO|2(2(40I1GUAhXu$+A4D7#B((>O^M=l3w2qXGom87$0SF(1b1T> zST~f-3RJr+Z+B}26gC6UmQ8nFwle_Dw{8WvnKmVSa3R&!uXum^#A+7xS!*B;d$`@M zeY#D$SydZ%a$c~)M9aKj_V}4uU_4-MPbFX2=m4>#P&uTKnY{adrT*|)n*B8 zq&fhszv|H4sEJuAr&Llp-roM`hd=!Gd+&YvyBC>o*waul9Flm*8E^rTu;g5q#VwLR zjG0SL!;njnq2wg2b*WlYVs3rOIj3P5QWA=A8oC39_A0Dcu4W$2%gR&G9ZZ3RWZC-& zt{IkYu!tOB)vp8A7-wIRsHO158W2hAHa5>odyjf}Tb&e3Ip>sPSeS)KSeRKvq*irM zE`ubg>WkNP)=|`*L$m#uh=o@H;W}g2iLpIG??;>0Gprj}%sOT&IlGxwHX|W0EHlQE zOw;oJGxnxUk{rpEpdM!C?vY0wr~(?zZuG$>x!-p8|9_j6l^GE($syS!aWv3C1E@ls zS(zD^yP2x)2Q{%>3TC313_MvGQQRS zJiWT;3?T)hN-5BykYF6r$ImZ6`S|I@6d4Os*&pv1Ik1Ukv%*yaupkTgs;6)Hc~t(J{S|8h6?Z(7HEKt2LYK53?Z2+xAr37L2QR^r zds!4IFJHX)mw*1JufF&q7kGS4fvZ&75MzwNJ8_sp)d~e*MgSUON-0fa8iweK8-bu? zWum|#F{Kn!N<&J4nW;WdI&%}&mma(Nr1epUo+EXGs0Jr6p<8xnftQQ{g*lM}l z{?yw^L_Tn{^jj-M70IKO-ntbca|m8nA@U30+RN9dO8}K6=*u0OHcbay+@YON!=I(V z(Av-{&;zgzZySO1A$!aQ*z!-@l#yATcr|Dvvh7_Qv zxY`!>_5%Y4v#Yoq5Mm&VfiEw{k3M?*?CGN+(R{o=>^?9Hp_yicf+T1Lpv(r~#Z+z8 zmfFMQ28C8k1p-u4Q16yKErOiOFieJ44ozi}NmtIpU%_Wt_Cyw2Lww(^)bKo4NX?K{ z6!=ut^R-tMQhoC}8iwEVsw_mr?yjcYh9()RgNwsKDJJO78PnRu`bWauOsGanY=!4nTD zAQFPz-`)M`t1rL)>Z|=8E+-gb0<#pt5UY(K#FV0`iK(d~W55s`V_df}nrW-l zjdnllVZn_TROrNg475-W+?kmdDJ%L*=;~@nfNTanqPb)0{_=u){UI|@113baHX{LB z2y9mSdfHiaHnvfPUDVd4uIjvinOHCoq{slqiUb&$2~f(x(7g+Lt6yYFF~mS)jG{~B z(Lm+e`Evo^pkQEtY$150C5!@=xA#ZVJJ7=z)vXCwK{P}IQ&S}ZMo@5c6548CuX!~C zB(4p?rlzg zzqUxk136Q5eRbx5EmsFXQ_no1n~${_@_)3MX|~!YVCHa=dH16FWN$=5a#SA>Ox5Y8 z%pgVHzJ2rOKY#Q3^{W`*`f5UO*pFNkx)}=+6*NPF*6vb`hzGRbPs#uhgC{sKZ8lR1 zF~+JG?D`{!)R`UZ;Xq~aA+)iz03g*F5H%3Jrif;B-M1d7{-n%IwT=F(5X`C2jy?so z_oMg6LV&>7iZ4CP6jek<1QGQnJ~c2gKnQ^VsEByrVhBteLZB)l-(+{Ouf6IXR24vs zsV}Y?eKhdRyO7bUxRJEP-#YmW01-kUv*2Ars@qVIn&LS#ZFU^2;v?fv`vJ7k41&SL_s=x`4HiU0s007*naREl_M$n-S( z0>G=__;Ax$PpFzfJQo9mx^`fm=d3J7xs-XHMU_L9Za{R&p%oXl_QfFLiq=)r2dq)B z6p2%ePOn|-N(2=qVo zg9m0KTPqT;|N7t`KYJN~5+R@=x>S7wL5Km+p>m(XjZM;(S9zJ|HKGL^L_i|+O8_wS z@C&fk|6Ch6yYM5DkupJGAj188{L5dy{rrp1-`(8D2qsmV($gHbWyDS018aRZ#>mV* z_p@aGP24KrP8wa|H+h ztj8n;@#TebQF&=~q=rUal>$`gQ8O{o!2e1N*uyud2Sj8H99^bKN4 z!!Yjm2hrIS*g3WiLn^qnt?j&`;B*_JE|JwDN)QpK3)P{q<|n$VLtthD^9f%*+(XoI zE-3|M1Y)Eh1~M;2B{E%ZrYG0ehGhHWVVScugJlNl;Sy2Jp%74rGz|l@7#u?!hJgsO znV2b9@me0NIyRxk`>?Vm6(hHfn6%ih)>V6%x&k^FLr@_n$fOj3xd@o4G`>aP4hoP5 zik-#QB$s>2DB82lhL0)$D3Fi!K}0zxmATyBSv0Xqr%${xFPcED2nEp-@bV9q6l1W*vyD2rC5;;MDWqJHT_T~ zbg6+DL-GxQP*7p`_ z45C_z4kZ8^G;LV`sB`N2&7`KrrU2ljUnG=LvN`bQfJl`)Vh)v{+~^}Y7f}cSV@!yw zDx5+LiHK7gaDM=>)=>;#N`%x1jXCF&&kOx>Oxl>Sw(fkvoSt&O0Hj(fiZPg)vXvrG zN+5L7v4JzchN7xj2y`>1>#K`JWGQ7Si_2ZB?-6XBq8_%2Aj8Gx;**b`Tum|#7=j`R zr~s&$AXt^rR;+31DZ4o>T14tyFum}ib=b@4!-${;M1agdK{-WF%!vFMcYp@~LPtiK zsWYI#V~rKiT@6Yb*9@y9Xk8hB1}pT_hgN|-OE;A293~$J^1rSYpTY`808lz*(fvv_lbyHR6!A`ssyW9sFh3f z5iKb&f@x6$J#24x``tVrImD~$>&@npLtw_7OOZ0gkpth~+<@1 zM$jcGyf(NxvY9jAYS;h_s^V1xIE${)@l+?mg9mb^jDD(=V#=7!0EuEu9xR4XB~G9f zYbyH|Ktw|@05k)A0B}QkRpq!M83Qj7m@w(xI2WzR75L+0fycfVV%|t!w{Z4x%%Ye zkH)Z%F%wE4C+{?)W2Yqz01wNwrxV4-ZBb}RDpCs-(ZMOtlc7ifV~!L8JKkaRkT@DT z>e-)q-`VTpNO$|NvT&XRwJ)|bxVxD3x;#fNT(8FinQk4JNu<8B{`?7Q)xMf*N9h`~ z_$&9yOjqry%|@XA*4e?E)Bv_u3ta&K0*4R+Ht!{h*40PQ)}f6f4gO7HX00R85lo7u z7={=L?Cxg!>cx-S-My;J^D!5_xV-%6+4E=5KThK?ANQhqd3ljy-0pT?ef8CM-+p^M zz_fwD%p8UxP17hvycZr;92{sKJ_L46TmbNi*?q?nQVc1^=y@3vIWvd|RKzpJnmx7~ zx4xz8f4e>L%D0ydu!@i%R?H9U>4Ep|3nF+f}A61NpNP^SHn(Z5%>~ z(Zv;1t9Y8KfIk4Fz~n)Vs)>p%IW7w_mt0~9F-B22mewBWbz)IOiXkX7=90_e0!!=M zye=DGw3Xl7mVLWB)*xGNIsj9VY^qF{LdYUmtLqpEOCX@Q6q$y2xtVr{!*K~&iUAab zsv=+Q2oi!1If_iCnF(S5W-t>%Z`L?VzW)Eb`Z>Gp>kd^L!Hfusf})v<<(y@AIP6u0 z!YLc7JEh(!rFD$ZcF3uX&9A?hA)@ zqDE#Z@@5=T;O*^)7k~NgPk;JynGcVjJVwOB@wmUgJ#6oehutrJ@#)1h0a6OQy}$qN z+wVUA{EJtw-W7pm0UGood6rB9;@+M-wP7?R5kaI70&{QY>xt2}3-wD|J+58z3TZikL$#5UvUKLTtmLY)ayR;9( zI*1_bwO#-KrEVi0fVcqQfk_CQbMAty{_CJWqop-s8xiGF?18RI51<;B=SWJ$hPu^g zaalVVBZu5;-frNGyE=VBTYB#+wFda@yC?hQfiVJ@sn;VzuKUa3{bkQtFswWtM#Aw|oeW+Q+Rsll@3B~SA_FU!FceC#3ljngW~ zmXFJEk9N74#&Jk!mH|D&^3&>%;QvGG9ncxn?Q1Q0_gXtLViDyKLMQ`*A%&C-<5GrU zb5%zOG}}*zzT-nJswc3jkBE02UgWG=-{Y( zAv$&FXUH{kseV{nJ1G(A^;dOGy9M&1OO%)hve#gT8a|!z~hhtJ1Lgg`$uB%G@C3?l+E6G;3KDD7yy9gSwz6cL7<0Ir**Xsm%7Qr zIwcMP2$*1%);XC)RLx9I^(;97lxk$e22hGYQUpT=3P@SS^0Ha-ay%a9dC{ZPg0T8_ zHwHk3k^$7NFRz|Hemth5<^|9U9g1lX#Hzv#=jd3yB2}mX9RSoKP~U@Y1lxsIED1v- zrVv7ikwO4MJ12phD#T~p%{l?I7DRe@N{B15i5l8r+qdiEV%0j*ZcrR^?OXlykj{k& zN-5o5oQNlGS(-_Lh7>$Vviei6Ung(6KEbQdEE)hnGg9^QC(1xY^87z~Kxi!#T4#UV zruaFvtMGvj8khkML;_(7LFfGM|MQ>!?O*=+)eomvR6^Od%G?6^tNa zLgr9Z0bm$Xj3F>@rfD1!n0nE*X5)lCT76JW?`fnP8E4Swii=z;BSbYM_4L?k0mlzp zS$_Z_1ooP%83J%1wCX<)PXm=y0qLZ$hlDkQp^j`(=U#gi3<$jupK4r5ujqZW#7yF6F4+QH7pBA)|ppUO?5RaY`|P z9;HZ3{;U)$cNu!>_wx;M_INAS#qE>I#61#~QoI;bie=4EK#@7l-YtdI@}3SCphata zlenktt4detF4kedrv*pE-H`W;sc!hzlK&7@)pc%m;;l6=N7hFlv~is4!$ONS`f~R= z&d)&{Q>#7p06mub>o*mwiH!A=tR~&8LaInugD)b)I_DPag)~lRrB?%jPoc5E977mm z$cNqMfBg5)|M0X^Qb`v)S$Uk#IR2UcUJ8KmYj0Z@&Ih zRu~926PqYT9H)_(ODS%UeGemms%Sw0h=INEkz!;-GU!HRGmcD@VyMkZX6#QI4VsXZ zw?x!_D{ui>gLYf|jAh1s);I6O=R_Svh|da>W=c_nv;^G6e(pGhU@F=-F{b!EXy*a z1OUsj09cFxnUK&yZuX8uaUP$A;6nwCt4M82YEJ$Ja*f%67)i*BM^YTsiegsE5;z2s z#7g~0w6Z88$!cw)~3W7 z*bF_$s?mS}7^q;)9Q%wq|A@Ezp@D%Bhv8UoyW1X*hvr^SAqDi<#0BDERg~!m^~LAl z+9_&k)e=9u2N3DH2^ib}%2`p?U%vST)DciPk3s(G%fI5wT{@GcnUM8Km>I#T#^G19 z_Pd@FS+7krBiphevnmAZJ*jL)P_-%%nV|Pk7`Se0v%f9MG>uG&X^Mf--oAeM`G5TT zfBf6OzJI&j43HQCK}0Icf+8HkCZ)$$R~X{<{_e-0UjNsB{>Qr;4FE%g27(}{9S;Xz z0VzeUJXB+%Aw?!;q8MUILkb}xi)L5WNP$y~%;W`QSdBTVPS|f|mBp_hSxq9&#csga2#?L z27r1GD-p+(nuP~wgFC3o%BsgfHRo0-Iq&zooA)=5uC5UvrFcNhIb(DNfSIYNAs7;B zQ6Kq=h=Ic*i-_wRc^OtCu~y2Qs;QI$03ilbC{jel0~RI%GFQnq?{p(hA($D6AjY7^ zJ|BVk*>T<<=A1v6l}77O1Oqi6axAI3$yRHTqrs@v{ z5z!h(E1g1j7B4te)VTv99#PeC5O5w&{~V45sA|>XvmRSA>@hhpTMcAR2f+>)uii4R zNoim7d`fd#D4}K@Sncm?mkw6X1h7cZKUe0E>H#c8?@x>3{e@_5I1R@|Gf&-A3rAXmG zDaJ}(1MujSDU4}wHa#Jj2!;?jFq7-5#kQUNdTOti_oq8O1ghAwx775Ga8U&@!Upsq zQV9M))tRiOh`==;F$FV}#)Si@dXZh}Mu{mxP!%6}0f4GdL;-*UdeaRNdFH6KlZIQf zUmer#kI4W$>tPPy>6#gMrwo&ufYpis6)7d>WzNfTd-LJ#W;1OzfjGqorq0~yU#ad2 zQN;Pa^@5gV@h*C)9#=Y0wi#g z4eif?nZR2gyx=Wn=#xyXDSJVmcw-QLzM0nv$b%XRAQ9H1;HlhWeL6SRrk>W}w(@D~ z*auoEmru)gRX?s%R4Sp45L;Up^e3ufqANNBApkI(st>AKMc$ZI#jEy+RZ`@1hS+06 zbCc|qA82w-XBVQtOg>zli9NTLoE41Nqit}_juv8B42UYPU%vSKkN^IcKYvq>Fl~SU zVx&zPreW~#mCOin8j>ve&Ffcx{`%{?50$Dk4m1qOWlDfx$+Ip6!4gk|P0$Fd#zfT& z2B2D)q?BTc(J3b$Eqe}A7gp1`@Kwb`rx`9SWb1aMhss1`hGw|7=M|U@$`PUUH6gbWP%}VgpimJ+tAMMu)?QOv zaxS^#WpQ`7+wSIhIqvta4w+2}F~p#zQtBpj8;l0aJlDNwD#eg%)20s_tROw2Pckm^ z%tRqZ094JOs;DA`9Q6kP$3Ykq215`r)q-G=&|x!Ei^&smC^(?kQ)<;D2q zDm{IKSCb4wR4pRH-gwY7To6FDV52N_Qv$6#g6G&}H!4)?JJm4F%i?BYSs-g3rg4hX zaXudQ``Z+Liuc)=u&Br60 zRf3@Pts)cyBxXd^yts~OMF&6$LBXUH1{ud;N^y7l;oEQi^p`(>egEMmF=zobK(x)Y znZ|(-z{HHfG=#)hZr;6r_3~vyOkfy?7!wEDOvC14vp-HZH}8*!VSvx_l~4!{ySf4oa2)#h}oFFg5=&igo<$fphytm4)+ucWWbo@=b0vy0u=NRWIS zFF?*2$n737kz$?M!-ydSbD9LP`x><#k<@nK>US8mN|)El1QWA|oT|BG#43q0?7y_8(oQWteOBx6{a0n%5Q1dZqrh)*0sFbY52xuCIN7q-!Wl=py&Xr3Y!^LL0 zz8W80)AdHj0nilDkPNFNqqe*6cbf>g2V6yp>1o_Y-NC1=<&=DXj(`9|OeG&x0TITL z5q%k8$%{&9q-VsIRyFav-g>j5iuiv%z(jgZLG3@+@e3+)2!tqdIs$e-*unujM@+q} z(_vJP8!@a|@K)g(m&LWJ_+m9%)fT~-xA`}ZMGZQvxN>C;n*pBA+;L?ub$dE!ZKJ`; zNN6m<9xW|MvBtzWDsb58ofQg$xn{6D+e|Nu`7h zDJmewa6uQ0c-$KRqzKnnmlUEiJ7eVQ>#IkPu1(92Kfc(3O+)fF86rw4xfFh2jxnYb zhanC_8itf&B&wn$ZJ+mlpB^r?z^wsHW(rQA>W>ds__w<+TCpuw&l8)eQUEm7Cft9P zRQC1L2}#YGQ+0h#J`_(q36KnsiLqs26c|;dlp+G&l#SKjlw8P+LtrEkHD{ES;uHW+ zgrpP~A;s1P4Gw90698AN3d{jkBcfv3`nFhA#H@>l`FDN6Goep#=fF~m3*61~EK>5a za0E4gD$Z&M4(Ot{Itdgoy1Ljresq0zzuoVT?gN-GFivBbU?x;2 zT=yPVG&Ln(@7mO+2*?1Mw*WT=>;3J2Rj5#A{Tnl=+PoYg#EYvZDW#IjbZ#*KppIWy z*J6J@`2i6fQaQb;20nctgi~gub{Y!15*F|(R9`(mUr&VS(8{WO&~1y?7EjB~H9}Vb z(Zi*Qcv6r>L~rqs6Dz+4y%bI(rmV58nr*FHg+nkqwIF-&U(tINtDursKn!c&y1B&h z#gv%n=I!f0fBn@@FMd31?*oDY5CSNq1SOaKe!nc)THua|7n|wnlP8xK_-=54ux{_!JFQUHCN%Qi7BiPk$jd@Rj(_zVtJ)MK z3`8tMb`>?RVHI&^ClY$sFk*`|eejkuVhKq}V~FN%2Y`t^+bTI15mg}~fAmNw0&evX zJo^Jg6lr~)5Q^nu>O3Sh%|(2`7ZGz{udb>XfNJCWiVA>v*QKb)q9Vl*nVAELlB&pj zw1(Cbg3Fv4keG1b5ojRh5by3bLktAw0WT78z-be&A5D+0@%lniut1_(5KTqANB9Ac zyrMbabu>aE=~No{E3al%5eetxB1Oyq5kxd+hyf6*{HOkmo_?BYPUo?!zm%YtV`|>j z5Rkr;U3{?A`D3mBMFhHb-g%P_u7IMm#x83Vt0Q##E7Hpvy}{lFeFAI0}LFNWx2n<2WA4qpuhO!liz&y*_-#@fdQBV!bLUD z$K$*l4m$w5zP^6`?4y@2UfkW?>!v*a=-JiPRbZZvM>ONWA#zI5_$&@1x3)f?HYN*SPn0Wnz-Q8SO|+9Spu9f)de z#{&!@dhNsVVil$9tt5!(gJ01AOUb1GAqEbeO=oo=o~nvS$x9X$r(Y3KDQ>2O5Pjx} zs-U6A7j0CPl$?EVAAt3Sc$bcGksB$V{)i86z!mpON^w0Ghi?Ki4YVxT$x6_Q?Fbdw z@vw+F7~;h=KDxe|#vu@bDj4L&ay&5GG=^b-6lDm6TEL{yC!4TS^`(FaUD^tp#9X~O z{?jY(-W+pHW(mp3CPWZo5K{m(wd3(PEeotVs?4gG_etiv+lw>eM&l!%N+B)i@CsS~ zN;M*8p+=#V&+0bf=XPpsR;p!KiCnEMO9!RR%!ju3Be<1mDT}qh+ZzGSXeq?hixk|| z&zSl-tlEpwJunlNob7~3pKMmU4>eKJ+8JSlBnByl%`~#f+Yj&m^6j5r{q(XdON@Nj zx{@PYT+-8zKKkV2Pd@$h7t_UNUh*+#3Orp>0DJuS(I5Wsx3Av3y}8{XxHP<_7>SSq zYsr!`6Q!6w?2gl@(`FjSvE)pIOq^0oDSC?{wjqIStZoH}J2L7cwff#e#1;nkhNDJI zXnWKbJ>ofr2bJ9e0C0*!$-@)$9w{(0P*pFDttB!~3)%@LsvwHQjsh`bP%BncrA4~F z9>k>^0o*JUFc?xIA|KeKDodVSHb#n=iMs9ZX@_*m^-N7cdX3o)9MyivDk7)V#GsZ+ zr*P1>ojkP#X^13hYQn^UNmU%yMFU5iySzNcn2%Eoph`pMw=$#AP3B9e=tttZifT8se^_okwnOO7FuPmyXcP2kYu ze}A4{LPtj~LRfbDpI-d2TQZwmZK+Qe>WIfGT>DLKucr z>%^^n+5fNRXex-c$IkIf#~oMq*#IgDL7Q=ZkXK@Bdt2XAkK0|Pt-^o+ef|U?c+sXf zv#C#3_99V(jiGraH7g>y6rd_NfJ7kTFbXyAimm^Hm~t^tD^iwaQ4JLZlG2kpsGi9s ztk}Vk>bE@FYM?ZEU}efgz*LG55s{OCRaK-QkvH$xSj+&;%xlR=P{UQ?Kr8^ovU@2< zlU<pRPYps~AX2|!jN_1|apYDZV}iWEySK-i_wRrC{1?H;;)R{QA* zV$VoBM&{F3eUHN`@vYH{Dii@S4KW6j<5HNk-N|OZTy@ASoSA^W+Z%+@w>PW;5U67u zOhs}jOcWx6l9@D)n{|}*=TXV}7yG|^9C3q z>fnxbl669ho9%FqM8wX5t?O7aF@{)kK&|9E^=beBAOJ~3K~y}5K!`-aPt4N?-!-bm zyq^sL)j}Yz)VzK3`cGed`R1pe_PcF9&imbb+yf&#dv^8dr=NcI*>8UR*{>;3DP_Cc z3K${Hd7;A|I6Qy;{P({<-rjHTcDtPCG>mCT<7T?NxHN!yUZ8h;BD^XU5O z^5P-}N+~)yHBjZAAb`sk7?_kC0&^G%TQ`b=hr`yHek)RT|6lCEG*l&5@L1O$hZztd z8tI7}+Ly5}S3)!cMOKkO41j&=g3sRsKpz*SrlKG!+6DC3QA&2} zRx@1yx8Kz;i;5NByJnzj#LkvB09TVl1MGg-5i}J=QU;5G#vu(Uc?``6THtViH*el; z|K{rPy0FIJ9{k|?xb6bwPk9J)||;KMjYfQo7* z2E+L)h-jbV`QUFp&a!T*W@WH7@Amy!^9uq3R+Un!d`Umf1IF4q?(jqP9HeJDew9t8 zxGrcjb68aLWEZieNp3r=eZFT;9=@I?AJ+tj04m7S4IjDwK0=CVGfh4xTvUUr7$H&X z4Phcg3X#>c6wIa|hG0Z6jl(n!<+y+I)5{;e`}X$3d&$f3u;1^%3_kv3_`@Im@T*__ z>iYT$iT3-$lINvlKtv`{-5(C)bdgdFArN8CS)^1{FGNqxE-x=~F1zg(0gf}ge*JbF z65}sFdh$5M7?_#Kh2ZLwG9ZMan)6a}CLBUwG|*C?V-5M6wtJ~^w)JV*1Bkjk%2ojb zr$f4bMXqH3uIAYCqguJ7`Yk7|sW&UADLN(HRVM|CkK0hnxfno;TvX(0W!g9`nQuSP$LGj(#PLafvkj=~oJm*~IdFDVI7*(By2MTr0 zX)^=_UhS)hkw-EBz{J|5QY!kQW(~;jnB0m;F(9@kL+h=ZV@ia`L?MDjVStj$GA}BL ztU^y%(^5}gY8VAb9op#J6Kuj7b@MU;sNb%tafem2#~dGE00K1-5ky1+Q5RdVRxdv} z>Ds%kZ31Tf17W*hv&I&Mb60QPzr<&B!>$_Le*ji-3Y@1cr_ZeZZS944Y7adb*NVl} zNUggaI>TA)!Kt1_CGA+fpaW26!4Q$C5K)MMT#*7GhRA`j4M=tRBS7zAZAOcTKm+kO zgh+66`~J;OFK=(&?YH-GJbrk;NQPhkYWlms{rg{j`sp-H_uKmqcehKc&cXM--^W3kld-`M;24+wSy7;4N!j zGbTg>WOBQJIg8c|xi^$!t-}$bnQKyNTefYSV9hBSwG%vdAofNHpSV-=8V@I(%nsIe zzN(l4H+pNO-&FA@&`N<+sc=|r*E4l4n*t!B6ah14QmOea5r;r(n)Bj$g;gad1i-3p z3z~bAG58&JzDDJn0)m=?D68_! zHB|9=(xCq9DxR(`%Q7D!Fg$)lDGg@MH9?gUgWH!HY7r5$cdMC$hAOAR3jl;QmeHRL ztkPG)vtGWlK43lRLQ@;H>*lSGFItBr4~&SdL{lET52uBG!c%Z%Dg40ANn)2Eu~lD5 zGa}x}!W{TCH>DAI5&PgL1ot7PR)s}XMLECZ zZ{NLr`{s=lO+%W-DTXLTj{AexEMf>L#heyI*ze%>Ht+U(Ro!ehh+rm+fM&I)1#4-y zAPz$seblBqlgjKSRgqjoib!!^;xjY+uKOKgBCKR~tVLpM>!kIYL31H}tM}1=K8+Ym zi8+Mem0*TYqnO&W=a5eArDF$Tp>BZcmRhV@0f1G2N{A}he0xixIfTH=lKrV8)JR@U zK`VQRYK_IrOx2~fNmc86>I5Z{BEIlNijM+wB&UaRh=>Z<=uB=MT5G>C(~`wWCUxSS zcD)w}fzeRwq#1K1hge7c*2LV?kiap9fhcG;HDe~M6g5%ETxJd@0|8)6-Y#*<2BY-G(FKubIbGOsH(KR|)e| z>Z)I+kfL+j(EWr*vdDHjnpk)$S

|JVB|#Wop_-`KgMCfraRIrmGQ4LordcEK6CRm9=EgMAX!BrK_#T zQ)WJl#xn;sAPO-qSw)pOP2(_50|#1`EQ+8~G9ciPQjBRSfhg5MJb z`xnumPY&giHG!3%gjI33R*q?HceH8~wLrs_jkE?)D+7Iwm8^r8ZbAA7@GRd!CbH`N z`~uEEnd$)LEFtm)$OD!Jp7hos^5*MP$qLbZV3~`W#lSJfz~Nx?ai0Aki0Ht}FeFn; zDH4-cl)%fDXk!Z3o5AvY^Y-=4yVp1G-bkJwKf3<-qi3J}`m-n3j{$JEKiu!O?{41T zy#Mg-{X9%ZLUf{u0jMY@RI~f-{oUPN&JYs}!(e7Pmk>jYA%sAPf%)p{Y8XZYjN$I5 z7q@TU$oJoW|I1%|@;93)#%O|Q0@`Mq0|e&4L|%tjGoBT4$x=i_mSxE~Z!S25NJJ?{ zzeV1C?2{?T8}Q7mMZBF$>gjej`Tzhxfh)uT zqOG@HPNp`eg7BnKv^Hx9pgzt|)oTKhb5r<71nBfFP%uveu>!tC;G~xItOZkV8a^@i zz^q7N4jkC6q`$vf(yiX%MF9ekR+VQ)AkBH5V*)~-KLPHv%n%{O;KH3g2@)&FWh#b7 zpeSmB3O-T7bXoE|XFqW%uq-eypa3yI5jY-z2x5esK?)RU``#cgU^+5y0Oy>G$4hNS z1ytzvtY6o#{eLefHSM)?JFNWeq?Km756GcE4hRI z(+x!8+LLZ4)A%!1Z-2ALNBzhrGK(jK4XW~R-{t(YifDk8A}X;}b3}y$kJDyIkq|kM ziU9fv17QFYQ(5eYibKHTVY$D3|K_Kc+uPfV&F0s?{F~qX<~PruJ>T#4x3_omG9QkI z?QVPX;pR94B64u)OkI`*nbSC`%6@-XmPHL>O4G&00E!eMO5=ctD#C%UFRwU+F^%`v z_s89TzIi8q`R?u0$6q~t^5oe^Pb8xjzsE)hXu!ls-c)_E)QD_W%q*7-06zVfD8!fu zF~;Pa3r`{dflg7Rds7oH!-#u$=ugkPE<*_ZbI301NuD-fl`aZZ(1e1pLSAw%YO1QP zU_vc!ZDG)9Hkg?@XKLj|PW`Jc;0Wrc;aa7hz|fkhQ1=6|wQe6LYiVsqZ=FgA-WlBZ zI|g7A*cXyeYlOGS7oK7au*Q+L$4?O+$cPF`J-CHt{rh$VJ?+E>pjcorrPmeY(h`g z7(frj8KHKm8VB}77YWH&REiWIfo$3)0<0=c&}?T9DDd3aVO^c*NL4KyHbx#1i%QP9 zZhA7$R>d7tmq^6~Afm#<#_7z6#yC%^dp z?|=9Fqi3diJRW0;S67#B-@gOIyRE7M2X-YMXGu^9r4#{J@?vH&0uZ{Qhp38bDMD0u z7*a}MiZP|@%j?awxx4*vcl-TzhHt+4=2yS`^vR>EVMqn6Kz41%7F5;_hlUx|yQHEq zL?j%B0WYu8kV1^zmB&?|w}K;x0u_z+1XEnrkhy9ddH1%eF3aMUsP-xl6Z+5hYpP~W(DFCkQgq~| zAE?vP0tY|>qE;>LYmWecnL`YtjaqUFm>0&E{fAX-M(czy8%>zy0=`o7Zpc zfBwrqKfb>Fhrj>3;bODj?TU}KG_+LPF%g-s%hTVjxBp>^2xzFE0l-8Ve_VA z>ONUj5j2HpS^zA@2oX^QQOWY<7(yI21C?b*R+eSI+ud#NZvC~(;e!qSrF~ zgw=F^INWb{hvU)Ah^y`aF^3pqN;ODUn5NC6M~`C+COVDdr@#2bBp-MG`r@bj!}t3y zKL7mVXV0EL`zXd}D(gyCwXj&H+W37NhLcpiSu2fIS8rY6&EYUJ_10TOFP0i1h$^C$ zf&j2A%d#vz!!4y088;YGoKlLaTJvl#Kma&Il43A5B%&M;Gc;hXuL&u|>uXSjoe+Rk zi>YD-L{CtiGafjEpz2cfpr$GYhQ7gZH3qD&B|=YGN-3@DLcIv$LlKu{3CybE6W3LI zq>(6Ujlb$pWI`mL4G63J-5VJR(LtS>77(E!AU281O6XD(GK(>6rfC`nBG6nbOo*sr z%OWbAmn;M#FwdX@s&LrDJXcs`S-=!H05b%Fz`zWIsKqGYX0svU=gzh5cEDz$v8`lo=C6 zM#*|O9EkN|8VO;UR_>J!$5#Qrc$miF68;M{qKKw*nWApg>Sz8 z_M<0H{?GsY|G2)ol$`Ut1fQ(ff;ewNGpy4vTDpl+`5&$oRIA9KvN-TpL{ywj=jZ?u zA>pzt6*n=9K0-*$HA*UsH!lVU1RlptOoN)0;*h7;v0##rJXBZU$6(9sLNCBoPjpHZj^`nrhY-jr1G`Ruvyd7GsEn7-Db@@%eCg z{Nzz!D*31doQTCkGJxIvhx@x*1baE}zxn!$H?Ln`UR+#VT`c){ocFI@y?pcL^)eqG zU0uwFePm8CTtt|jT##9w=fD9}RLkY%)#c{ma&tk5$Nm2O&HJ}+-`?Kde)#YqhV<K<<6Fy#CUP7(mfdQtJ#9&!&-oAZzcYhB^22ey2QD6?t!<0bn^6DyufK?s= zhzU#|KYH}r&pw;?`~UjSAAWiVfBN#Pr;i{1_Os7is~&nkOM70WNC;rSl^wx7SunGD zxBVriMG6xYDLEI_VrHdek!%2I9AXF@tAB8TA`Vqo!z$>is(Lsc)i4!B*8^w`oSwOu znajHZAVAJpD-z*Tqv|B{(^`V_Ru5>Z8qQ<`0O`!Qx-w50KD17>rg!aY=JZLYE%m|R z{kMo+-c5^$<(!wrg|dCMifAug+v#Wxmo!mPj-lKIhH&h_q%s*UcGz!YCi6c``fp#UfkV%xW2x6`t;GV9CJSIciVYB#u&D8 zCwZ}y%F*===x~_lGaV@SC^YSFNfWJnV0Q$x8H7e+pVg-diB%(a41FI zy?v*mSC`l0I02wTA;d8a({WyIZ|`sK?u#f==nSo#DG);-Q$(|i z&F0s?`kTXU`{!>zeEheFPls@_RV%YD>=IoH0NH5S8P66txgSN(lfAyv4i~c|6^y@Fdi= z0RZZqY1%a6E6U(!zZ&~eRW-mJe(geP4e>F$e3`?puEpna=*UQ|`4gGd%yL#$H1M?8 ztO`v701~OSjuW-cadL4U?DG;A(5h&Ybpv>6dCM&>|)>DjZV7Z;P1Y*xlG#mHugU_Nkd z$p?{p=4G5X4!Y#sK#as%gjQnXbw$*6c>>ZCkF^a{lnfR;;HLbLRhw%=y^vAu2s@8$E%!F9Iz^O@z`l5FX$$iv=FsdJ%iDOFs_1NUJ z4QsUmUE0f3wOn3qj)(0J-+%Y+?W@CXdpvCSyZiaLlRWS4Z*M=m$;-jYkwFk`f44vG zUZ)fQR7(!1pjnn#L~i$YCR&OvOV*+>4vFIR)zy>7kB1o1V405}KHS`WxH}%_k}KN2 z+wS)JdAr-*-*4wdpL{eiv8qWfMRZIINO$+!*Kgk5-rkA8G=#v+fv0h}y1Z~Wa~x7i z(Z}=&7??S2aFMbs^TlTK_y6$sh+ls9=MUd~`}*;tuQ$_ldAYIHY3%_AF(KE|=7Y$Q zn0+f6S_LUQr7sFZCJ2P~{}T3Q&9+_FdDv*?Tx;#-^tS^*G$aTTq$pA%DN2eQ$&oC( zVmXZ;qnA|vRv!G4NGZLf6!{@>*>c&klyVfArc6o#I}iW?-1hW)@72sX#>m5%bM13U zSLGB6xcB0obM{$#&e4418{a2rfTA|#l(xGxjVH&)C#R=f*EJzH#T+9Tk_ey~QSd52 z4H2^o_MmGOcoYc1gO@vZ#ip53DyGQuhJ>$fhoXZIm5U@lm$CLAwjcBaW}`w-oB`)j zdkK{(hne3Q3+zY6{{lE%#U7Z76;9v)h$1?xXCRW5Ar9Snq~vHi*LgQHBSD&qlE%Jz zLI5{)1^^LJEw7e{Lo|g15ExF5kI#-4ku`E&E!x$hT`aoAvIDTiV$m(4nWQvjNg-g{ zh9;N<%OVDS%4nt{dAHr}`rT%;xw^XH00*)0>`WXhM6I(*i_f{-kO%}+)Trg!H>W9-Tx?QM9|&lno+uj zBn>ibEDv4eM-T3WK+m5)d-3eW$?36~4&xvySrQ`0(3rrYTf~MItD^^J_g{VV%6hpr zF-bX%({{7HxxTr+yt=%+>~{kqjpHb)Dwf5z+uhAZ`vKMmi7AMfm>8k~Zg;z<&!0Vc z`tBqeC!c)s z%A-eZ_sDfpLWs_kgG$_!EcK0>m%-3C$rzC-pj$>{umF-Wg=mNY*?h|&>yU<<>&@-9 zzqqOdwp|rbDhQKZXsvgZFkd{ zBtyz@Z~!9MQSj^HG%Ho-xq3W>f*e&hJ1aB}u7(h`)0rEDJ3z@knt*S3FcUKu11BX? z=3tfz)>ZrvKt#w~R>KK`Wf{R46C8l<80E~Skp5k$MmPnUkA>rgu`E0#*e*{)?H zPO|st!h{A%+;UB03@+DIO*WMXB4Zo*@^&-sHvRTy*+teMc~~zS!VsDAG+ey6e)jAs z6SW~693GBo8peSLkB(06-+y>`cyh2h46zBJy?=Ukba-_2;^O(U=iALDr<8Lt(VTNm zIj6MS^&$X-Y21oJPHF;u54&xja#nBnm{fGL+r4;kesz7F60Fv|=-O_vJXjwb9~~X6 zS50UT0SN*JpRt;_SsxH#2)tM>Hn+Ek@Y-vyr8K7LZ=OEufAr%Y9UiU^57yH(<(y-T zPA!@5nwpn!s4sbd0&`#rs@VWSY&0kEX$3Qzu{1_x#K6G-Z*Q(&TwGpW-?mLyuU980 zC#R>!ZEW4qxoO)#Bw18VL@|pyy^CtoHci`r`#sOSDq#qr%={525p^YCU#>AVQ78yq z>6d}row82z2tgqP7DZA5tbm;qu7iJV*U-q20|&qIR00;Viwdh*(T7D3SgOk91cHK@ z8ddRnM_ZhjfoQy^DmhEei4-}HqBz0 zrs4AP;^O>82=vxluRpqfbpHJDv!~i`Z*Q(QnkUfZYSpEbpFV!}$;Vqz`0VG_@4WNQ zyI=Y;AYWf!?fU-Y^z3%0P=WveAOJ~3K~yuZzj1tc3c!RsO(_uPaq9bF8Yaz!%uWcB zv*+8KKm_L3p9RJd5P+B+d<8@;G#{L%X_~Uv!-t25M@Pqt#bUKwwy`PeUtT(!LK$@d z0H_KPwr$hzXiC$;diD0_-X8n@y}x_^lTV)9zxUA>-gyTAhGCed6k{Obrimf2iyN5_ zOl(hoAfgx}6Q^XZAp%xcD-96PP@-vPKH)?&yS}bag0p?{Z!pQ2f#uMS+ayoa)pbLx3`7bM6VOaev%hk4 zkv%4KPOC5ViRSVHgkY*v8)pM&)>l0jH7FAIWiQFudQi*c8Jh7i7!;%l9r`gVU?n(D z9z*0nNKz!@)bRjFLASm^4naj+z%2yMC5DtIZ)UlOUsv4|1PaW-m$em14D&c{H#bkx zxFJYm8Vq!thJKgZMaWsE$#Mcj&73A@Bt~o=D1V~fL0H6XXOG>g>ED#-1aWgDb z^|34f6vrNKhh2F$X92DpQdQ#W>Aepe6?&N$ZSMXrC~yYd1xLJAbYR6*ZOluLoJ$P4 z6QQU&9K)S2_5f+8d%7)OY-{r;>P}Mr2jtK%WhronQ+bp^ULC&Aw zJb(Udx7{umi+d*ruRc1vc;&%Qe*A+E-~Z9}_Bu^{&TCXTzu0a!aC`u7z46vJzWyuk zeBs@G7(f2_lV{JKq4Btzo)72S?U<&-#A83ac=mMchr`u+(JesrX1Yo#`4ADzB7e8@_7#ff4Zg4k_)2<&<0z~K*i_??SljCC!+_g<`k=HtX@ZuQ}%{1q-c;>9L zei(LrfB)?4-7md+b94Q{`{y5i^wH_b>4S$4SftJY&T5PlczT~o1??SMYq|mcLxUt zi*5mcDy9a8qvyxA>j258^@i>dNJto%hoSc-qKS>5>xh^$Ze0D)4-5d9li6K+2#Rn4 zA-WJcB4)uUO#r~mFjEi+Xx=g_5>Zf=_8nWfBjr<4otto*sgKxAu`n`>7(qO&hgx@= z0fe$3>f9y)fJjlz%!HBM_SAn4m3?RK$x&2XaL3OK0|dtFo6Ao=-K6nqcl&G_wt+wa zh#(7yLe`7~;|M83V2})10i;k;MKnfUt~zEGk=RloSg#ic2aN$_QA3GTwkQzy*WXoZ z+|}F4UJ?R0jo6KAxYQ=)sny|@)?V&TomPZVeeKfAf#PLPR0zu+(y17LBbEM~1OE(# z#A_3U`EI;~9?x;a>KmydzBZv{s8H(?mB7JAHdKTQnTsC<`>|x^7`a`vMBsq-I1b}9 zvUdin<>7j@XoIHl!}o_KGNEyx2lv*;>v7dBSIhOVot{5CfA-?y(@#FVzP!pgzyHGz z#xYMxy0&}t=+X9e^XX4NK0Z2n^x)yqdVLLedv&cUZQFKjiwf4-I8G*j3~De=APNQ$ zVjG*5i2)3mvdHDt)#b%yPOw_xy|ep=hexaBiWu9ri5$!q?F%P(<_FRI^oZEgLq7~z z<=*}KZ+-T&7Z(>7mzz%?KRG%%IXFB7#NBQ?jN>>><21Exi#}u~1!g9U95AAYYZB&i z3B(K#>QKWBObIEFLDNtOA;j2qi*~cwY&YXL?zTHs8O8)Ro6Tmo-43_ge!W`7*bs%L zX~fI{o8@wiGcIO;%;;fD^K!AAOa2gosmnpgjLnriWUebNer`-m$(T?<0gz(|F{)`G znmY*3h@yt<7ocjjKphtps8&^S7S-608?FK1UGBN}1w>}qx=gn7qO-=|WIh`K0okvoM# zp^ILSd;K3`q?(k--D(LDF$7W-Lt9ee`-R#f^sU3Fxn6&MdCugS*AHDL_o~XfUeQ>ZoL`0@Q$bnFH{HKvdd|-L`-7`02&@MF{Zl!Gnhn9xS>p1df5r90^#+(lQ_4BXI8NK` zE;j9=TP#=0wrvd|N;Bm=jAPqG_CCH!R2x8uv2EL8b4Af<1LCIf?gL#9trla(S}&W; z^9WT!111tAbg_#&&yBF^Rl8wY9sYR`aj}Bh-0abSyWz|;tp6uV_Wvt66SFCZ7-`7OoGu-ZC>4Fz6a^kx(<8rilqS0HIg1n6d#v*DU}jM(q~Z zGz*tOiLqslOc7?TAkkvECc<&p-EPLCqZngnpjcjl(VfEu04iWq2wtvehkK3g{XfBn zWp>x@bB{&ue@o1&-s!~E*< z4;PEYYQ0K+#YM+)1ORc(A63bTO0x+C7I3^5iI4yZ{5zWY;!i2dfswG#BB-WIWXah~ zU0!sUrX(7twCjg{7*^}m!NEb(w&OV7ZfyyIzkb^_qO`(S*i!s zX($3#g~Ux&^NjD#56!CKmVa4QO(I$hq^D;^WEdZWG zAuxv+J&rlKUL-r73<&djk@u})T2v9{c0d$N1Hp0$XJ;qfq6JM&(*~wCGLcD^w(YWx zh}<-Xgscq`#Tc6y8sea0DakZuGq(yV+kiPu&z?O=)A07&j~+cbXyXE@_jVktw0<*S zZ)#Y&I;}MqV4)@zDdB+o3%~!Ve&!dRg0PI~(HSU?4wnhMa~kJ(zt$C;Um z?bor*CAU?x3P9O*_cxnpe_=uhK6LkvCYBlm0g#vi2Y)?8XlQKg$B2nNS0G{tkqBl1 zO9wJdHA_;=s3Vvx7mXQuElmuFw%Ok7cDpy;dgp7u{EgS&{Td*H7&HyE9iWw6sNHT% zx*Mh}nv#rT>W9$`mWveuMUK;$$1$aB26?-Kae|{m_~N^t|K_*8_4=D{UESV{)5Ju( zad`6d>DAR`*TJJlj~+dGczCdmq0DXwNkzyN$q<>!qN>)en~~MbW3Ja|j*}tMtFOKK zxwqf`!S~<0y1w4-c1_#1ZFh2d>TXrL?RFf;obztC9fm%}KX{v2D9)8gFl|)0Cj_CoD@w#AzC{WFp^h2w+}=b}>Y*mfC8N zvxpRDYpW6NZd@=^7X|Tk8vp=92Wx8*4z8Z;eeuf)ANH4|q+iXFL!nLHB|6OAP2tWW zSfIW70nPwT*^dwpW2v- z3EassGUpgWjHNs?8Tz5$UFEzp9W@UONDQ0Xn~U>vh32)_UVr^dUxE9NU=q2!)(nhF zZG<)gBHZq-H+?^515&k|G9fM&OG&A1+T-Jsu3Jq>ZZ^Bk7B*WrSi@Jp`tEQ1m%sVe z=ict8DPLZA<92y<_5As>DaqN{@vE=Ca(r~uG!6Rt2@*5AbHZGOT1^XxXaF%pC%+dl z>e$5Cm_o|=;PCMEH{N*u;srAAcD;xq(ZPCsc)T{%zYA-I)~`yZ#2BJ=h2b(*F!%@sgG5gdl$=K4B#t>tVE zv?k=XX_&dRy*@AU0gBG~u<%6c2``IXsOl!W^SKg5L=nO4x*t@U0NeQMNDAi z^fV&IfT7G2YU6{5uI#BQOr&)X;d7jtrD0B2{`#R%tIDf&Gs9^brkv&@YOZ1l09a&2 zOboov^io0$zyd=PVq^xDoYVvjEJ4}XN#X|5t`z|ymPFjBAd5)`(XzIKW%LV@T^bxP zz&OG*WnU==NFLP?fGR)PCr)aD7!bUbfr4>)KY=8MVP6gu84I_|+pDpaA6qNbhehKT z5etX9cB`VLU7CN9(j8&D%1Ye-381%>^Ky+-Nah{~GMHHip{i-uG76#E<&^$NbW+oZ z4Mm>cOG0E0KI^wyTMBqYsnijtNmCyeD-~O-O z`NF$KbhX(K6K34(b}wGMxVgPuuG-Ih<}(i;++TF9|77TD4C+iuBETxChX4?WfXM3Z zoYw^&PjP+-%&Yam!O_v!4^N*x_oe>V-*~-SE;)p@ZBtI$Z5d%|PTA-8fB+LSPt!=D z^xGUlN^R4&=4igEcSAtvYqj$eZkotMO%oAJRr+1u_q!}&YNV*7DW&ahO9(lqaXdgY zM9@aStZmwo=mMLHA3g_;Jf!BF!TT&TGh^~KAAma<6?{5_m@T0Jl|>~jl*zKJAXvBZ z{H7y$ay92b&WrWaR4hlVtaONEFPf_2M%C6fGcYUINWCnGr2!%&5uK*VM>z&yRc9B} z)XSYhSScsnuYO<*1SWEGbz?g8+bhWfqnd&$Oc@YCB+q*^zOysSwh#dkv@H@+PC^7s z0XsBNBwcjPVqty1o2Eq*t38m_i;9H|hOU(*E;Ny|bMR^#1g=<90g3|$BvcVkCLV8~ zFzbtcwxJOsRSlGs6MzL}gs>;(J9F2cjm=vX253nB`)nXw)eXUvz`%vh!4Pr1K4{w| z^b_!4!?+uUG1<{s!`%`HA*D~BJiWTUX=2N>cA;SivF(;229K~)O5>Ef1-$vz>2Lnl zZ+`LJFA~S|%gZT^$f%~9-S+zC1_18gzyIjbql1G3Ch{4iGZ)MZFj_sea{?qP;>_j} z9#uf9w8v(BbCJxzSDFn{vg*i; z?CT{&UDq{DTgifM5ht!sJ=j0E};sjq?AO22m%ou959iS z>%I6DL^1P~Rzg$*Fa@W&djW-@Dgl`gm`Ex;#IG)>AwdZ2LjYIh01K`@SrRTFK+Tjc z0;HwxbKO_~G}WAi-O>O-05BA^(0dxseueC1Xr``}?O+u6_fVat!uSGHG_LcWN<&s( zS9TAu`A(>+qG{7$PU*?xCu!WNf(dwTAq1c@&8b-%5TS{HP3ee0K12AS}L`y!MQ*^xAd?kdMrd_QMn%Dsa7*k65;PCK}o5Q0c zSS4}CujV;Z-+?XK?^%f;#G>A}H4;9#Z*`w4yE0N@NDEz)ylXyAe`gk(^PM?z98 zUWns3#-?f8mN_(Sn{pP_N3Xt01W%tmN8+>7Q$kE>%#w>$0-|OWNuYDmwVZ2K56m3K zv7gNqeYi`+AvV}4Q4nxD9&l~ZoRc@$#28~R)0{*^NLVO?N{k_;vES`>ZR@xR0;o_7 zfrDeZ6`nUmFt`5ngYJhF5z7^=zT$WK9X2!1B2~3(UnV0GR6SRpxf>V(DT+T#P)%6~ z*+ZMEA{6EGoS{g*&VwW%&}Od3#gavE6Prj^m?8uYBptzwqT>_)522?E2mH?e#cLlJhY1o6Yv} z>T1gA;PCM5?A~&@V4|Ed)-v<%2VvpD-i`OQwlt{hr(({Kv*fHHs9Dpshet=JXQ$u% z=C3?{^7ude)qluhH`ljK6Wca!w>K)X=vo8=Ld_;3rjk=mDS1Zq&>ur=+oowE_)P+G zveqUI4HszG4Hcgz*YhY3| zFKD0=7eN)vmRx~63rcGSw%=Cuq@o5)!C6YoKGiN?ro19h1gpC>hyaGFA~|QxLJ{YW zyMf~lkcfBj$hq=DD{5fAL!;&*b?zDJ5?M73zr6nfX5ivyuE8xCEC&K+Xks)5CO}X^ z3n4_e2``GDkaO~1Ghvq8wy|lVzsQ`D2rxn0#t_)7cx*8nQ3fzmiM(KPW1|Z9SQ$c_ zfiF+9mD#9Of1>##{Y6s7JGiJYodOAVhg&70t+X0sQEnN_lLA$ma_Dlstu zN>-KZc@M2{dB>r@y1cqLx9zqMF~WKc33ME;Z*Q7@jLl-XT0jij+nX29pKWh%PL~T0 zxI`3UoDZGzT$#gz2M<2~`FBpw&iY|Izr0M6$7$O2{gm=%x7+o7*LC;r-#q{Z$@QzWU@b zA>2DVIXXIg^7QfL#l?gBXD7!;>(x>L#ULf=UF=#E5nRV~n$kE9O%r{P9GfJ33EyGhMb@-2aKvwb;WnnqP^W5Y43%Fy?oU}Fd|FrpD7669=56aweuhL#RkI13i4 z4-&DStWN1h!MsyHPII@U6xH%b4nQ7g_!{OrL(&~X(7pi ztMHYW;M>*e8Cpb4O;pflx-;*m1j`a@n7M7+(tXr1idND-hfuT^Yb`UMr}-@xgISzy ze!s19Jg`$W90M2lB5{pxZ0L)i% zK^4p?n(PZAW-v~pFLMAunuZt8pI%;E9~_?k;#a={o85bV`@Q#n_yf)9{=Ku+Vkucd z3{8x_QWZGZZb!riheyY!r;F8cOzHgcsvpO!I;P3Tjbln`c6@wt@7}%DY7Jm1C#c2_ z^GPj_5ny(g64Bti8&fqE$qrQ*Vq^|POl+!Yno>$J#G{AD4<9|sS#EDPH#fKE=VRNz z;o;%Y$?0|&KK$v$ZaklIzPz~sH3aMXUQ#l(5W;%3;@F5}$&%94_k*KmU8gbToHaHb zAZ4H2AaE#sr2&9iN~tv7L`2y4yK#iWwJo|1z;d3_2T^o*$+C>+pajRmh zW#`a&+cYr-EM%(~xC9hY>3ab%VjcRPh&W<`DKLf*(>O><%Y&tAHcJS$=sHBmd31ak za9{k@M#-8sDo{f74pAgYm1{DykhA3E?g#88T4@>Pn@UVfP187q0RWMx*dM8zhXx|j z8aw=*kep`cU#r7f(YiyWW?-|Wn7`#rlnm1}Ow%wAAalCe!U<1lY4*p(T5*iUtirkzE*({>W(|YqLa`rDdITF z=5}Y2Xa3PR2{Qu{>_+4ONS@QncA{V4GF&p>19n1}DNIuuhEc^dO4BrL+ooxZF$_cR zpmNu=fk<6l)!$+@uT2VAa0j#4rzn6aC6pZ9I09k6%LrvIvrklR-XUV592gbEJ;DqE zhYaR6sue<-^*-!w!RWsw4k{{=nHhTOwbH+)-rHWbq9AV1+0M^Gn;9p zO{jN+YG87>UPL-$lJ%-tEI6k&gzjLqRLv^V#K5ITj6~@BoGDFxpW3!1glU?{YYLMl za@VowBr+iav!*nL005FDMRSBspd!;V=~@M-&TpAR(?s(SJ(L+OAX0@U6bR_$a>Gm&DzjD%2naE&ncA!!?;F$pc6y;9D3S%Mi6>R22>=8R z>?AHQM9R*-EzVnaGQ*u2Ga^AX?t_B$x+S!vl)SU^P9EKGhp}m5+qR~CO1*005Lc_k zYI%zwDicioZkKo4+a}U05AVJ5=+)J-`_cEGe){oGhu!X#`wtEe56x^g!~<^|RVi?Y z!EbUu40+f0LqASw%2`xWl4+WJO0rliLtqz4Bw{3+w;YKhA!><|cK2easw)o__00NI z%bd1~a)%gWPMghkoIagWdh+z?IDr9784iw)zxbsupPrrFd-&*2|MXA4{q1jG+zy0A zUX&0BU{Vm=E{2@O;r1p+hJynJfN@B}PF$3f0vsOm!O^i6hdpzSc;KS0T4M^hPY^MP z+Bi-snkM$s7dXTi5sVPWaSY6&(W8hHCF;4-oQ1gvsm-t}05BtS^lX)Lwt^z?qe5mC)|nJi}^LNJr;dY58qS;RGZ ztS%Ssu~}b1M)K@4!?uV>1ge_z1R#e8i<83`gEWn;R}ImM$xM?7s6yLB$(e}|{b>WD zFk4DF=d3D3+B7x{gQ_)M$E?%TPa`ZkhygSrqJ`j$Gw(>|0j$q7fCxB%nhnE{BrX@B zxQbMLJVsQ2z#)Vfz1?VHL7e>2&q==e&le3e0Fap}gsMPASgq6oTJcooDvVSaK2%1? zD!wXSLwgYozZ(~PJY2cW^ID+!XwoqSt!awLnWBDT_R)=)zzqtRz_kTMkTB;AO~Zj9 z`!lf^!#DzfI(n;`0zqWz+6ZWphPL4&UY(sjI6OH6fSe}D>E7ANTW`IwSS~i3?ZINf z>ve7S$}Vq+vF$n_(y~J!W14c7Npws}RGTJ-=tj8{(OeZ;eMdcN6juPMyyKc(SzO6Q z)a|ug?*|a(2M*@RoXo86cWQ8UcJ}J4=U3NhO7P<1^5e%(#;n^R^+|7bV^TmY+cMs= zr3r>S@$F;+mLW!Hm5z^(X&5f9uWv>G03G4UR*tXE50B#d;D89HX`IH<0jVa&wr$KL zi{zAw1D4t_j;0nPjN`P~>|%&r+kmM`MssO(X__Vw0vNezIASi!8g*w#ZN}`Fy%9Dw zBVq#-QSdLG^ZR}P03ZNKL_t*bQu_=uF&YrfG^LW{{h1e~#k=!(A|G=(0kclE{JjPM zP%{xpIU#|HWDzFzjlTLq4Zv&U%3CvoDuz&6{Capx>tu$I3AJlzy;_8jO?OSqAt;lj zl)$FIfS@513h2BLWHzY|(=-4SSF)}RS)}iWaU9x~kB^GTPS-_ZbECzYjLUq`ieU@` z2ob9I0vCxC{IwJqe$kVkHms>So z%ifenJ|ZI9V;}yrQ!Sp&Yx@e`m>LFO&~{=dYOPmwPk(-?+!YZ-XhNLnutWsJkdwN! zIv`WXB9>D_D_nU zdfU`CyW3UUHEkQ2Ql0=Xt6bmQ+}z$8Kx`tr`@pUTaElfhrzuH_O$;$Mjlbi_=np&$s}Jn&eD~tL0L`kof52E3ba$GvEI9x8MKZ`QNe(G9UiW+K~1^PJAuZORC9G8AQepshC!z|9IS{)m{Z>m{cb=+k)nMm ztw_#Y+YpxcYD^KrG-=8yFxPU!%mk4TP*vG|Ly)jYG^rP%t^ykZ7qp}vn94)5X_`Wy z7$f+c1pxp;V68qJF~(UU$Xl%#qnf3hUC-aMAR-2io*MmvSh4vdwj$6r_h@EnfTBVr zXPc-Ly)jK-iBOx^Gz|n6B17nNo+g>lgbKcb0O;{GSnwZq9D4w5ngD=KnIqyDg5=4+ z|6@{0&%_DP={~T4ab+V z)y#p4!sHWE6@7V#J5Pd3q>zfjgi3e^B8FI@Z`oU;GnKxBh}daJekA7S?qhi>)114L zVDkI}06Gg>%`bz{x!Gyxy{aJy<+bf!s;MaxrZnw#8%7pMgwQkrLBTRu3PcnG5`bkG zhu!AZG(R{yJ3BkQdU26*8pm-M23{^)q&AG>?dJBwk3MSJ?v1zJ0>qqiKMd0}4dW!W zpbas!ZR5Nfhlb3o>i89{F|1^~xoc%6BuY7(Wv@yQQL$(R*-MAj3R*BUC`Mm|NHL0-KR>H(fj$6s=tNZKODL)-B?}=siwY4dBVm3oa?Y-s z1rW5MjS~V5gLC#+Rb030 z;GjD^TwPvmw;K(I;@E?zq^umMj>$^3zUTN-(OW@6VlsE3LSm+h9+CGcVMaQ{UK+9> zVyX0sc8deB6*3W(YBO$Nm6`IA23o1*{La_?v(fs$w8S^%GPq6vk^YjjDpeI8MVbF1pU;CPnr7=H|nXK0G)){tAErjMFrXW6D`Q zQvtXl3H$l0Kl`lG<9lxC28M;!rNl*7(*WGSQ6{x2XzK42!~VB^j0vG_8$i0fy?y_K z4=%5+7pwK_Z@wY;@zWQYZ@kO{J;=_~e?}_dfI4FZ|kX z{q{HCeB*1s`s?5Nd%yLEfA|Og=HL83x94(k^Wv>H?wuU22?&sN8dNjgVJNt|4-=#$ zl6nuF+g-oz2c|_JGPN{K6q|9J%&Hcr>AYO*2VK3H0kF#D<4TG*(-54lNN8ZRmn&Bh z4?BqD1ixYEbK0AV%?7z4P>FzLQK!6qhlkALOErEmH}4Rk^7%shHv)arxC(?o0Uhei zGP5d|U;qjxV427QLkz~4z(%ks=RtKe%}fX;glOp7k7`D0W={M<^MA6Wlv3NG8K`Dz zVqnVBIl}}1rdJnNR~P4~>TSFeUQ}(GlBkjqF^bA&yX}W@b)X?eHApGv zB0~gOMARH1B!5%DoIGhR6EBieW}+BhGF4!rz-+}!!ExT0aw^4+LB%F3E|}6d46%ue zuDjiCKl5I$5n^*4N zKRP_wZf}O&){5q+XEp@`HJB1a20|Fd@$&L&(X}yfHR@sCAC&$16rZhE;)Bi!mlx)f=NKyPy zGp-CuBB<zI%qk5ma9~6%W(apICid)A=djE&2Uc`_{dvuC1S)S0 z>u7NPbJv=tI_GyO#$w%iC)N}&r0P8G0}xTfsGu`Tjqj95$&yv~MQ77tr5KbK?*Sjt zfgT{tl9_p)MTu{Qy2K!PjVFi@7#3Xv$ESf+83PM)TNBSczCnMHpa| z(E%=~RjKc=F;XA`Gm+%+plM=Y2Gh%niy!^)2YsJ@>FZzm`q#hy*Wdk{X-WWql`4%` ztg4vVl^+lc!99!}14atmwB5mRw_LBEJwN}^Pk!=0|FeJg|9TQ?;rl7fAs6W z{X1X(m2dsx*S_|LfAGJ4=i7h%>5FL?K6&HShvYxvd_NI5n5v}-n7~Oz!(*@^E}9QOg^K z=$FKo)c{yjfDs8ra?ZI1$v9r~mywJ$vx*KYr(XeLwlN zsreU67hd9s`5ImgC_Z+b!|NH;LH-6GWM&dkW>%29Q$ll9dL&0ZD^=Hv7p>bs z2FS2Cb#+9aMO;b-LWqbotG9ctJ%>5n$14EO9aaOAGjIXbi~xP%N>qsvtc+8D;!6Mk#x=WZIRF5b%ece!BoN%$-Fx_~V_-O310hb6juW(P8NYLp!Sb9`DnP&B zrDlFP2zr5hmy%X!O<-KScy}y0@>Eq39(Y&adDMU!Bs*ohjtUqz& z#ot5$%c`^qvF+N$;@-WpgTtdwpFH{C!%zR{kN)U~Km5^e|ITm!!{7bgzxSKJb?@HU z{d;Hs=Rg0GXOAz_usK@O!EzB?Tfj6hFP01DvEOMHDB6q)n@#`x#rb-*rUP&Bj5CtA zdsgP<%wz_>2;!v%Au$IZf0%DEPZzYJlcVkm)=fFaQHG)rx`DOBjN=(Q+lisVE|o;hg919swk;J`_OA5}*KR zVc!s-kG;#(#Dj=B&P|94SbUcZ0ASYxGaMauDan))GYli7tji_VMMN+I$qEhn_$ClL zj3`-({Aq=&ihF?+k{gt&VpdBcj|inYD7{<-tLNjHxZ0&g{>2-fo) zYkoesz@2Ug=S7D4rJzQ^7^49saoW4>aj?2f#DQasF-8%ca%y4|V@z3`19|6El_ng( z`2q|kY6@t3Ft{q|ib4p+R5DebMlx$cXaY0ZIP}}iX1zR!p_!&hlEe@|i#Eb$yBX8a z4MhD&@ca>*Yat=UIX(Kvs#cEZESj`lQgq821 z*xl6OxR?Pvc<}JSqgQ_6%U`~^x&8Bh_vasc@Dl_eg06{<41483;JW0d25EA9_Kutk zfdb@l(%rNe#?!NVtM%%&&wS?m#rccN&7b|*pMU=c-~Yk)-}~?W+yCb6x8D2*zx%ss z=>P0r|LG?`J-@iroVSOoE*8~ZZkj+8a=uNIx8NO9*ja zDI>B-_7{Ofl9h;KB)~-TP(lO&%z&Ba%jPNy`#9laBLpN;@$SBcBJcyC<{LT@LnQB9 zO$A7OzEn#Fqq3woN201F0tNu;gk}N&NE2)}gBcJ(jL;823?T%`2@#MW#?ZzVfvkQC z7OiX$EdxF^-vj_DkJKY$38Z^P0xf{h&vtiMb=d9(1*CoG@#G*yk{9OybQgkxJDtuv zvN78q`k(ojp`7w`Yv^%YMatO7Gdz^(G5`|BrXeB`ov(n3V&k}%!{)%%ny7@vs_TWg zS3igmTrmesHn+EE(8RD>bcoP4Aq_(yYGZ@ogh8k3f~aV=%`_TX&f;ThH%3XKE+)dU z5iu;Hbv{HRn}NQ0IUBG}SA6S-Lhy=1oiki|dnmFd-iYphEZ4pTFaS}Z5SFWz0iK?o zonKu1&3ixi^S}6ur%wiEI5^~PxfrK3jFU?fiBp*jh%g46N1WzR0s;XrgDMQe`26{E zyu9d^%cG;iCdPi~pFe&6&;R(3-}~NofAw46eCP9@d+oK?-u=>-a{BA1Pi{9mP#G2- zEf-xI0)^O6h$&?mvVtd45!h^p>)TD!v}&qN3^7I~^j#a(Iqa5uT4s?p4uh&v2L336F0niXA1e6Twm6`8t6whdnbOpkwH`K^^6=w66 z+oJQ?It&At!Ey&2r9K$dB_4 za#jHmVu7GVp-z0=AF?8L-C~rq%p-9Ltv=cFH24-0f8E*x&;YJ$^3pkU8~8fvGNm@3fcEo4LlZLDOS-} zX_*O;{PFuA{N(+|VsLsy zhet!&-X>z6xGh6YQLqOC56ayGAgDC9!DJyJu{d%=(n)dAEq-(a%U)+4> zJAe1-#~;1&=)t{{<5kzb`PN%8etiD?vY#M}X4yG=h>18fO{>FhQg!AC>;`!D`~?x2 zi7Xd@uxQ(^ZJ77rk8S4{t70ZSpsDfm_423T2(a_HZGldX|NVMz$6voFL$`;H5 zI;H^V2pxJ7cX2{MKz6-e9}z$RRy9%d&n5RNy>n$|K354NI1?}22@nCG`eyiSzH4LK z#=vF*>P=PUs?29*{`z<0U`>i7syP>E3=rBDQUU;ok@`V%vPI`VKV*@V^Q@s);Qs=t z?y(Oub)^BXlq<-pfHRMa&{;0dG@0i$Rv)qdol=J*swgoiP(_rA2%}dYSc3x1<&1L# za4!7HN6FAw+)sTcNJZyL2arTc-5nw`1y`!a60~?fU;{M;;y70&KDR0g*mvLe~`ftPqg36dm;tG6!E^BPt#%A}W%-b|WSRRu!x(75>yI~BBUE5?)R6+ay*m~0@Ns=2&@BvUY zGk1@OyesP>i?iKJPS4S@|NkHC&aUi8Z#UV^qsS^&F)K4Gk2w4=Qw6Xepla^fJuW3B zk&&K$n5ja6hxZDHwt9)&e5VX@E4Pp}CQ87)?V1nu-=axm#5w>X}2-6x;+Trp;$RXURii zCXfN~-zNd(B7C$p-w9WNb|A*32D?Lt&lCStIYQ8&qNo%0R>c*`(*>2;2C zjRPLf3Sw(x*7Y(czM!O((;z7!_%i)d#dA31I&`t0(5A|gt@#*CEqKUr{e;L>!@8$; z#ab0A3CtLhB;i`-*ROy4zyGiQ^Y?%FJ<-5CKDv4F{Mnb&FeOQC%Q1rlM3!?jfYl0f zQiG|fx;cVra(VB8=1gg3;Q-{Jlnzkd(Xub<-%MJ*T|#Wvvl=4eHnRsrEhuvmB3hQh z!g(0fZ2$1^{deDe`{$zppM6G;pFYh)x_{U+OcD!|5MvrslBLwsTtLWKh}nsV(=d*b z(p;8B)v4A3^G2JF&wM;V%foh)rg6O4?T*L&GA~;2(@*ao_768V*W0V>l!yDfyZyuI zG{dbdOP$7XGmUwg9J6-Ca5X#}j*=uShJ;0!;1-lEQ#DI)WAv$7rWKw!g;*!0#C`06 zR#Q{SIm}H`O2arNNoE=*lIM+S{Ulr+h%MyV?ff5xv8r01F&sy4Eu{f-Bu;Cx;C;BC zA;NBFfX3TNyQ=Gna&CURHy1?~%2|j}YiYT&TUYj+t@+md6vZxc0?56Z*=e>~z=8zS zg7CK;2P@S9-%P058sTQB)wl_-P4(PDCL*R@Q?)d;&7laoYJ6YBRP(j&V3w8bVclBs z901qeaEDi0&n#Xd7Cn>eC%l!5Mc>Mnb1oB1SG9QAKwnk|iZ$GH%uASsn=8+`-O(;$ z2N zTI=a%`*cj>kcK4UrsNP|L_1fKh|XmZ^9-@2dW^KR2xVd7O##8SplG&ACDB+ygl4rb z%uJ037$v?EaZWkBM8ejjxhVCk9rRCO0&(iFgI1eQr;i_wL&D21(vxS;iTHS$*>&h* zZU>tXfnhv5O2xFnw4Iivsyi_`P(!Z{a(GpQ;$=v&xBL5trJ|}=o59QkP8rNai#v*9f1DeBtd>Nwun$*wZ5jkBnv(_3s!U$cY8rIv0tww60hLT^fPQCNE z?b8DCvLoB3Py{^T=ki2Wf9f?{85=i}0yMt7@v#mRk`m~x-u-RCM%i&teVH(r(r&qve znx=6~t$7_ptkk6<%!xr%w5F8Q>e*iPQ*1lRKx$QJqq9>(2E#Tc5)95cr<90cT4NoX znMhbzyL%f16*Ci@5Z|vwc!^w>S$HYS`*-i=6J9*WfBMxooYMXM9;QQT9erU|Mqn+I?)PdA^@sgQgj#Q#3Fh&#$I}dVGMmO>GmV1^ zGl886sh>Knbmb=X^DulP0}2yK%D^WZ6=>b~H~`UZ%_pGA8kl-r%nDUAG&9&h%2)rL z3{X%9Yc=ymU2{XwIoDTHRqyoz^>cAesC&BML~wN$N{NRdF$ZzlB69YI?wN+?vGI(E z&TJQE$qC~S#7qFlxg|1-c@_+V%yX?3(}X}qB*CoKT0V7ty%;sYlt`pl4WIe7=Zm-i zeF6p%cdK4Aa6GlS8TUA6=Rt~Cw|&Hyus)7TUR4`L3?npFxP00qzI>QFTTnLEYZ3RA zFU?aT{V@&4QI|-`+PFp$2^nZi4Rn!}AV+Ezu}rnPJ28pykTbNZwK=2yS(Z}DVumh<$3+Xv&5fg*!^}i( zX5Gl6-;_o(5oThzMiz#$)asSF-6pd(=Y=|TkePc^IcRu^neXmy-@bh#f+vr!uCKOB zsRT=jtOCsi*v%{qM@ubcc=}}f-~Q`=`LF-|AK!hv{U86&|NB4x`JX@Bo=Cz+2|;%E zNadLyJ$drYH^16$x8HvI=flaX!sp@&ccdIuAeQQHe*SQ^oj21oY&JwZpN?fI<|c;3 zY#cki%?zq)^SmU+JkMIIYBsTkn6c!X+^p7WswpSwHa%@6s7gvK$y6O^oNv=aIqFkq zQ(Wa3ZIbvU^YF}a!!C$2H zhP@wepg1KAWZ}U8*JVECL@c7`(OE5YdjHD4I=8hPigM0;TIj;d-poa09L>y4ZJwcu zaRhUd<+_`jlF*r9aPAQRaA6W*sMV@5{f>zlY#@M|)+VyD5K{+i5nd8&0usxgn=Yo$ zN$f>V04104B7V=kz`@#B@t7|kAwS_i66yOR_;$=^R4LvT(=;9SOs-Z{%Q$e(thEr8HFY{eC!M-V-S37j)_+`w zb2H1aZcTTu>dTDn7So7%h8wEG%yLGv?C4gwEi_*2s{R_jEK4otDk+|n(3N2h^4=W= zQ_R|mG3M^bIYkZGiIUDt;V4&2t)(Ii`WyA2-{v+p#8oS05vC*%mKEZOY~^&C_lL6I zAD6{%w;vuoeoV|+2I0iQ)~#@trOfj@&vVu2jh)SMKD{gJ4UTSg^M726uISaZ(J&2b zcUOy~TB~a7dD{w9HS@Z4MjMcF8iwI;Jbrlp{_f6qSGc*kc2_M6hiV2!Fu;g?NJ-6L zHY6}ZnBTm4^XG5Br92&vC+nT!z)HNcxQS2{fBx?KckkaX^XXK8@Eiyz3GN0xcLd1Y z_NQ6RcAF`&Ix3^%>1cfVLQ8g{4f?4t)!r`+M1S$`U46SChFRIq^omG>B z5-k%o`eH5B?HJ$V;-qY(ZgUr$nW<(y=(G>jZ(r+rGM`ZfM5Ksy6@uf7<7(Y;M09?A zRV5NeP*_};v{tynbx3J54KZ0)ga~F@i9ujkv<}*Wxa{M^gPGmYs%$#vCaMuPK@4-B zMqvuKEtrD|-W*6snD$9Z9SfSPU~P#6ZN8H-fayZe2u?ffsL zJUra1AxTJH6L+RaX)b0ssoElvceKktC^FKi+SQyuk6!=$Ax5AxqscDS*MQ={{r-4&f21%&0jePdqrEfJ11JtojXUJ6lB&>qb7LV*R4_tFFH z%DI!98px>;Zp^&`oDzvZHH;}*x=jQGH=R7vD17=@x2?H@C?zsODe-l}@=92&7N1Rt zAR#horgKpbuCLjur+|SJ8nel~i-}_GHSGc+g}}FkG$NJ+!3sfNez=|!b{=7%q`ilK zj*CRhT};f<6PcEb#0Kv01QXec0V5~_9yVFF<~LzwHsnD>QceJc1%V_{3sWi110p1gP6cjvw2=ht!1h6Jm z3VNYP(_y5Ud;+z!=L~iF{Z|%BKPiK(D8ff$wMHhIcI=Q zbBsNPJJb=*Ri!`+uC9@XJkP})kbp-mWr^Gbtu%LZg|nG9u}6}erA3p5<#@W_p>=aj zX1?&3U-v-Vw@>2B>e$HPKXkS};ue6;my?);lB(5Osu`I{YTUESgeq*c3d&jvnkqob z%BmzR-1e=Sl~QX}Nl4KpVOHy%=H|c_Z5KlATyf$d4@pQ8iDxSunNjQ5f@{@zp3RYR znl_V~e!RW?`RDf^Z|{~G{EI})%TkLTK+D=Ba<`?{!{K;1o~G^g%dfuPuxR%eZFvIA zn)tfAhoWok>kZAd-t3kj!cjc!O{2Zjqp_B~?HDA|4AsWm!(AQ%bnHx|+t} zbUKBgaY#}YuLZR(rZrAU*9yp^tLtaap1yha@zvXpA3rQj}K0O*aD^ zO_R!!a!x7LQfywrP&KL~>eHSaSQIudX11B8VH`arU1n8d2gecLAnkfMoc7}(Ct(_L zN*?0`UCmw1%2M2oiIOB$T}m~#VHhN(VH{Uu<5uhhUm0K_wHm~Epi@md@1tQX403XF zwYsL@M64DCMbk^ETGbG|P#}Zm7Qv1`x#{On()T}^H=}&hFfpm)$m5t0Cg)Z_N@O5s z5`q%W1HJl zQOmL{^P0RwEtvXjJp-V%vhW(-`eyD98q^ylj1}(U3q$Y#ZdNfHI`*+frTBWa)>132 zF7rffMf!W+S>Z8VPio7p+0a@5g zD~Ck90i!hJkqBizmc>)T_UdYPwFBebhYx@L?)#6o7&3NO*N*H;4yr}X-F)#jnAxiN z{%|1me%tWd+7$- z{PK&hz8Zf2hd=)1%~C+9N!TJ6iRnlhfzr`2n?KCfQIH#Q%0OY`2mT-M& z-Q(^CV5T+ZnHn{N3K$WQHUqa-nNi10%&S(dRfFE_$T@T0Cein;RRa)+r^UO3VRPI0 zA`x9K^PSl4AWu1wo2f4I-u!rTy&DH6RCr}-svvlSEdnVEZUi%Tg&jcNcD#F_Ii)P6 zH1}!;z>v`FDRM?+sUJQpBG_!sV{s7V$(ASt9l7Nx4il!tRLfG9C065#>7}mSW;G*r zVF?BrIxKoAAQl#LN4J@{gppgIP&c3ynPu_DEY+Zi!}gjaX#9&{`Q{luoKYO4l^ zSpvy#t%N?eHRUWKEF2V9W(gzP^@ec(^4^tN8tEM2rjiEIsk&so#WDhx)e%}Az@$4>8vCVmyH{^dB<`dHf*FC6WYc2im(W|s$iQK| z)Q1+J<2Vl2#@pyaxgG8}oaQ0rVY{8STL50>qGr_x0SOL=GNi+9JAJ&pi$QZoYI#}M zgCF<%h$ilyQ_gwF!;n%AnbNW>VG9GGR#i2?+elL(X|pvE{;6@Eh4+;c+Hc?dT>}$HDJSAEk#Ai+ zH5+nPEyC>DHA(K=#$TJN<#WTTB`ju81Kic171uXc&z`+7_rHAi-M{_*kNZ7DkjGuE zUKK(dZj4oH%iR#>pf+u{FTeQmvzISfQuK6KhEAyOfK*(lZo9j34tuB5*OMWh%fhCS zdy_@)(^PBB)guBW$r0$a*6KD84dckdIp;8TFSRVo!i*#`P19!DoK7cG6Xu+9O|3Vi zRS`lG^V{3|ckh3G{_^G5Uw-w=U%dHn_s9JLCAfG{^;|W62;_B*eZhPSp*A&FC@^z) zh@h#xTF)}F2nUX{!|%=P$@TSiw>|A`p0&2x2!lY)ANGf3nagt8A0Bd_vIN&!N-ZT` zvBC36hH>0%H^GXI>9}#ws20`I7+r1@V=qIt#|V%|tR>F1s%kBz#1w~9)s2bW(X8$W zrZI$o(l9)E_WarN=Xso#r7pEPm|{#;2#0$dLBqV6TCX5x`*nyib{h9Gr?nfkp>Eb- zzgVcL*;7SXT4`-RtdeU75$BX=)b%b5!x;E3w{YV`>P9S*B#A7i8Grrj_s?Iv{OT9q z{O^DF_jeDcKm7TJ`xD3k0m0oX6Q_%z0vweZY{+Ry3GNnimsaB^z8EIE{=eN;ECsiB z`!VOIH#b>?%uo9{oC>mFDSH2~7vPY281j%)*i40XIDR0elsOIKG)-MGes?PDTkc$I9}&W?$x~#X=}1Kz4!%OV%}#+(d8+Niw6;< z3}adq|Na9o_KTwm!-^eHAgjtxuiS|T&n&2=HX9&{KM7t&6l5l zu~dIJ93H-V4@HtDiw!z=59a_p5ygPRHjv%IE38RiA_T6qHvs04HRu_N;o)$&*!&pu!Cl&~C%ELHpHj)RB#CyiFRODPr|#AqV944*Uww3AkFq0?un@?ZT5AvJB>J}28-{67Vn~x}BlW3$ zU8YMBWnx`epZUzI0TNL-Vrf__yG4{a+omA~{IqUvxO-j(RCNBZ_uyh~E2p0#__ewA z5%(>;EgL;Q@^xxYU?yTzt)(u_x+X+cARj$@QLRimm8 zn+OezwhJf#pw<#;NFYHg_88_HOdJ$0xDR=F`t<3O$4{70OU=W0b$uNvb56rB4AV3X zLn1=-1>Jm_Hq!_=UjOvw)!$y3)-PUu_P>4e&EqZ1VFhG>f(#NxjeBCsL;~bClmrNu zcD4V-p}8&thg$nD0?qw?dG-4B{eC}fw!5n<5tuhYP^k#-*u&9}CtFIHmvTJKr@74Y zqUteDL{egrNCsooMaCXuG)qVxYFYZDl%ll~QR?$}YpKgpOf68klmeS`?^bVBH3m+{ zw{wecs{igg_DZ&$#32f4{e+PA1)IpL>f%~*rmL$lXPBSNXZPY>8=t73wXy9RDW-d_ zwm$L2f6U#VrPn{PxyKRPZG!Uy%@%yGIY0X}y{;{-Tyj-Gb1m zwV6Xz9{-uTYGG+EOr84EaD?8{i^>RYwi;qb8KUkaa(Sf@d;(DPHBBvG+GQ!5VI)e& zQ#qcF?zz;Ia+Z|USWQ)(C;=8VWRHOa5_KcyVY8jKyUuHNCvs*}Us-DIaWXkKvJl6~ zHVmUMFQ-!;vPiC4hjAdn{;&@`uhwd{oCnI8F$n6tFbDeKVQ%mkG~uQiO8w1d`}ol# z7;bNG5BtM74v!u^V&+oIpgK)cDK#7wVah|2B-6Ax&d1x^p^BjRsC&l9X~fPrs#ZNLpRJp%s2SotF9JZdoLO1AK8e z)hYyYXw_0{DV2p|G>XGh9<=H_FOnn!W|VS?a#AZ)Yt;@8G|$j>T3UxX%-2?ncYMs; zmB_RfM{%#yDBEo&6tg3I1`5F#2hQfDxhsfTaBMe@o)Q1fc2}b3R6Uw zj=+D(Fr%Q7ay&OFGCs6 zZSV_6(~O$$Sf8vOj&PA_6XjtbS5+g4GKg!n<7p{XL6V1wgiXmjRb^Eo-Z0pl;Z(J# zxg#hB?a-^LaR#!;wAo(YJj%lu!QOjY_tLa;y=c@8kODA=V;F{J1wpXF`zHT9#Q7OG?MX9^||2_Vdp_-){fu{k!+?-@pI*>#sJOt;K9Q zhgLhCW~|lqvZxV=Q^Gvs&6{`s{7?T>Oa0=jum6vK{Kq_uzx}u0f4n_v!8mffqqozK z3C?a%GIwGLLV$TI^t_d=2qOEMXL;w;1~bkH`=h>k{ra1)zM6JBzz%nJrI-*>L-F81 zRlqQ0h@_PAFpT508OLac2#CYv&S0hvb2U9Jr&7yOE5WB}%tKDhk|g@96>8?e_AaGb zu~L@fd?aSB3Q*M=CNJ(dolcu^N|}Ke-4@jiv9QNE$E>xkye&6`)m!WyRZ}gJ7_OzB zM2x78<7S+MxVRR0A*yYE5zJk}F?5Yj@K)JhNc=&)xzPF)baB!&FY%=WGZ18*B}h$6 zwI0hv0J&?!AN?Zq2aXBCkn=c>tpZ>WQ;N3k+7-Tha7SLN>iWmEI$K*|F~~A{V4@V|*GYo-Vntj2tcCR|MUYoP?~k~#s? zIL1(M4nI{_H4UF*Fjccsv?@fhOtQ?!)2Wsc&M^tXOhRBVsk4`AUO~-Ot*3|tf=Jr! zu6ElUv&8SiC4V(fNzBX~+F@sjzx~5+Hq-dWKYjc9&Ck`0q+{dE z!nDrNG9`dq9o}Z%f3mR9jL|z)y0;7vD-)S;D*o#Ao9B-oUG1*s<8hhiz{MP>6)s4O zVZb!XI8IkrSG(=@=H_O*-APWwh%qD8-Bih(9cDVu^I^XSFbp|(K4?N47*J|6{Zq5k z=~U{n)KX1332G(caTuhPab8LlE)+e`7>dy{&u|pw%dhOsW`*3nR_mFyn-$ZdT56rQ zTY3ECYMPSifyjt~ZiNOAah#Xd+L?{Uy$=h-PO)I0oAd3)>B{+Vo-DylQ}_Ktp@-ixIkf}?Y7Dv z0$33dHA7d31iPxox{Ku`9K@EDn4hGL7xVsM2!Uj`SWaDk4K(YuW_}99Xv>Jd7YmeP zj|Hw4lo=NG8eqG)c^dOHZEwNW_`&4JOHubkJP?m?NFHl7kXHkkUCEnh5X3T!NzK4C z4AVGmQXbG}+(rm@bD&}GE!2jk6Tn2%I7YE;W@ereorg1+rQTe)92!qyt`i+AS6h7{ zxUt`aV5&=5g8L>cTC0}&?CG;#{_>YU{`m3rPp{v-d-vkSi=6WDbV@1b!NzejP21Ca zS1Jf_bw>qB&Ur_AJlWgV_ga6)%wPTTm*4#2OM;2u?c1MEvopiVLkAm0W+Y`xscpu( z8--%UF1k!zz7(sR01Go(Zbu~vALix5?OiQXb*~owU>FjHgp{z`j5k-?A*X2^Hk-|E zx7}{9w!1ASE~Tg!b0>FUF|TD__J@bNhr4Ad(=<&of>dWnN0v z0_Lb##xdtSdQ&{aN$1DIvD6ycpJ+S4ncO3m_2>0N)i2Dh;Y2RN1RM`D(R_3B{PE+R zh-ocu#Zj4^_PVo0_yxA8-*Xdx#~2>7F?&y58f(z4avCDyL0yZa~fD!5ya!9NKW%q!=uEA&!IaXl-Cb?BJIMo> zy$er2xjkm)zEWL-*Rw1|nDRIRuCY-7Q`cIlDZMCCyC}m0@M@`Y8ztkawW(B+u(5G6 zcRN~}-9@}Ci-_#5c7OMGfB%=ieE0hG?VtYi?RL8zhH!YOB~iudmh|N7g1Da-uy#q*op_7`7%k%ez>Z%e65Rjr_idXY(?`S}1LW$Qlx zY7Vks{KOhvU0vF>Lg)q!zf@{3qeqX(>~McOAF2bJ?dH+V_2ZlC%`}cfPQueT z48tIaLE#`G04OHX5YJ_~yT3o3PAoDELqHpD93G3-PBE!fmu1->4y9CcXGw;2A2M1) zp!t)|rMO!y)!mBL1WA;LNY%o$(|c)9wapCWm>6d;H*&L5%Cax@^z7;O*|SH(K<))z znVh-vkX9H7L}%|MiqjFk3S6vZEp6>J?3;}6*44uscfM!ta+T3;5D6syp5+B!&y7w-9XJnn7?z#WN_4TRoEMjU2 zl0;c#29_k3{LXl!l+CnO4e3qPGS-adEi^5mJiZ86O()c@th<>m%c5pEHIRXbYpv`) z4jblC>)zCBC3hi8M9GYDp43|RHxGlugL)K*NlXZ2&MD{3Znxd-V%~6X+z=C1)46aw zZJ<=JL^~5_GfifywM6-?!O^CMB}BaN9!g>zH@h2mty;D5#7X1glwkE4td?T#(V-WS z=g*%1<~P5-z5O3Q{P@GOXHUQR)vv~J+&}D7PSZ4AUtce!98dG{(B`K&;BcY>LQa?q ze*XDT%I}`NeZJZ4(l|bU@_4tIN-6up{^8*;&oz*j08+f2qp=p&+uDBgi!P6MX9IIo zLt+r2^s3%fpFbUc{h$Bg>ElN~|Ma)-{`5yH%gxQrvuDq4u69FCV@^!LC~h9H9!FI0 z@l=U$e}8}f@E}a%I1WS3IYkL?hG+t*nQJYzo=(SDYy>m+l)_n>g6mLgj0a|BInA@1 z!XZhxaih$`T!Q#wL55vuOHj-$ggNH5F302XejMnEg?TSCz~GZ_Sl1>GgCU!}7v zQfn1o)KV8e#PiRjgcw)S@DT+OhT)UIaqew&PJK{LBAlh1$5Crtf{Wo{SkGdrr52HR zGRP@;pYq2SA%lq2-8;y-hJzO9E>2yFfnz{QDf+?9DU1<7Y1M!0KaD?N11Hm~m=g61Mo#0NUXzm2-MJ0Hvxmu!j@!EkLTgmXt001BWNklm<1fCYE@0bBPB2(oX-zK;us|+|WBqB($16z^UP3+MaC4pK z`EWdzQfRQiyUZ=chd49G)<^$f7m)*K)6#hTTj@i=V&Ize*+}M2ObOy0Ls_?RymsxG z1rZ66_8pj0a`!euISg#f-95aKf_A=!3p9aYG+fV4PK^s2QNzq-75=q8J%os)YGL8c z=1OEN1!k29o6P_ub0!jE$%#U{HQKn864DnHLne_VDQ~yCM~@%pA$w47B3$@IuGE4F zw+QIYL`fvlr6F$vy)I=5%V-WCY;}fL(-yyar4!$-ww9!sS&VZxQ}?#M0mwX`PRDQq z0kF)cvdqt(KcA-YH^2GyhY#;xzkc}LZ~x`jzxmI*-7Y7Y8O)fbakH6r+u41Ym)5wA zXwu4YhC50@t!18X%Q9bGZMU0EPJFeUrg1o)(!+xn^?9k@#!Z6#e8P6!~XvM z{(isL>uVc^A>|ylp3y8TMUy0V)KcepHZ#CQ@;Ht$MTCt1hPZC+Mjh?hJTcB;Kv<^DW*mmt>YX0uDaPoiX&*Yd z&ID}sC6Sb@B)RnySVM1EM2M+q1uzVWx-rN4QNlQux@Xdg%c}SA)MHHq^_AU>H8bKU z*SPaY)=PQz>5X0wHOMN;L{n>0qx<`ZySqD6<1B4c!(({uyvz@W)9u|J?z`=lD5X60 zE|z$fSe+AvOOPj~VHlUCgo63z=Fx6k)W2byAi?()&WQiwRg`s*Rl{% zbIG(uehq``D0S9Q5*1d23{$IG%_^Gst%S^#y3Y&u4j~cU-QC^YKYaG`v&T1&e)Y{a zcOU=o<6qwo`P*Oq>Q}LVm?`Hpj>FB(HOt}M`(sf=n(p1;A~N=f1zNG+pK6_JS*CG} z>%83zL|bz@&E;-?T&gV!?MYc^=6l1duO<&jpxJ++-(7PAhXw3a@!j{Y-v9je>Gkf* z7tg+Y`C_}4X^F=1KeySv+meG$PljydOAO3Rv!w6$W?%xW!W zTB{M0NZxLC-Zxf|W7S$^8TnKn&w>D8q&1x;oURAx!?)CBG ztIt1wF->_{j*`eU;-{@gc{Edqc?GSh2bc53`VZVdT49p)H+=pAfgnk@yxWmf091lPK_|s3X-rV0Ga?Uq5V;(l{l#&GJHHm=S-B<<^8dB0a&cT%o zOQdO9yVp_GtFRwbp7{5l5LRtVYLYB@t*F@8aGw z6w_*^%RHB5DWz&{Gjy$+s>juK!o&Wd*7DhBFFt$m;#a@=_}%w!fBf4|V0!ZONlrs3 z2&ZY3lv!kdJe5Pcm8yvDto5th5^lwE@&|jEPp6a<6UJ#8vVej-io4(A{N)v}ak5x{&p z9q;b$mIXIgxW2k(qA-z5t;BXBwhs9bOUj&5$~gzX<%B3DRkdi<+F~OUGxe?woUAb( zVwJ0zmugMy4l}C_n+@|}E6ZG#ea`8#m(QL&y#eVw@5z^L?bde_+M4d9S6XwG73=If zu5S${bg+-C;h5Abnm8YV0voYg+K8$ZsRS{(_Ic?{Q12BCnsE#2JkO=fr4~_bnWiDF zd{%Q0OQCjs>{D7=_`VQPqYDs3dVYn=C=(DzH>{5IZ(Z1*AQzpd&#R-anRSh65Njjx z;i@s1_Z*eZHcK6Ljf?AU)x4@|t;gfxbU3ivZW=;PP7FzslH|lw&WDHlAAk7q`|tjG zceiIwyWRCTZHa`49SnvLGbe9qF6G2D!qxIp>J%n460xj@67;Nu&sk;Bv8|uT-P}*dlc@rB zb93|Z<;#z^w{L%5e)!>4)$-YAFF~{{Gch*P$i%0m8a^IRc2>JL=)HkV)rD{7mFb;qS5Trl`i_kVRCBbmqafj{CWEIp03&_-i*E`Q)*l?uem6 zu;>!SIF2FbCL-r{Xa#$%nRLfdKs|)5b;NocwZPHNcSaakcr$7X)GCBOZG%|@hs<5p zEXLI8Y7s5~SdvIeNgOEk?D^K%BE-@g87lCiNP^Q4;;$4CfSF1&S@Nml=CpO z@tcv%Pf1RP!>hl&`tC2^fB5i`h_7$1A3u4LhtWL-L^6eO8>c>^IE8-^%!kqDrBq#K z_kHrBv^l(PdxD|0Sd?W9_@mIAk^XxzhZppdDMdz+QHM(P#(u{B|g7N(h( zqFT!NiT#byPql~pdv`k?k2w!7Uc4yfZ@2gU_U+G1JdTrt2^^Z*-EK3NV!rn|I+|^w z>gBhk-lH)KdMn@y0IkX?vE;-wrbc*jzDvGYlWOCc3;JbC)) z%dfslu0Ox~dC2nlix){Klmu#8wUk2Z*@-8@g!XxVK(UmNoC` zSW09m0MK@{Fg%6~8-aWn29f3>z{DE!bpG9=K}+XCgGE>s(Uj@7^=E7~-nG}>yM;OS z`@?p-$vLQ!CP|oBL|VzrE=h7zy?ZGoW*Mm(fMLkyzN}^)kwG)BBhbvvs>jfrs&yU3 zWwyqB2bn>&E@tI=xBL9%v)yhe<<6}Tl*P&WaNBiD_g*hPMMExG9l+{sf)=b-!A`I4 zgGSV!(|!{LO|+0N&qeAAUZ*uCTu62sHDNWlU?w(0YH!KCf%@qNAR=kgs_bGnwfBql z9bA16vigM$*BXq&$Rq50qUKrWenp*WYLzMzl~MzQWFjYDmZhrE%F~a`iCmZ@ojGg~ zWZW&JXUq*=5ppI^!eyQx?(g^ed#?pR)%xM>+aG@T;qLB^g}0mSFpSK}931{)<{=(J z&(Q$#&JJQCv!z^A#okVf^;@5@q4ip^u&YsHuL*>`2W1DURx%?vVn9wTSt2v*0|1-$ zG_H9M)-8zD8bftzFbvhK(Ht9I7h@18AT@JemRhU1(J-vepa^ReLVfMV zK`Y^O>K1TjDOlzc6FqtU?DpN8`;Q;qzJ0ry#_eWOptMf8hrMMj^>94Ae)ZGGTP+o* z8S$-`rB>C50-47oDX?nFWS&Cxg>!D#EQlJUYKF3y8sMrmre6aw44F)w7%ArxvsR*a zKuiQP%_$k9sQOaO$~2}&kFTz-MtE^s;Dw;>+KrLOJ?4y`JHfG3TAA;y7k;@V+gaMG z8(KR-#2^Mb7h_Vz{K|w^+C`R@~jaYF(BEK+ZXg7?^r)vQE__Y3z=^ z2bv&|;^Xv;BM9}@)Hm!vBp2pxtBs?X`uW>xvkPV|B!=S`n zRb4H}UU9esBqDhjs8d}!_{xpi-1#YhGXZY%;jql7(A6yS{P6Mc-Cw?a_x3HhO~b@Q z<1h-RUKNmoB;?AVwa{Y{4S#s1b&AdE=j86xX3CPm8y~sH<>+b|Y2bx@NKn%a)__jk z648pb_SDZiyiL|Sehz4@;XR?MG1)^+i`Jzs=mMg?!O>Yx?rcO&fjWuANn8_`C6PuB}D#4#VeX@V~+1-bCuU@^{Z8yUgpIaxh z15{O)r7p|z@%HZh$J6Q9^s;l&<7sg~5~n2D^WYGP61cB_c=HG9&c^^kh8DI1wbbAW ziVy*RmQM^8qo{naG|zdHngy=etcV%l$I%2@AY5u>l9JK^@bi zUam&v)Ybr){XZ1cJ*J$qfv6K(<7Y)o`o9Sa_9!s9+iOJ-BNFq=iZe3Pkgc26GS4S7 zOCl9iO^JFlg6LfBVhRlYPQ%XtF5EduI=AM!;w^1-eL>H&8a9YX&K!YVs-hdMi#dni? zt(@^5sT=rzDTVN68tfKqAU6*?FtczRjJUqu1yJi0MYLVnd;t<^R9zua)$=jZMgsOt z8bmgL)ZDzfpG-Z0L`*bhG1d0o+L;cmci>Tm zTJ*IDBw+F^WbMdgA_*%ggMbA@Ro&b{ybjrPcVbpofe|nz8iW?ZK-f;h|4-L@Hc65s zSz=1eoJ2&D%A(C@dS+(_i(4#_#Q_4~!ySGwL?D33ovfVT4!hW)hh@{=0Ng_Sm&D2z%K7Ft6nnmBe_ujjg=Wm`rd;09VXCYAE_bv%) z29kA}(r!O&w?j%G2Cj3sA11WCmGs0U%Vf54IP} zLGuS&%{mN_ysyLvNa&-m9>fuWm_!`U$^f!lwhtekJ-B}dN%s4-ECR0Cr%7X`#~UT@y&f%Gk|Z=@1-DNkI)gMCcU;*P-r`o)Z;Dhl3TQG)c|{ zp;I*h*It{iV5WEgq5*gs(}&>s_Mz>LAryHb=4l*Vm)yl4MKz_AQ^Eu9u8L{djK~1` zuqmiY&KP1)RRe6AKuo5Lh)vVBZ7Zrej;dlNh{cY}2OoSINOJ9bAsT?x&Xy~!YFeB@Z_t{$K7_(#wLb<#KcXA?2KD8bSEH_QiFkyIl0h5V?>rxc4+{a z$0aJ}4uGmfX})x+J#L6U6lOMWlNF0nQ$G_z(43NrOKkWyB_hV63GYLJ6%FuuF?)sW zRfihnl(VR06M;!bsDQ z2%%vLU>P7rxN~~kwNcWv=ocS;@cwpv_2T7=5b6E*-}mj{4RXmc?8p6nFaVAP=-CZ` zI1+P+kvXcFPlT!&s`}}Lgds*hO#?A$5nmN?#V?6X<60C}x(8GuPL*DF__t0w1IGX* z-?0!Gkei0@ob-3^o^*ZK?=N#6Vkkmdgx*MFYC%Mu036GNET!h(@Ah8gL-_%)B202XNUQ$Zb3fR7H>EsbYTFKqcrP|>*EG@b2p=o* zE{wOsYVu!5t~whAI(mKp7r82;sdjA>nZPm=u5Yfs{pRuW@1C8V954Fb!;&kXl~?!f znyHGRBXeN00V*-Mpq(q5Ao)lhn1QI3h8PioQ8k6u`NXgyyrM;By%0t~{E4{SAqaq| zsAMY*vf9ci8q;MBIaK64A|Gn=wrI{GTCj}64|R{BdNfHLsLa_+r<}8@#wG$#;1GkR zeO3chAQq8b$cZ^ZaW`QzAhHM$XY8sbQ2@Xc2#RTwg3fMX$OMEzgfO%kfJhZYEs2Kc zf;EW52H3}9jEw+$&}k3`ahTIA>^F*X2~^^JnsZFEh@urKgII#7En5W zt@NYb)>^H2hy2S|soUiiNwKtgXW|%bNm4+(3>Tzk=xqd{vlNZD?Y?#mQx7_ zl4YF6G^G%2nkKJbQcAOum6^HXdCIA~!0d>$uM33aPi=I%C##90iX zX_^>=>1_RL_1V|~9PNR^L=|~n&+aDag1iE*-dt$eu-n}H_Onla`O9B?`|XqCWq<$f z-G(_$Zp((EO7PZTwBI_yvZl+e6cx3cQko`FK_(;yGcC|3;H>Igp;>#|Z%DOh8iHF) znt`u26_~;41C<#+Ui@egbpo?fTEKCBA1d`*nXBZ=eE!t73uz%%6pg-_dXO>{lT;XU z77lD~-p-H(%!&$zq|~&+F{(KN6c9mBm?*HzznbIh{_q0@teKF4C1=wS7+4StTt-f_e1HW`UA)cQv!oY3i+ET3{EdXK(jGM4I%g#DROB{I|dwLP%{cVO;b)u z5X`My)x2A5m7HCkT|p~=5!GDeUHzyyIbPkncPB=grmgB2qXQR(u{NV1SZ?CsOgvPK z^|oVJew6VRDl1{)_T%lZ-`Ia>iA%uKRCFhB^B zvy^sh(R^03X-W=;4Abbag_?oP+G`phSn(DiKnlT;8NoUk=mVEf5i9@*F}joEoOxj( z%OhBs+4Cd-$napc5D~$#XYYEJuY$gPqp%Q+3rd6l2pU5(Y}dd2^f&+UKm4En_z!=7 zyy)I}^zh{9Xt&u&mf~B^B?LHF<<~PmO9W6uQxJrdWgN$8nt;&Mnuduu7iRd(C8Q!k zf#?FuMTOfeO;Z!1nt-Y1Qp>vJIu^#r?TXBjBbV1KM_gs`XmJ{Iv<%F$w`d)wDDlGT zCkL3lXwmF*33Bg9s6t9AGO-XdH(g_9DJPFjIfE%^RwiL)FhNBMi~ugY>0Rs)x!_+$ zgds4wkZP8k%f*6%WUfe|FZj z@$&pl&eKOf`0#`G-`#CDzx?Gdzxd+ycQ4iyzWMOOkCuxS5DimaZ^z9Z+O`ZCB7p*o z8Kw-wC@Nbf&I(?xr6hs5X_|h~2WB83AaV`{G9o&aGK5I9+p3_EA8J+03QWs!Pvin1 zrQjZUo(&!T zz->r+8@BbSVjnCLDF%fw(+TaZzl%#j+frW7#t!jTj?OA#~={tNJM-CiA z^l!z$=>CkVgy>~tVWfuOIo|w-5phP#4=r_Q?sa+iK(w3zmMrxWw zK-EfI2GnF3)T3~jtRfBpBr{^c)z_P3w@^FKkJ?w!4}Tr9Iln%v&q z&9Iz=SD&g`l}UEdNg)nIL9|qJ9D-GBP@^TnP5FmrThmU{o(O>@Ae|L6za{lJ^ zS6`kF!|snh{^7s-cmFO1p3?O6yT87?fN!5(8qoXie?Z)b!I&WlkO1N>I^e_?QMlQf z>UFmt7yU4f({kB2P1CmRl%;K(7&(N1#rL}4o9De>*@=f+{{S^T3=nnwIG}lu+6#Pt z+W5A{0oU^+g=9vU(R&#cI#Cg)mwJXiM@@$pLx>>;VwzIQB3>N% zaja%3=OluNfynKJ0m+I2hyzCkCV{!@I{+Qm*W2~=uYUfs|KorE-=04Hl2L#9lRtXr z;X_m%c6)K@W2706sl5c_I-sadpsGYZXRgm7z_BF%ol51bpn9<@FXGYw#!L=wYtaO* z)RcL+%SDfJF19JAxgs4kA2h5W6aeNtrIZT^088EnfXM}}-BA;vaQAB#j09a*66P2U zkt8VqPyh$5RgKitC(t=CaT85cr)kPLnPbvSph8?&#W64wstO^*KrsZS;7>mS#X!mX zg8*)M7XykI0H&)-VBR=*lc!v*DjZfuIt(& z=<*>}Z57l^yp?lyx>)p)NIi}KWCR5hEZyH*%GrG6+(wOCxc~NBD(=NMCn8j>mdd&= z!zXxqa(I(?)?^FixG(a$RjTrKBU>@R@fcTgQ-Ci|*{~sPAGXy!Miz)%e}9!y=+!83@WBczo=*w@fjMUh1kIuY(ChEM{mnoA!>@kv z^Z)v*pKori9^Ae2laD`MEjmI-(?m#2EFeVGG!e11oCyzlI$9hZ;8rUe4{`hXF3;9& zUXoo%T-)7UE7)!tlp&(m?&UraDbTzDwvprz!5nH2G{VK#yo)< zObn|P-@CK8d*{x3@4fr*;e&g3PGuS_nSTJM;p_&X$EGz+3x!5 zn;3bq=vT{yCt!<3PcC=P+;zQE1&VBV`2f$$L^3lXIPn>?Du6_W)v{SFT4qUUFESuV z2!;DvGa%Lj*!3`)d@pCYU2+~DiUfttLd!6Z_&dn_Hsn$~iJc}_ynZz2%*-N!fPq8G zN!3*qeP$QbfEbZTQyDnQZnR3Ih6w0V>Xi~!RIh=d&iL1wMT#RIdPnx~yHb{T`S7^t zh4&;=$~iEbg`Bg0SFy0ZJUyHX1dmq!BHjrCD6KDd$?!IIIe<;U2uu*cR2j5cEI_8~ zS17R_@fWsfA`VDZbSd|Mp|OK<{Bf>k-z+-w>dQ z4H8&YmI44oYMSVGhM0$O>{>2FML!qY2F%>u!lM;qNyv%(Z)uDm0>rRfv54dhk&UPt z7P-MU5vogwNY}RQ) zbRQBIA|hmp1_a2{I9^>}uh*OPIyV7AggYnU(ZffN9zHrdJw*h_d3|xoM0m6ceHQ>Y zgm)i23`B3v&v*O%$(=h%ZA$X(chApXUWtJi412Tv05l*%({{`VpiC5*17Qr&8T4-T z*DhB#*H_z3y4eGd5*UWO*-aA@cH7-{w~v9FCZ1%8ZP#>t69Rzs%cU9&v`^EhS&+~v zd}<~s6EP#0W-#!g#w>MhSS%Vz8`TjYAqk=xmTDTyQ!n|f+hWbo$-hieZqJ>v29Zi~ zA&1+ua!0TmHMHHOf%9Wl)}5RoLyG>x0x?(*_#w+AM8_<+vt+&w)xT`gC~%Z282 z@#YPHE&INWaoir=zjwEbF)}av?wyAZj*pMTAghj9-dtQ=T&;7yntYU%KozDD)L^|E z41gHA7P>Y>W=F*lfQe6zj*pIx`=jIa&Gp6k`M5VDATb>ifK53k5hiS!m{pyH#32v@ zF*jZ7C3ecweCPr|Y$77&oI^kWMNlH`ySV5Zu!NAAR80`XrNj#lem+#nXx8n+osZl3 zE9Lo`nH5UZVQjhmMWSM%R?`zgAS{A4F%VR)`5b_}ZK5h3`rY4Z<~h{Urr??0Dj{N5 zp9}NWGPNw?u>lJ8QOyjkFwdk?r(9SW0J3<(LQW3{B_+p83;?)onQ2PJN(KOm-#QoG zeVq`~q;8gMC(ZdJ#&d78>4urpn)d7B)GSaMcXLX<2SiX+-wnh{#c29N;2ZSM>m2mqIeD&Y=6!BR?y$bpdg=4Q9q zz>j`(^cR2emw)l+e>sigr=NcMt6%=&>9@~bz1r>f!}0M_HM@tdSCnI#5Lr}n7Ezm~ zG>&Pvm)#yhgtI&C+1-1`tK&t#XqzUdyxXj|>&=^2uX0Y2xoeu`aT%@P=x2y#w{x>_x}HmFW1 z??px;LC}J#%w14}8a3>ogY*5y@b>_end&mnvConPL^D4FY=V@)2#9aH!Z~FX5OI4O zbA|^1%(&!1VDbg*1{aN}?)Q7|Dq4+*w~7R+Dmfby8@tI1mHY({5mw(M#AJm4>U}12 z@>0=BQT3s65j8be0ag+3?J&D4il=xcBD2C95zQVXBH1^Rs(=G7Dw1=I+_!BA49qZ% zm#<&GeE!|ZLFRZbGwS4j0>IHbsH=e;VRbb;y*-Em zb6}Xj02shTEsGYI7l}C#5<~<5ZDkrcO;ZXvhM027DKq6v!Z~LmH>H!T;P$L!rk2H; zKpaAqLLnJBtFRG+(ii9Tnnus4^tke>nwsqS!A_X^j+I@U5vpH zvWg4wis~?o%+$7xYIX~*7;Ld+g|JOep?yX6R zf=_PUmIZ;?qNG%?RWI;|A(ip$-d6r=El^#JvnFgf#(Upf+{nSh^k5mJV!gkgW|tb3Kg2+nf-+^ zMrL+l_Tv6lbHT1{`mVvifB@U|ldr$}?9<KaEK_|)-YK-upkWM6Y9yyL zO;Zk%IOUWmr<~QMKfeF)VbgZ5NuG1wZFl?a zJ|{pb9_dZwreDUkHKM?A$h+Mzq?}cZ90f240kXn+gyGF4Vev?&Y;IA?3=u&QFe!3I zP(}#Dbak^)gOo&67k$?@v0pBeWVh*pA}C(+I@OFIZNq&RnLs5YD1Z_I5sAoLW!ISC zWCsWA-i{b`(OPZX&i@_;BdC%9F0jJP&Xa1})^waE|KVcI1wA()y^Yl8QQ ztA^`*UrKAMh#Oi_Z^T-yL79dEAL?l$M24JhUcLCk?|%E6fBMHi{O+^O%~fQ4_u;+M z<0Yy#fg{3{Gb3_js6e+*H2L1IEfmD+bLylIf8#ZH70qq$3YXq_L4RsY1Y&l6|Lr+I zR3wxM5d-H8Ua0}pe6c{PC77cBiVxv9hs}G~TrSLYs;It5T{?(pM5PNbUjP$xg9Z@I za?>P9kE8Jn$?dW6RDan|UEA;ugk*vtYCDRO4fn8i$AvS!p;)~1i z<;#5Y|NQ-LKl$wR|R0Zh}h*(IOCc8VDysJiJ7NWL9` zLjXny25c}XB(bE^l!einz8G)H;7Bw9s+tJao z?;=9>8DapRe!QK!I5?X?E2vl(i_YIY+&JG0B8Rm}tyv6Bu{a_?+foQYav76#myS8z z3H(+(nu*tQ=qRHC=2DVOMu=$YouKkZgJ&2VIB-BDQYm1e76>*_C|13G=~Y+BLyXg8 z5g=C%4^{d`X%AIDt@)auc5}+ct6E1Yh5G7QkGC|KFi;uCA&!uzH{ZQ@{M8qq|NeJh zfBE^FS1*R$=4jEs|K6iJ$HyvZbA4@Onn_X$$Y4tf9N6Xb}u?Qhd!^nhv*XEqQ z`s&M1fBWgnSG%vje!d^ZDd&%W{FBi2*Vor7^3e}IT%4T#?#r)-^C?DH9UUo!?RI-{ zv-O6Z6n|*QR=_Q+BM6RF6%wTS_$8152_%6r!=8i@x~NG&470+R@-U6abaZmubp2vQ z+x-CBtwB~RearoR4>q>P-D=slZ4ljgG%0TD09=La-cE--UX+~N5ls01|M1_XgTUm6 z4VZc+>wTGVOfg1cnx-m_ArK>qS{7&`%?vN!_y+;281K!0&TAM#C}5$v?4boDG7+QL+R8F~p{6(&VZil?(6ZHI-Rmuc78l1mG>vO5!@Ci{9Qq zWHZyiM1h*f9D+%jhGDzD{^s%5pZ(^azW(y_%kwt`a(292Jh;~C@ z=;Zh~F!x56_?9eEaPM$FGl1&lbnWZ{EDQUSHpT@aWFj zougN;ueTT7a&hPE?0UQ3?)Q^G;5r5apw%7->Lk9`6bQF7O+^_@yz>TGfdB%57$ixP zYxidcp|VL;9lksnmBU6HI&qMU?n+v zD?abwn_ZW7jV^FlZh(*Vk7UUw!%cmw)*Ev!~ylzkX>s zt=i^jadhwQ>2lEz`|W;n(}X}OU5rw?HdLpQN|WV#$>FR?rKW^6p|4K@)D%QrfXu~# z!1KcTLr(Ch5JLq-{3$qi`4%|qf5q=BIEk=`Srq*)^B)pbHC9hDh(karUSA%PtNAAHs7#=h7@U$20};k(V}grw`RDy_o2E#J4ns}}PEO;; zKm6eje)z*Xr>Bd4K|aGlNW^{D9UmPNV$+0&kKUP5YTCAme|YlE>*vp3oPG1;!8`Bn z_q(gB%l$YttK+6^j*l02?mZO5tLy9ipa>xLR=MvNX0@)FYx|;mNni!DFa%I{GBpqb z1;`3x&f9(N;&6Gr-j7KP6!G}@2q`R&6aqI*1SI!Ca!*BKca?^waS=9ZA`zoyusja?>BV=?o__oI*|$%= zdHnUoo7Xa>z76-^eR#ZFr2Tf|Gz2z$bFs0FeqI!)OkH_i@wW2^qQ(3HslQ`<8@P4{eE|K zb%opAgQi`s7MpQ0)b-}(>Uxt)c3k5K%#-G&kv1O?SYWXdG3O0r0HVMMqM!hiKtKox zQvw3m57+DM_GYtr=i!61J11=ux_*_J$8o#g@45y~Pmhj|S45zi0ENH`mHrlaEyt5q zRq%=>R;ywEid7s1DpA{ijoj?dv#Pov%X@{A+|-Q5X-Z~=zJ@N24dVF`F^OsuBXcmE zU&rMmYMy~kmGaY9t?2StA#?Z=(!JGl422v~6hH1`q)?4g2fM*H;(k=dWIU{pIJcUOvCNIF~e? zESHNrCw&u-R(%)4UdHWq7`EF*-$kY=XU}lF%=0{-0CE;J^lLug8W*Aw1uhrwVFL|3 zLo};mNM6}UO+7r5GN`5{W~OQ(xQ-#XKn5a0B^Q-fF8a`=6;{3lHlHC5xB26s(w`wh z1R^z3%~V7{@US!G+T93HoF%H_rY{A;ILCY_^Hb=%WDQx!R z%QtVXw|hSxjY>qod9E8-89#ZQ5fr4280C+j;IgYmgJt~obOfa73&F0yQ7q1^a zxcBhEz2jBa1Vj#M)-C!65AL6y90g7(x$LVJ8-gkpQSYwRPLAUML}fGvOPWwKm|M_b zRuL^HNuh|>cLq!dfnyUfl}1WYf&d@_WKwlU5}*JsK$CNhO^i*OB_SgCJOns@(wJOn z9YP=hGLtlos=|>WnVH@8bOO(Yb$$n{B4!zObr)y^069=|k~-H1b*p)|f*FY#K;*!y z)vD_{Gu!UAk~PNIcP&CA1cVkSL?#4F`|UXF*Xx__oIn$0%`#DIP?YL>L)nQF4a^Gp+*@g`YDJQV`#fY+jd>wotzxsyL)f7S}j-0uIrm7 z#-?$8UCOCu??_C6LX5F#TR_wz`DHmJQ$0F9{_vxZUY%cD{QmKG-(5OA+=Eniblkmq zz1ePWHlPT|#pJ;N*pWpqBMK0HP-Yx_Zlyt9-Y*ikf1-JT=X_!=jA#*9?_fVn>+N^v z7ncw2-+6fN4w}ZMJv+O5@BaO^<7wE>qkV;GQrYcR5f9Hqq?QPNAGFrdF8X73JD6Tg zSW9pRAB?$e_teEnBq*xc445E9N|UNW+j2^lk~n};^61hFgTkJ67{#GuKklva;=0+ZT_$6D9S zo_L8^M7OCmV~4FDLJ5Uqk)o*;M$H9ss*Fy$bYHBDTtmg5-ApzHc+9EWB{ zj7<}_MB{#Nr^}QzyF`f1A)}nt6-NT^Y62C7TFJnnR6~rk==&~0Im*+>gRc_2LWz2u-or9 zoBd{ebG!;?r`_Fq4^B_-v{68I!EEG(CCFa!Vvju1o0Y0~V1$AAb^21JN>%eu9CLfFCoI!mB5J5|6ah7g!b z=8FhE^kc4I&J@6X&lsynOq4~vSboOB7|v59!dbfWn9&ChO4v^ z`5n;kZmybvn+(-S8}-4;B1DiGD8x7eqCA7jIB$VEE>%Sm%r!$5G3akJ*bR(mz=2tlA<7oh-#_@E&x#($I^i&a=xa4VG}tr zAwl2wfqBQAQX0q6FwN#rSaNXy22cI{xWLI1IS%`bkrT6SGGjspNpX%ZDElxB-DHciu{@$By1*!AaE*N-26 z6Bci_W1ayjgBejSch3$AnX>iffC6uQ%<{TsWdze3%!&X88GsB8j1k;vhZw|Qy@hey z952CSv0m?|1gFQVNO`+S``u`HoV~^X!1W?LWmcHYGyuSm(41iQy~_gdiri{fxC&)_ z|Hp`kP<@gpFvX~%K1L6&LFxkF`$1Hp>!7ksEAC!ER-9X(HKO4(O=C){W9qxkHTM8O zO~XuSHMI(g3QAvl}>yrt#MQ~&@V07*naRJ~{~-zg%JFVNL;Wv1hPczJdC z)mLBt;upX8o4@^=-~INhB!B?le*Mj~+YX!c4?p?5D&Dt~}Xdijm9vz>o z7JVyeY#22SdDwwj7b7yNIohcl7_zDuAp)@h4C4r{RvD?#^R>vO%vbBEiaXKzinm#W zucV$e6SMgjQPpTpDJpf1*b};vr_7xX<3g4d$^Q4}XhDctU&4D{Rx=Uw8U)#A@8;AA z3DF3^hzX>iLh}>x0bgd<4=nrBVd1*HZ&xG}X=(ifsCj|LY6u{V2!;eXOJwT1b{K}; zcH8BgbKVc5>r0s#s3D+usaBQbh>)4lW%-C>6Wg}!yYBAYyLZpdPL7X5({^27wL+*i z*FFAf!3CUjgJ7oql$$25mdhAJPE!_9H6nH$6E8XuxryQAu6|g;FaL%qL3(+d88%UgP1y{+=)ul1m`16!;av$P2@lQ zlaKD5#-r6K=`fB-HO)n<*C$jPt+(Ddbz_&y(0_gF&5H_Z>~p*yh|4%Q+^*Uf0rRbH zmWZKg2pj^8BdCZgzyT5aMISg!)08D`*6SB9Uwr!Mr=NZH*(aZT^7-eVUtX*kp=rPb z(gfc;{`$e$sSG=ibbWOh5Le5tUoM!SYa3<@fmNnyzl)$40)a|SNpsh<$egChjGCs+ zm{ZD741nD85BR`t-L;pT?@(3O$@dbNpdu5}X6|;16*HSV)}DIEf#b5rCZ8feLZ+&+R;p@5WK|nSu%&v z#7IaKsO`HLLkMB9SS%Kc)oOKgbksI&W z)H@Fbj3lOj=1B@OfWT%0zx(~Lx%sc>ub%%8fA!M`_xf&eOsvC@a~c7_hteFXD0CsH zb}?uGAfBrh0?PMO6i-K?zKf~^tmq!=B}SI_LWtQQMg+id)SR7GV`|oQ=x;OSsfknu zK|-L+W|Mh;5P*q=vnm)!;K&U7-EOzilaJ@ruX#TQ?^dbKu#)8lw{deXPeX1%^RU*~De(@17S z*u@YTj}~2I0uweLSxTmfK^P1~8m6pd-VjnyF$1B(hzB2y0dPwol;Xtamg%>{4s$ew zy1~FoWz2w9GhwPKlMcU#DwWnxSyFzx5J*ic(pjD^F%nVHWOOZW|6KqVnj+%)7o7DA zheQZZTM7>cYdVhp;xPNsVc|+RrLa)f3eDw~6N$A7g&JjiaN%}K7bd77I%bS!>;VJ% z)|sqbr;@enhAAg2^}b2YQdLX(Mc>3GvWpY7AqEQ6wr$(Ai^Za88ZfB3ZZ;fv7={W6p@^m=<1o4K?KsMIx9f?CLJV;$ zha#{>T&^=lP=jGFZA)#7RGkLYlo$~iO4>-Z=te}BS+cfmfhhxKNppcnfPoN*I6LRe zOC~Gr8$Sw~*esUIz??=&J;X*+F+==%El<;xe3A3u5W!>8fq^yEVEA78sg>iCG5AWTtt75Zf3T zKuCyKR5%1AcKg6OJBKrft)@gQ$wkEQ5cH`_#7s4Y7`Sk#tWpxKLLpj_AVZi^VgRo8 z#`9@^TSxdpBu2!XlB$~MIF6#)G!4{M;+ppu9Ex8Jp7bymPK6wOY#!SO72M*FHzo*U2+P%S(f3(ozuTph%GNU2 z594~hxw^W(xV#w0ahl-f=B8aNkB*MEqG_{Dxy-Num2hBYIcFrYvcYas?6TV5sx0XC zi?_SFE}puC6wpk$N!Iw51@Cg}Z-<$ZP&2`pz_K+B1TE?7G}(TyF+yMv z$ssmQ1oN&}O#@vm1hERrnkgbTF|Jn2zUu}v70HrxG z_4W1D^|f;ot}d@GFE6hyFW;P>zkKoH>&K73{r1_E00EewY2faov(wX4LY&5N8V9GA z#1OWd=?}mELm$JR|LK2wvRXC-mM4%22vmg82n-OpiDqghyZsP|yRJiIgOpQdX7-8u zoGY))OYfrUMjU*I`QUai6nxY}0U@$mb=Eww;D0I(J&T%2&LK8TKF}X%9xzr@GYald zWrS#|;-wamnEL6VDj0)`fkI*YmS`q^v2}w{0W^y=9~#_711P7BRpuiC%p_;JHBzz4 zegg+0X15S8p3NBvGa4`t6;!S)N)}LyF%;!}Gein88k(q9dR}>9-+?j2#c~m1M8w!M zR7Bg21A|j1zIBF>u->WNV5h1(Rw)$qzK!td=( z57I~kSmng2`YM1iVH>D#1EeWI(g`TSVgbV*KKTTu@t@4-kN^1Hu02cBn9`18aDc&& zqFIg1&&D}XngIs@@Ypd2l=6fR0JuXfi%J+!WJE?3BPx9^Cgc#!#&HA@$ReoLg1K`L zh}L?UD)phfeE`ULnvyU~7Z>Mob>1HJSuiVygDX}5j4=>l-!0m<8^`hd{QUCbA~ubg zoxgeW_{o!Rzxnp{o7dM@SDW?b^77*H;&Qv&4f|=#0004D(ZOQbJC&eqTdk@pP={rk zrrFu_>ec>}fBwzsV)5sH_HX*G8+SQRN*>_BT$YLgnc6fCk_AH}EQm&k#O%-`b4a)7 z0|J1QiVaOs&E}D4sMWHXMGlIRvpAbHpJ+~XDP%)tIIl8Vb^**a={}_1#0-doxCbboa%F(p}{iNRW?J> z-!-+l3jv}^RAy9}$nci`WTuC!aQ@fKh%m+IMLkQlEk(4xKh9usW z4Lbb5+B7RwNC?~pI$Cr`eJg3&)6HO66*$78hy4!z@Hrfxe13F%{QkSEu0ItO=W$g= z99E>u^P{&s`VN6hBC>zk>G|Hp%?K_O@3RntXqpm)0L(a!iqqIMY*B^*z`LA?w{(Z% zB1C4!L;$7=s=xtrQl=1?cf0M)&Gkup->mUFP@Pr{Vhml^F8ZEBkgU&NJpc8te*O5# z*F=<4`tJGjZ@zi*`t|G0W;+bpwP<2F!z2IzZGhwB)oQhjF<`aW*ll;>26u=EhGtoW ziMtN>+15AHixe}Ms6Fn|!4JD-7 z+m%1ns1!Jgiu;O`!`XjaXYT=Wyt8Ry0jM2vKtr?;FppxU%wdLfLhu`4Dw!!Vp_4>> z0=pL5Bae-Rz#a%PVHW{0yN^HVRps=91YZhsiTEGOuD3PJV*Ac`4qfN_*%Y`U(; zVyeeXK~Oxd`LT3xdo0F)jEE3pK!QL4EELWo2X47-+cv}i09Th+UwrZ9KmGGR{p|1l z?vqb`v)k_gV81ufBCHYvNVcZozK@91w(aaoI!=>nA!V7Vh|bIj^mYkA-}k7yVGEBR zKl#Cj?;rj2kNdulWc%I5du8R=P-Db?x#SSXaY8f6LJUk)Dle@-tQi!@!)wffLbphYXrM|#u>8*q*~*tRX=A>F>THhiKh#sFZ`GzDhQK|Jj=Q#kl> zKN#U4k3e%dSeq};%)mnl7}hEbi2#hbRLe{}53E5gv){rD0S{W==EJg7QeUe^P^Kcm zz5Cp@&rnnfKLzU;DtMHht%9@?BMPV9dA)wVatW!7NW|==K!v5|_jtQ2%C!=zX^64w zy0&ZlPHuPGaTwiGVH~IRdUJDgqh=|k^NatFt~XnfVm6@@)yP2xq2UYWkEU;5bN^*(Jh;TPk zQ$2dl(d$~_XFvVXFMjpwVYUAD#mkqsdlBg~%mTFug*}ZV1T-ZKU~<_M*cfXbrTuz%b>Prlv7eq=31Vq*`C4yC-`i|XLa5Z!w8=3Epd&mr%%XO`XmoMRufBMhw zfA8rpfB7DBIUZ}y*mukh-kTu;F`ar*_dk4XXjGk1?|k=TL8m+^BVws#o+}}&2AU=v zkJ9zHTG=>4m*cm(+~wT)vjoej?Hvx4ymNmI5Nj=Ju0*1bq(xkW)%I^?l!^E>I@`HLKz(J`TQs zqpFc%wmQ&jS3+jaL!QR+;$`{sr=LD~^zeiC-py$OKiyJ&Ug~Ydx zsC#HZP~aO7YX2^^!oxt^Y-fN5M~6OC6)58 z{2w8bV|=RJkT2H5s?TJiT1+G}U0!TJq)dl#guX8+=iR=1^%Z>n`L`c`^xpR3;_~wG zG~SsRA{z)Y1E@w4L9G^SeW*q?SP(Tlb0LBIILnfy`i&-{#8|~L6OoQ13@geE$D<$t z6R1Gbj>TVSoB;na7_ErF1f*OQ#q@C8Pt$mjQV}qK@Y&~o zzqmI#)dfFX+IU=318Hh=h z>JRXayaghyp08D@QiW53jLb|-xyw0cb~=3swGg5=f7Syz=}@sjp$mLN07gWKQ%Z@D zL}Z$#{eCx&BLJ%EG)?0?iy9^3lmOv4!q?w?`|Y!5j~+i6$KyQD$KwGkEQqRTqEq%} z?kaP3-kTb_{Kz>+PQ^oP?sL|z)_KJ97az{=?EWt*iDAgRT@PI%(*iOR0;473i|wk; z<>sc0W9j>j8FqJYeSNsOoi8poDXnHaBFbVM-)_^1F{FAAKsj$eEjxc%5@+u;Vqic! z1YMV5u4YCIIfIK(`wqYnYXgxA0I7K}dT0^#IfTAU01=p(IDw{8U_2h?X=;KdO*c0; zFRx#I_St8@|NZa(@P|Kq_4QY;UcS1$ofKfx!`0>X;_|ZVdp{^F26VxRbqoLi%kbUh zE&JV)mNXfV1+T`;AR!`Pze-^B`VRj0@Bj4p(c|Cz`j?xFs}aF0{KSbc`kv_iD2)=r z`3+oQ+kgs9B6wsV88>Na=>AH?{I@Zyexv{ClCDjlOj^i|r zqo^cKy0V-T6S+2zIhldGa6{`Id6N^vi1kzPIx1Z-( zq=MmG$~@01;;Q*^nu|aY`1+e~{_XdFc>A4qZ*T8XN;##Rgfksyf59g*kMBOcF9L1_ z0jhbab!yrpp2#Las|!2=2!IfnAb~MxmuNfWtIcY=>NBZUMKneLEoH9EX|o-w$bP4G zoJ9ZurrC~@&INY+Bf8Ea0z{x~_x92m4!nRQX4Z_&tS!Q@ED#IbzvE#({sF-JL|D*S zpA4BZi5fEIPR*Mnxf4~_SXvxf%TwZ>uShrU5dXgea#3vOzSW z7}{SD6(10H`Xy6<=2qlhwglG5Nd6GF&IPq7Z~!1kz=myryqUT#OI3p1YwBkA6eE|s zqBKM-RZ<41+R}a#6$G5;xy@|GYBtaFG);bOiD?*C{jf^eb-<){4+f5t1hLgPXc6)O z$nV6Wqys`4hSkOP5*tgnl&WS#TuPnia-62A6vyE2cKf*iBJB3#mtTIxxl3KoOkGZE z00B}P>u7|)2+IXD175Z&#(#l;x53R`fchaEv4ik*Tg?cO5g36?2_b=XOc(3!V%_x# z2((xMEl94#LPFeZdNrHp-E@Sb!ir!R)>l`LQl^{-m1hlgk6^qtjv@2JrO6)g{oBXj$myx zN>39UhF6s#rIfhT!qfp+`XB$_|G2xm8%Hy6KbtOwmE;7ium-7-fB~4#mozh#g;fK9 zW?uDy8E9D4MZIm-itos>Jrom|a_&~E`FMo?{QK?y`O}}DzVZ0!lLwot2QObtQz@%H zQ6doo_Zsn=N@%7&nZ@WH1BIPQxhYk zR?({OPiuqQmTCb2kiFC3jhhA`3u@>Ks+x7wA%)>fPOe>4GN>g;iG(Ps*f0-&zb1i0 zSCLvu-wzj;S62@ouGbr%>u474e%88I_usnLWj;Aj8OWPx05MY$0CU$9vE#30F5Zqa zz$!A$v#3@z0G+0Jx8Iiv(3;9p3+IG{U`nPb=bF-l#a{vu7@-1!#+A2Lo1b2-<6MB; z^#0CFQ%7(ymW_cCKtd$2gpdFd+K^zo%B!9d31~^Ah~`as07TT3@bTj-GkE^(&MNc+ zJbL_Sz24?jFE6idZ%2p`jj^a2r0pp)0-;t3va)Y#3ilIY3hQ|^JW~NUsRt2(YzYB` zVcwh=(4bT(r3?eBPsK*#E;CV?=e}S0pl(8G+&6DyG?@<)sP{a82@n*~h$%gPe%tqW zbv5{aRi}Hah&I|~9Ni5K0YGB*r-*gXeg-D3tMBo}mc8K_S^SD8&j@Oefpedwmbt*^ zfBWK3pM1LA{&KVGSDWqO?iBzclSy=7%$o7;S!uw;E?6?eD&}uOLivv^bzN#-zc5s# z*a9lFK;!*fQx&PD6wmZh&LWVzjyQ#GSpPu>&kwcpADuvfERrgJXb6ZK zevS=_j(6@?n=lGucPgL-4QVm65$8`D_83R6E|NAU!Uc&g0=*(Y6#7chVmuiuV}MiZ-Ebqhy_e*CBVM# zH|x#i<>m2s*zb1x-M-Ali>y*=sYOH)u~yyh4~OGX4VZzML}i*rN=#_pug!$(F4t0z zvyp)@7-3QKsWJYq9ZjAM_-nG|etBhGtNPL>LUl}mkPH}%z!G4`lo7V8?s7Bq38Ws$ z>d+?wl3JTO#gJ@Rb(fc$m)E-l@c51X^6ILJ9LFi;KBZ1&aznQ7EUUPd&O$Z=Q)uON z17$6AcFk%J7EG$8S8>jX>NJ@M^c|!GqCN&h6MJN_uCvw9i-L%xlif5SLQ1LYI+bxQ z%b^z8y{ed0BqN0MdpNU8uxs^Z+v#JL;vSmfFB@z04sY z(NMHU@3vNHx(h^PYF#H<7K#}Y$pXY$>usWUGpd>dbZ#bE8Pi;57Nverm9PO{HZhB*1@z-unlp+z05{9qme*K2S6|ng zP}9gDArYpORCS)`*~hB@m}t()7rkd7VLwd; z$+1J5=XsjPJakNu8KFz7RiEZMj-!xG3MpYx1A^LM6bwk*hibZMp`TNJ;{r5Ei#e|6 zp$LqSh!Yxtv1uk)XMS|Gz1$314kCrwR()?G$2t>2^%+@c^E@67cjE|%kh{Fw@Bj1f zU%l~!bKaqWxN-6ceQN@)CGwIZpuqxKmKK29vPA0CwrPAqNDaSr8J^|@rceuX9jpeb zqAoAdL)CWVI!8oQfKJH{A|_5m3{Xu0nn)-H?5UzE8u0huc;H(@MG;9=MI;zK2qFFf z2zw?B3lC@nehmqgw<-{$X9=pH&4GO(1zB7IbhU4!kN^Nsid2R1uulw+A3fZxSBPNd z%3z5zHY)9?p{m4e5H%1L5g|^1xFD~=aaceLf1%`a}M0Gy>!&|vo1MFH&@m=Qa(mvZvMz`_^Q!jnYRM1_MB7th%8 z7yksE4&c$P9k&r#TwLoh1lz>rl$e3Ou-Db1B zytufyyxeRy>-BmVR{qz5qY>f5ku~wpJyUD>6A==*(ljMzwgwHPoUg8~w%bigX)fj4 zZ@zi{;`ua9o^sYw#_>40qeiLoJiofRxxG6;ODDR_o6Tkz2B~$LCTt36BGOt)0X0Y| zMnU_{q8JwoOK^|ox&w*`Q35y1DFkFhLSS&v#Mq1tGTFn+)#C@-Arr`mRvFb)v=%=_ zx^C$ERjqb?{p#7X>2Lr<5Se#(&;RxxpNSmN%4X9gmPCkn&o`s}?~x)@k&%}I06>V; zU@0w6n+#f2p{7!uydj9xW%juVE_7yMRb{4WQW40RR_hIMiak|DRWLf@rcz27W5^`s zDpoZO>#M6r@AT`3YFR9&Gr2HE;XuydQUG-KAW=osMfGE`89h41>QysPqZa2Ew7Ko& z*m9mvcuYe8buOMk>OdyAJ;ERV{K=b7A3wPIc|WXF%RChWblQd^aP3lR6E!$I+&t_; z2m=&qZg%d|@-c9(W&i*n07*naR31^GHGm?JdmGflrAVD;U%4|9nf2!hMXl8kbEG?w zhb(fJ7CjWaad;@40ur{uHK-0+zRXbDOX z#0O3cY5|e9MyM|-se*{?U06Uz;XKLVlyc6#{Sqf&P}M4xh(wh*hC>dk;bOb(SF6=# z?Sk^t`!!=`q6DU>P-~n?(0U4|N-l6KmwGS3M2Yah!v{|uKOV>Ni!Z)-as6UEjtF3? zWuD7Cm$^tO-nl=H<221^;5EDolv+!vQf0kbJ$dx#`HL6RG&AQRr@7Cfa}h8!MPNcP zbc&c)+yEerq3cF%feqeYw*)|DOvDHT#%AsU+%Y`3Sg(haNK-}uH1ShZ5Qr$H)Rk(_ zpTB(m+~(Q)vhe&BynIy&U_5@l{=eV*!TWFK#3lzRVhCn+DR7o`1!o_)NOH~=o}aYm zj2=@n4^Ke=XhS#?cP7&a$D^%Q>Yia$pw!Ufs|Zj^DOFiCD^V{~N;p^FHJ*T)+XPWk zLo-WD(+D8i?VJ**v~wJds>60MCdAM4R!6Q6C2Kg*0F}v%*PFR!#n;qp1dQOg5b-R;AUYAI%b5CNqW+1>3{tKsVEa=l*V zSF|rP)@sD7J|jXA-H$a95VIPRXjP3PmxAQuV$1!M3~H z4y&HgW-vu^{-Lv*xa<3AuHSs~>YJ~D2;P5h^Z3adx3{-nd~to)gR4B(>rLMercAyQ&0sM7=~*($p>2LOOL8Z3!8 zW{g3e4;y{J^HYT#AQT;_Q$fShtXEJzbxvW6=Y5F(g*A`#h| zsfQavU`j-8s9`~+H&ZDJ3@Tm{htS1LRQ<}I$6t3eLICCzpa(VX!|4_%B64CiWu(6E zC61Wrh?tpFF}9qNmwxWUV5;PC#ESxFToAh&xQdW!&Y2K7rLOC`oO90BVnG0Yjb~nK zl~T%Fyv3$1ATl7gQb!G9fNWUULYH#t@_Mt$DZP66^2Li6WuE=Dl~Ur$NG+w-B3|Z{ zTJ_Y#MIunuyWJfp$~onn)|>T<7uWNw{iwAAIoP%U9Q*{P|DU*I$)s_wmPXzyJPwh;ST_QfE5pB+g6o6P$k@OEYFR`j9dpVy)5-DNw}|`nJGL_W~Rf)>_8#Sf!+% zis8wpKH7ECybIeTnMUS8JTXen3NxRu(^yug$k={ML&O1LXO85;6GQ}x9d7_)mI#J* zvR%Eog-`zS*;{Wu{n?K{8dmG^a5o(D5PU+&}V!htX z<8*U#^Wyr2Rv|=b7)MY6M5@HcG)-kLBEammGnrZ`b-&y1xBG_=AFNla?RIl>b63lp zGB7eD_8qH%7%BjFNdpox6d$XHp%Fk>=wN;wlN%T!WX8-)U`Pp*CD4m?cXcr&5HtZR z02M)*kU10b{#dS`-+cQGXodIR$KUZPu_m}t>gIk2k$?;y?I{C;lYFM(W9-@ zn`t^SDYlk*+Y`-m=YE2JzNMr7)fn=#AN8`FjnNR3F*NEX!0gwEd{GMgIQf5WXc z1pqDG^)Jw$#@vR+OdZD-00OKk2-x*7AK|O7@BZ!ge|Yna$M3%NM%S0Zcmrc05q_#fI8pJIYAx;4iP(+GI(Xf@aahh{CtyWc-iC9d{$YO^Z zH1-v>N;{Askr-&}EEx0PBF&=!q}rLP(eP|TFGo6HTyrL3Vt=CnH#ApaZoMi1Gg0J( zfZ|9@lr~Kt*hnRb5+bR}A{}0?Pn+KeW;V}rEv1SQF)^o zb!Jv;9mmmUEhD1a%_E_UsW1eYU}lLq<&?WFajK>44~LtZSL5MG4T@YMmx`K(+Z!UP z=rmQgXGbzH6$Mn7%e>p|hG8J$M~@#Nf(I1j%!t6OfGAQ`a!NovPBW4b(d_(TB%@G) zsDvGiv*R-p6K1B43Bkya5wuQM7pn)CYmkvt02NgXU3`T5{q*9+?!~hRCBOaMFMs=+ ze|q}nW$vexZN1*U`IHf=>YQ?HZ~5}JUDOW^_h^biYz6#^l;T0cQUf!lG}V9Zvb z=>2}@@;@#gK5H(DWYJiur-z*%l99Z*H>);!8=xW-RZ>lfk!3%^UqAcu!yo*|qX(C( z^+heU&STJJK%3KRL|^qb8JU?FFwvKgt{PnetKS=u z+VFPuM&5FAsRDr+fr`y@xx3qSUANtCH|q@(nZfPtU6~8|U~B+nVlqT?GxHg&DiD(A zCJF#dW~Ah+z{}NOadnJ+#~@X!FxK@&|K!o-dSEFCB81xIgvg?>-%a0syMK8NVDQ5a zy5Iip*Z=&BkKcUj0$_jGA4Dd#3Rb|1*<9=1bjq2eMEpDhF%96}zFR^}@D>5x7%D(C zQzF*LDTouBnrrA!P1Q(VfEdtyrx^fjf0#u8`Y3h^mwp(SNJW)|-4o9=j(P4GvTt{Hej3u=g-R{;i!>2C;|SE!mo1w?cyBR1H@%NAocGw+)m z_WSMjqRVL*hOWyVHT(~nX$%=Q0d!2qy&y5A1by!u7EX(#@st?)q9dYVSZ&sul(VV_ z?%C9kNJXq&4OJ-xngFMwWLM8Lcpm)9!AE0GsuCHLTux^UY!CUtGUD z90XO3d^%4GItdda7ZJeZYq6>XjV&k7`W%vI0zVrPVB%S)#P;~n#lx#L=#khsBPtEK zD@E^a@1A`#T|Wa(@WYR;e)GFu{PQn<{NPcqy4&qvjpJRFnb`=H&{Su@sxlF2w3V=} z7V`Gxy$k4f%2`q8bIwyvQU#-T6ARhYT&%Cmg4KW3qyd@=3PS9)t@?~tXpok#tHdd_ zNtmrape>fQd;*LK6HzfGJi|?(c~9C2eF^sQiIa9F95@dU=YfM7hwZhJ&(5;?MG-;a zU7rrOW}&zxQ&F)}Ds#;_`!j~mvR`6Ho5O(zBU5d50oGC{xF31V zjT8)$*Gx;oc9um%>KQi-L#NX&ps(^;CDP(%;wzr2K!BY9SVa&mHR>3ERjEGIu`N)d zRtn{mIHgxFU){WVb$7ShZZ6lW^=7-xT{qA3e!o{$$7_9zhll_`N}Url9q$vwoO7gy z?ftYnq9Ub~Ld2Z-^73*RR@X0I+}+*H^Smq-3B81rQfee7!CG>7+;um;C5RzXQv?yY zyW2^vQsv@eyIQULVaPc@d-nX*Z80=J84yy}#gg{45&;m6NDZBsk#lAu^-<6mT{8mh z7_=6Ky6XASgLO_ik5gvN%!#`BI6Zsz^6Rf*zk}@-e)OZK|NX!J=Hs7yf3xLMUyakt zdAgH2B1-sa5P%f`L8vC;M$${qSI;&Mo?))bp^pdzXiN*kW7%#PzCw~HhS(AlvCIDe z&P3^m&J4CLBZNHPa!!ex?GY!{8e4Xuhatj=kK?V>(3B*=#+tt$AoM$R%K3{vk2t5d z?el~z7;!#}yAeM5%fEl`op*ooqYu~H%LBmetMM?- z2;L8l-DI}d5uhs*XSGPq!`){&@6O(1YgYq+h|HxHCH(&e`T8p`gSXy zHcqcfy)&JeDmr!A1kD%?P>mv5y2H4h4x#fE(pFTfXDzxm4tN^TS%_$6eai|w+roe` zpTJK=K!8M0su3cE(*mX31&7N|gx6i8f|5-LOb7s_7RpA5Nn3mPyk>jthEg6>)sUP!O5rhpbmo(=>|`SELwS1SO=79uGpOP|8i(U?nr1|DA$+X^#8W9z zcrqh~`1FMC2CL6J%-@U6kqeL$(3Xo9*O2M_;U}gBw5x&u2%=&JMC_FEW@uvC+UF^e zm$Agbq3qcWB|UNTf{V_iK;)&3nO$C9ipsZNfBV^AKl}EZZy!E<)OEd7IqVN}KhL$+ zTD=Zm7D?iSfT}W2GZ>Uw5djHRf}W##QbKvvjfj2UZMWO)b^~Dh!+xBml(LGNYOR%t z{C;>;DYeYAQ|qP7#YI4LU(nLxGni{|BxHeV)~|+?(`LPX`t)haFL%3RtuT+KGI3%i zVkBk+AHx8enYr&1b7DrX>A(n~?>bPuy*YrugGb%_-+$+FJE-8DjUak+bN3&g-MxGP zs};Qe-s%^>{P}Nw`|GD~UY7Z8cX+njKSP`dCM0pKITCPY zh{=`f4yhz_z~bzvJpUY`V%PKU-w!&`P$VQXBW8yI8*|BvRQOIVe{Z7!vYL=zU<5!E zGh!fy!vvrG#~1Is{q}0;hc5T)O_e$xYS4AnnhS{okASGEf()VAZ)@7oDGj|s^;H63 z9!E~BRfw8G1OODUc;mgQ0?Oh=;xLUFfNJx03HZk2lwTt?pJd`DLg*Tnc33FDspC%f z1FeU4IBW8I;bsP+229AotoPbg%`H>R8z?4g1> zX5kAJt4q}YETuFI10wDAJJ|2```u|BoWXN0_M4{JX(qMQD&m2dPmJhRTpGBkv?>S~ ziOq9C8s}PwXuV!NxO%V}R)^!^_V)Jnc3&%$D#DU75-D@)6Cpv@VV84C>@b0dh!jG| zWV`*{aW|X6X4Q3>YMJkDU%kA(zJ9)c{tbY_J8#3!|M{bz{p_dje(#OT%UsI!?(pJp zxCT5TR)B(N1ZrvoXs7^<>C(#L#j@A?ae9_VBegpEe1!m*f?2p~E`&z2ldqj$d18Wc z?-v11idg@S$8k@;MM|RNL?Q4Nu*p55t*K-80nM^6c1i8&@pN~IS`G+<{=X5!&InqSKpL|aUC?auI1$cfv|Nf7Ey1dx_;Jxo5 zBARo6_ExvpZ{$|jyY|&n^GzOJbL_SyWI}M;QTixKEja_yK21c_EFVZ>O9Y;nwVcRRn}JNcu{NK#AFlEX_{Fm z=UhtdvUFXSbK0y{+x6Yu-Oi0ZMQuEk#AR6JM2uQH?z$Xf33!|`yqe*Wy`wSvK; zhd`iT{rw9f`0A_cyIVkmu7e+bu=(BZe*5E}eDvUIV=x|$-yROvbGZd9IfGd-pB9R6 z${z5nNIUyjjzB$a4S*PduCG5hEKXW{h&W>H?-*jEg^&-GIe((lvm;>wVkV6#w~>^^ zK?NbIqBCeUs8VJk)g6UvwX_u2XF=p-Cg5AF%>(q}3RTo6Mfo!K+QmM@irs z970mHz8{F#6jDx3nsiWhnx^N^ucv9c+rg`w8&165Y^G^G9FODmgsAW3{#m`s}&_yv%c@jSe9{hsv@EQR_h5~Wlp*4`o6!ox_J2L!Eu~k-F*4#=BCz? zQv%msni9qQC$Dklx$N%l#%bo1RjaBryy*0QPy*ap+F&Xb84cb3L#N{?Wky6M>bkt@ zyUdqnR!be{ad$Y>0(CB^#guQ$)c3v5B)h!0V4|CsuRN4|_`$^oKlt9OSI@ru`}4yA z2w^qA`|quP`r{ve^rH{neEPWWS>$HFe=$xsqDQ0&Nkv6vCYOUp0I}tBKo5mpm7f4g zzia1M>~}+nsS(rSGVP(nSCv;XtuzVZA`+RL{}Ei`4o3UI+7l`HT2c!~%O#@;ixcxX zTwSmsg9GMl>$6PZ^vVKBKF^>4n%+#Kz!4F2g95aaSS^WERrQhzB9fi=y1ZP6?}lYW zj$H?U2m+WmQLbh%SNPlCzkc^Wzx?=zAN0d!JRHk-aL?2z0UgCQKx8M&b7G^`MMHp? zcjq@%r@45y*uPt)R?#Xl&85`pV;7vnM2yosms)ezsT1U}1Nx9*^@} z*4xa?DQDuU)fa87C|DwkkDgKhECZmK6@(O65hkKKrLHEG#j}}#z12J*pRG}{K*^y^#7s!If=-=RF{o5JNgTz{u5ELMH znX!}+zJ7N2Z!c>RihH zaDe9C{8&uX#!_yNhvQ*XRRhaicBK0>i~@j4~M;H^3ycBGLxB2mu(hj4-s!R-SIfO$2B1itCgsY)8r<;KI5pZTL1tH zu`1L8qs@tt2`y1dNdv4FG!|6Ccrn|{^=kE4Ri`qKquWK+@KY)E_SIwtLk}PS=!d`i z?XOoW?zj+*eNP|%_@jppE|83=-0fZ-4mYJ75DIfum=H{@f>ndpf`T8<|DfS<4lnq} zYkck{J&BXvy8&l<@r5?I{B@$F7yzs%w1mFz{CjP;10aD&6{+mfMzB(6_kTnJ268rH zyzur)9UzCMP4iiQXd(1$Tk<<^44@e%o2edmEl$@HGsG*<( z@X<7NQalC!a#4%7jvR zS+7eej~+h2=q158j!YyfiK*6FO9?VUV)gbr(m0OeI8M{#)=f+#6;w^NifAd-q4DkJ zs>}V&&CQFKFPV9}-KLbsX%;=yVn~Y(ek*(enF3M33WUZ8QiTvvp+Kd?TIYGR+;=Ib zoRV2Jt-~;E*Q*CtmtGVTllQY;zI?g)>Z_}(?Yr+hS*@6`US179|K}e)e6Rr&z#|gu z4!66zS1J>e5-XyBmhihW!8lOTl8H2cWBLE}66QQ)ycS%(Tkm{li=Mu+hQC;&dfT~o z+w!nTf)Kz&RituC5Dn%yrB5C;&4X4{=31(a(=^5MbM_jXh01&R$f+k1Enn|!Q)pxq zn?|<1Dl;`s++!~)wbUw=mchtK3Xx!YC|Pi(vk6qE1kV7fDydinPCy1XxAoJ{{{4+N zp1k$+N$Q4i9GTD!1-v^Ltzt81h7P4v=gkI4f~eyDKwRq)04OD^RVB#5&Y1Gm>CGtT zSa?)%B<4m&df}V8nZBXLXk(dD6mIKp*M-ouJ@1)X_#ea~pUq zUHM~KyCwhtAOJ~3K~#q)`gcG4w+Kl@BTYp->*>U5Tw>NTPh-LCtcmZ4kPvFENX6~d z0uM!eP1S{n1U{-9Eqs*}08Y_l$$l5v)%nYf&z*{fr*2jp$5FUeGaJ&7yH2N(m{8F@ z3eLJbVb*ri4q*5U(`(6JquT?58%9=vzkm77UqAnk)q0h>A@{2~kJ#F%(uN7CnQA2? zL`a#P3-9N-oo3CogK@1c?-F+d>FhBzlxPEn`q8Hn> zsxoseB_-ahR{)T6QjscEwMwm~GEK+TYOQ9+ag?etA;TfPDga2t+&~y+&N*+l+hJI} z^UmAPo`3tzx6f)V#CaG7&kzrIoF*RvosR?d{AA2E}Yb5O3cR z8h{u$Rs!d3+VAH3uWioPetI80S>B+2_g9uB(SnBIDf=*D0wZSfyh7>Z&WIRixVIqP zn1~2PDilUcW{^^7gk|otdYzXcPWQYzaaD%J>0<2?7&JjC~6Q#siih?+IV+M&@-$-JUQpjpKT~8m_k6l#_{+G8ZtFG9Hh^YR@^f%9;tu8xX1j zKrXc=qLgyZ6%pro8irvt^q1T1ZnrPBs+7J=Ln=rCH8YaTV|1Y!UH@Z(MIKUhNL5?}5=_bC>{gpm`-*J^(7rn0rHeF?xy z=%fmNOk=ypn^+!Zh>Om}Uv=xH1u|e}Fpec9c=YJudcBtFX{zI)p`G=B()FFx>fB9d zHHwItPbn4$+yF?##(AErR8asDRabKRft;ASzDpe9Xh3uOMKgooo*`&(DJ|yGU=5jG=ZtrgAX*Ppl zSf!M$=?UgCFU)|pndED=A5BnVvyz}a^LcFRv~Uq1GZ&%~VuGio`&5sI~Nc&&=~YnHiY6kgR1T zUg=n=RmDVMu2MzBrx5!5uHeq-m8!4|{R0D&Dn4)vi4ifS zoN`7Y5ff2S9q0Mw?cM%(I2IF^qX7tl8*eBA5OB`@FswJ5?Pha%vAMkHRs$g7JWV+z zLS#m%bvztODf2W*tsV+h#0QMFCYvias}qGpB#Jz#(RWidvtby9VGxzw-QD4E002tN zOw#O^z)ZBc6xcFXHoC>uw#|a1m_d=aTao4=0-#i>wE#p)Tjr@$c=V|I)vtc`(MRtA z&innf*$6g+6@cP|G(?ZF0zj}i9+hxa932S@*L_%KsDvtA8S87%=N z5(5MP7w@2mlrqOC?$eXv38-tkj5u-1Id^Ub27pp4IL+Un%ws9DkNPBH12V`8X|;Lu z_>J!Y^7E)mKbolLhX~&m+@%S=n&Du1!%cQJc$K;(bV+R;sUSp zV_}$S4EHnh7KYa^Dlm-#P%bYnH|sTmg}_Fo)@mUg0##vVL~yF5Ha4tNw`2Ex3T)odbQnb-hBGT)2DBk$nDKdt@C;{tb#TGvP`1}9#(~qvMhVghaO*^m|Y(}gI)t%N5wJ|cl z!V&nC4xMe<^B{7neZCV`;t+W)f}B6VPO0xgFp0&6xO@V!zx)!bf}Lu7JiQ)(C}e`! zfJj7)m=n9#W1#op4I?202d8~Z5W40n zMqirOM1COnq30La`MxRvRUjY`imIrVQWawSfT$L=S)`gw#jV~?H$Kv2GoqmFY*wqM zPo7*|T};#X>eWjyU9VO-Wkdjzd78bPndiBbxt95OJl5j#(xG`ufVtGfZF(IE4}r8H zao2TT2ae-7jgv1_Um1kaT2@t6!QcR$!h|(_SlAMKx^UWuKGT<$q`^#Uwc`N}dwBQ| ze)Y=_fBB1_Jbt`2ok~4`%>XlkAV|a!a#U&=Dtdqaw3JRL{_@nz(rtZL&bjNlo;kVNk}znMwU&7vYh6-%Hp~hc zX|=w1yt#O6IPjB;bvxFe)m3eqpM}PAWQcG{=3Wn^_u{Un^)3oN{XN1q1aq-6I+Y8N znFLtXo`+i4j_|AkwLl`-Y}Uij6Om8*FmDx_AyEs@8UZpmDS<{f;HPG#N)?^vGFMT9 zX|Ae znkxxm@ z=8Qx|YL!`9=T-FtOfaIV)_LA;)(b8SZhi4kkReK~0d*|} zy01}c_=4wu?TvWGzPKlt>NG+v@Zbu5{*|I1-QKW2f!E$kzS$e6e z%!qhDL}qpM%z%V!*LOc)X1cq&Dl0QG;>3v)shE=T&t=@EsZUfhsdVtkkF3cw&+izQ zTg!;1{pC(106H=#<_L++LswQVaR^P*bWPK8h)%F#;uttE zi>5IR-t&-%%t)yfi?Ka<_~f(evqxj*gK*AdGUj(R8MC=bn_dDARJ_B}^Zq-4Y1Q?D zRUiiDWRp??;9h#Ef}`34oI^0PgGhrHh)&Ol!4anT;N#2X|M;Ix^QA`*&w?Zad3_2M zbjr%&bl7?3B1+C#)PO7skULHW%A%s)5rvG*Kx%M)JuyVk4=JmGxM{mQ4&#`ZIfSAW zTl_C3cl4N;*u|L&TRcSXPh)kk4|Shz22{jKZ_r{lOZ!RD3QCn}Hkn|@57dh01CiHH zdA3rCNX!TVM`TpZl9{qNHoeHx*fb0V{`iN21SCicV7wk>m5EEkfcX&X4{)65m~Lkz@0 z4IxA(%2|fK7neIAm|5FI>OxAnA4YBB(mFTHDWx$FUY9x9K@hTPk>o;&++7G5ihjt8 zwrygQ^SIk#9Nm?(Uk~d8=CO zM4qKYA+`{Q77*Q!_|*p=J$&%s^mJ_$96Bm~vbsLGnHiMoB!ZcV%8*8tYAlN0w52R5 ztAWMTbzF@Kbb_kTv)vEZH`}I(i?#(N(Oj~*R`__csF(q`TS&xaLPS%;6u{^(W7x~9 z{8trK6w@Q!vy1vNUpUuI1Ln(reW@w`YpNXTjIj!K`f~O576t=}S{BP$hcT&<8s)56p$0Id6pug@ zWatN6-Q28CS0MxiI7Xr%;#-#6K}Q(N{BraIAm*TEIZNpWTwp?-g1GtPH1p)jqe9#Z1AWkS1Ha??ppS$#0g`?{rMvfIa) zV;uK=6GMnG0PxPIP1A@#)J{%MIdB@YXRlLE+39WGKV8+^@x~ZLl|@1fZ5zAXHbZjo zSdw=Wf_tRi<+osVRI0WEQ`0m=d~>teZP2#(;ukNz``vGU{tKV!7QEl@#$ls6#$c-1 zG*=VkkEv!z%7$2$x~SbjOv>t+eyA|zCmNl}@&C;SAB6=dDPg!;P~EdDE6LyQ`AnBm zo`++_h!B{G*cV#us!_6pLVQRakb6C|?{};#JU&?+-w6uke}GDi@}@J+!0m&yr2Rd>7X%}qZHNEyue{K3Pf zX+*IljrlZj42Oe8pq_oyNG60*W)lX5pfQXgFGdMEhsIt^eK{( z|M#)8LlvlpA);kE6Twv)>ds6dg#C7RbB(sam%sGz_kaI)zwwQCPftTmo1AWP-VsL6 z2bV&KgBUqgq~d7K)>(WPG@1MOzX>#%CjULFuNoR=7a6#<)8BfVQ|XFeu!AObd#eZ^ zP1ovIPEFf2O$QE4>^oX?usF9u#_202_*4O}%`LPzs2O=xTaaCEAAI!j z+3Cr%M-M@4L?$*Vg-q@Ns*WM47N)&O%954T3eu4?M4>hDH1+SQsvS^6KVY}tpPjA? z-w~yYyMrK9cLSh^Kf69vO_>u-bx$>H%#uxs4JP8PcD=gLYgJOpYQ}*L$s5YJ4=8Fd z5-sfk+O}=mHiQ^s1R*wo)kuxaJ2{kGy&JsjvO|Fj6Nn%wJE%xrbZaJNZH(*na?GdR zFw)fa{g6}Pdu5T`Za>D*_q!oEV2qDm?$17a{`AQsh>nIqOh5vjsznH(=#H_888o?z z(KW4&IVIPEun?PJ7#GXV1@S|4TkQ`$n5kujK_r`$gq`>ISu7T#*qBm`B-x;|Y%x%L zWseI?)zJ5O*n@$$-a7f=?|tvv?|t>`jE3Rm&|gA#u)#3G1dwV+3hXtr7SrVY?cN0L ztdx6Sn%0EPs3p_kE{XT|oBpV34#Ckxcr)h)9+sim)b@Ztm3@AE%+FaPhC_tq0RMzP zg2?j>)%W3pH94Hf8Vdm?U4 z;6zCSG20YKG8EYL!!V|{AOY?5ET!10 zs#zsT9!jnWS;QF@0J7RRrgF6+0NS=)tyhb#Yn!%Rv>aGexybqpmj=pkv3@`~Fw9`e zUbzSp72mSmX>@>~Yns!OwVI`rQxY@VYwvfgWXBCFBHf&@n1iUk4ARI`p@f(9s$>+C6WD8=w5C`hnsfR$iDL(18i%oT3{= z!R(lW^EU6rbf-+S)pqo=?=P-MVQRrWv?=1D(%%Ju+1xj&x`#6hcklh&wWtShaf(g6 z*2jvz344DJW@4t9;+oqLGYcH47~|itp}Wn%t{=AheT*xfZe#jKwexw|1p)V@ zsOFhWJ&RZ^sW^269GjKH{y%%^ z05aS{Wa~aXUxKEy{&}|!_Nw#a)Q{Pe1UR;9bwwRkSqTm1Jl%PInqlmim-i_-Sd(Hp zP(YBocQRdy{U(fPI$IHR2?(Nj`k>#QUwX|l1uG6YD-P#&--iPmnVQ^oFnyJp1%erN zdwF$vb$YUH7y-ImGI*_`@P`@j0HDW@@~G37C*l=3j7F{g2q!OQTh z&{9pI3N-|lVZ7S!`;<B(9|#$g!7(P+$Bv%u5VQ(2%YM*qt`?UNAHC4nhV;1!q<15Ck5Vsz#jNI{A~Xaj^b z%h2~j8lf3ohj!7fRx9t;PSC(C%1mU;&R9(2D5{b*1mX-ct(_da?h+sb4vrGIS3M-_ z2egd0-U>hZz3+Yh``>!<^mOQ7Y&XwUwjqo_0uqxEv7<9h6HAEAE{sJ-#dNo9$bHMB zrgA=2Ky>&J-TvLz(fkD_Qd6$f0@RJIt`kB@uwd>A9Yt$I6W7rp5*XNJ%FA0zex@cL zD-y)aA;3&U+&8&>%x`!ecTC^xGjD#ca}zNAvG_t%?iM0&^p0qfV=Kc^zy+P3!D=Qv zFoP{ic30BD9jgPy@Mb5t+3cRbcy)fVTrb)&WiE{bOFJ$C;Hj-5eLyu`TVSf{F*>QC zKqqb%6fi>wP(T&?5!+$x#~j*bO8QP#yaX^%7~^;@OjDs$2D=$6wL(fjV3dNRoF!$C zV(Jv3oRI};$lguHU8l;($~z3hFs7txF~;R;31Se(rfEWm-u6vo9KDpu_YA6WKn2m& zqYw)OSL_2UGB29AUM~98BIS_-_e08k$^rwtjc*pHdZ#JmWR%1+&U7%X0Kh<0czG>J zQN&%CQi@h@#^EJWGBCg)1P;Dq zXx6^Rn6PZ{_Gg!W_y^zp(GT8x9LSp!)l*I!4i%gBJ}QDh-sXZ(q>{jV z`&&H<;u+8xXWuu!=OY)ReC2GXwONzxTeo_+1CPW|3S>%2iP_|n6=bg59lJQ&e56#( z$p|)6#>YYW5CDmXGmJ6Y>#J)g^GoKFb*BQ4SUe?`Q_49z{n2Kb8l9GS$smFPpeUUi z9g%fiB8CW%vD^3iF)f?MDrD;+o0jHDWdT`%eu-v`5;LnBCl zRL6&4-cd}l4n0ip;1pl~%ICiK-EaQxcfa=d(K_dAk$uyK6;`SPQ)nW9JnVNdHnE9; zY3O$`FcVVpAo0HAU*&fEE01I3;jlb?51wm2PMbYY1#W06-k_2mH!C6oL^&l zS@dxfSe3Jo%imMo&kUt-8PN)T(q|2*o(v$Y$ToDb%L>#%uh-#5|FT*oKr>P33xt@}0 zEx<=@gj#`MW)RR1<7T@*TXbln7yqzotPhllIFw!)w*uPfzUpIhI*H$?YRz1GM->ji zOq!+%kvdS*cEgy&fUw`}a}rNH!L+PfFtXrg1Ljvv+k*J?WR+5|<)Vq6(&a96O>9bD z72dWcnHd{T#fE`{NM?|0ECoUU0;r8~(RL{t(cosckjxE4Y;0yG>aJg*I8Uem0aa24 zPJ43iCmSM&*^EiW6nJp4{>-z-Paj=8dU(EGFPSK%Tx1Oj$Em_ygwQk{U`#rU$ZBAw z5mrmF8305zFbI%@HsZnK@Z~SP^Kbs(2jBX}@0^`BmzN(5!&L|gHn=7}EWj7E!k|1ed^<|GUn0Be8Z;MK7aUFg)`>v%=Fn?c4R)&?zw^jqk^o; zCz6Yh-@lxX0hb#6n=(bmEQ(88^WR4*)1P)!?hM3y6z+~O7jQ()jA|Za`p9(DD>*ue zYj6N?VvW^$$bteD-W~uGLlRuyjFMi*CN35W0*iN7gQ;qWkwdV`T$lp!QNI8HAOJ~3 zK~&rat5N+F-Jl>Q)i@U9!DZ(_gp{$_Zu^t0l&l5uqO7X(CtDmFWO@Zm=} zr3dHdUDuqgSLyt0y;?51wrRZmRE(kAVAr-OWq&%(N+>FIW+AYOl4@iMOfiP#Vlj#~ zeFVeYi7N|>#H=`v9!Pq#U8)&C6k4UnPgEUXW=aZTPx|0w9p8HEtuKDza}Ul=x+a>+ zez(ghS*=(TFU2X}Q?h*_#MoHYQM1;HOCqvB$Ox8M5mm%sStXP$Ae zUw`nc7cYJ}^fyddEv2;Y`>mv5=(mBf=-S^V8+K@4Wr^(YdFXJ;M86GANUQ zo%yPFEXe%K$I;MXxlQj^(@@K@RMja^a}T9_QYRBuKJMw%5TiLzKV?RUv!CanpG5Uy zZGJYLUnkQMZgR{1m9M-L&hVYh_Q)vKzaMUxCjQ^d4V$@B(;sToGvTHv6R&8*!>l0e zC2S?Y)a7QCybmb0d%L>6d2oKV=$f2FC9?_F%er;tDw4A$nX&}sU}lke4ODRoLm(I- zEBayF4`W`h0M8;JhF~C_-PMGOm8vtXrjMz5`_+dG+%TyMW=?eB#Zw>(972pSG>xb( zmN)^O3~Aqw+wE@O4=N&A&8uw~OxW-2gY@$H`g*-wzUrEntJT8?=jUgqC+qckwGM&R z(8d@;jInLF@h+CC>Vm$-opae;CTpUaWwRs_0*Am&Y=WfZgboiz0V|SmC=%KRfV5Hp ze1$9Ew0R;b4Mt&V$_6tm7mLS_9zT2fl%RR+Q%Ymbs9d3Hb1|V^DW}TL$tvpA(r&|; zQM_&j2(jV7x>zn$_4)JXfAJSrZEG)Hy#MOuhdC!Rh$4;H?=keqBie}N0$yL5MtttA zeGD(o&o7!tu(y$tS}(emiI&UNV!41Sw{faS7Rh5uLrQ_i z5GaZoFy#e#W12D&;$%Uwp%+8t4nI?s7OQh` zLPjdfVRqbIbki!EFTLr_9LS5s%*-qIe7Lx(wfajga$Ep$vjCWCl|8dVEHm-8ses-7 z&E9iC3{#|YxLl%xy_9*45qv_Bnc?`NZ<#>X0Uz}~Df}~z=$Nhfny5`Zt2OyT5i?FHF)DC%ma9|ek=uo{sijOL$%LFT1Tx=R* z%9+@^^98SxK+X!Lz%hmpLc<|&Xo!Luk_afApROb0!}QVEPrVJn0V){PG9-_ZQ|foS z*DqfIbh27MdUUZ~t(f`r^yKN&XH64=5da}U-o8aAc~I9bmdnL%zaL`gq}`9BnkJED zmLY4iA6#&u)S#8IDzm2&qzl4brV{}Kt#bXZG+VsP4j?hMc7Wk_bpR$YZZLbAMd#2Q&~Bx8)CPXF={IFb{udFINUW} zHe0^8el{}aG1}1*FANQU~ng;CD@y z#Sw?etkl1_v|!y5y-E2j!Q}5$PpG(7g%mYuKc71|TGB2S2|`E-gW~#TyI!p#!#_YU zD2ZCAyJC4xK+46GOt)2s8&=wG9d6ghTn+nv*!RQ9Y7ruP4WT0gnBzg}3UWmh%PRz2 z$KR|*K!x+-4OO{q+03%!P;?q7#K26k3Cz(;fMOGwgMkdK8X7)@z7c>AKKN)DV1yXa zL?)PIGlL3-K~;u8l#^|5_BYqpC+l^Hyj(1kd+ct}?T`rf7c`UlNX`-mK zsS6t!>+3=*_Hc8x^TxsVCl9O9@U;O_V)S64n8rZ05xJ=Q5oKn57GTQS&U})PeFzxp{89@YANQS~lA&TqkF^yvr!xgaIY|qcn*6Zb> z>(0*3&QDL*>s8yev55iT5Ip7zF>(x9Z9k6NVc4Yg?+E1AgSotUbB z$7Yc^z+jnxMTgVV_1VdK(Y0opQ-Z4ZZpxC?yj;_a$hR9&6_q5}%i+hIhMaR2RpZ#C zF<)=N5l`Q|`1X6>dFS1Co7n7!yx9+8A;yI>IK`0aWb*{6VfOp_=@Au$CXuT1tokQJMm<*f8GR##A^v*rp!dC8H*{vJCJ*Os* z%5x`F`jEOwVa60-l>svK`mPxjubjuMvSJB=;JZd-aKvVhS65eU+jLEU8rO|(Qnf=N z$P!iI3ZhAK5;7^FnHKGUS|;V}J2ebr+V{hvX<~?~g}S0@WlZZNut$jov_7&0^Ce(btz(FE0&*&wlR7_kZxCcfR=L-FEwzfAe4e>3{so z)wW+QmV)R>C@1Tx8H_5RSSFPcOvQ_lDMAcM%3=^z*R;Vb6hYlG=i9^aQPYTOGzof? z*=BQ;WHwd&*L&RmTM)_g>a>1m7jR^@_!ycruPIf(eiRg?wx$xvs)e>c9RRu5h`(E^ z8k?HL>H9p|oXqAugYgOO%27NvS1_4DMAHu(SOtUw_);&iu4$Ckg!Aup4_V5Mv8a}c zPyiH+EUQJH@(YE05eS>DzHV<$SIcGB0C3v4sdo;QT0M*+-g=zY3AHJ@*3)`4?uref zhyi^{o84~NwN1lWjKGmwHLW2XOpSxnJdZ@lnMt*vVkp%%aIIP*Q_;X2nkw4n1%xm+ zb*3O>{#ATz*R3+tXI3z4obsSUgrPd%3 zx!LYMd~OQ7`Pucizw^DXfAibh{qX01`Qv~5=})ud*e<#0jDuHdxaOX#M2MTa;&d1n zsUaXRR4J5zZd$05^w+Ib`)NXtYEY)nO}VOhL^IPBJDh;#C!8ZDlaAjft<(C=dQj?O z3LLBHpY3+RHIWRA7(?Y`&)Umbv71?iayAps3C5!<^&Y_W`i>X%f!{GVfht}}R!^d} zIYM^fIO3YHx1#fK7Ol72|Tm{!X!!BmBb+Qu_G zMJ~W`YcB>@arqTvz!gG(XqHec8ZlGVWOSdcDC1Ao#0#)%Av9DBgglBH*R~1qWZgAQ z*EG9*FDc1tHT3;%yYY;`)<;7xQpp<2|9j~tY_T{U^@}mzw`sm5i zXK#M?vlmaEw#y~Q=Gl|S85pu$US0S7wK2qy1yXdbthmGQj5SwjT=Jlm%tD}sh|O9? z%XYqAJ-&E&etH_1C1-Egb#iR9V1)$U%tHL|d7Zw5?!dy~vTf<~b-b^FsoF#XW zVvIVKHhj{my#p+k2R7}pGkma4xg&D|xjpphBfZ8R%AvvkB!zC7!7vWo-5X5u0|)wka_? ziu!{m&-F+j4^#R}kJ(mLnZS$~1U1Wo{V?wOVX^4ih8sqd%oHM%vYIji%ooMv8LCw3 zAvp^%geaoS*0!ygI!P|X7((<64&2qxMDTv5UL*~doP-0q{yE|p!pVBswau#U(~w}0 zoQJ;OZ+AD>*SqcDv(kIElT<&h0mmkZGKat?m={X}sAze|dRxwb^}UyMOfb z>H741xmY}T^k~};H#avihMV26*^ikui`DqCxajbxlc_Mupn=KdN*bnyIhd^4=JA8G ziw9@Rt_cJ)v6`k+b%makMTT+AA|M9WeaN>JV&b^lZa#jsxw-}jUwHTNAO71v`sRDz zvC#a#fB9E``PYB5AJc;e54z>D(mbfRBw(M4sA`gR)sm7$W@sQL1w=8VJdA0*Bxb&~ z(f-z>AZ7m8>uj$}X}0a(L+-e>f~JAJo!p@rN0v*Lqb!{1%(sqlOo4g1T;{rg!A*(p zVnk|)u@Q3-HU)|-nE4p0s3taX;8s<`qjl$}=F$XXqM3Sa_hG|#NugRKc7QOb?Cb}& zu?J(*P0q)KiU$Pe*cF0o0c5!bmW4hreRdi+e@nG0YPI75O(oV-yO0vbA~0eIZUjQ$ zKqMkk8=)t)BswO`TB`d>%Qhl-(<9g5C7@OqO?z2scA6ECuIm1}4`oGOL+*1Dwh=j9Id&GKa;Y zTP~N&t_vX$aJpWfot=fiX4w^Hyz&_+di0`DOK=V=vw^ZC#|g4vNO`~CZ}2y zu4$SOLf5v7wriV)36Us}20|0KVQK<3j5cs&w1K)9mR+;zn$@B`T`x{n-Li|zCaf0i z*?Rf#{Pg@}z33XRg|R}SH-mc1R)e=X$_2e zps+Y(h+VJ9r~;E9n}t}#Mo_6p3kd4`7x!q6;zwURR2DZ5|F6amOr;e_(GV$2S+7i* zi?$sOH$1*)X{pew52xU;Fhdhiwya{;kQHh?W>xKp$l7KYv)7XtJTkAY8;WMz^lO!8 zJPeWB6L(U4m_#v-Y2Od4)gp4tWK2N~u1MkzTBs^mPQjYd>pg-46NAajIE0{;^-=nJ zl^R8t4s&(3X{5mnL*au;%30O0Sm}DXTr8F_^!s50BET8-UEAc8RCT-EZnoRacIgMX|=Iyup^NUC8w)^~>pM7w0_T=(v_hx@} zbMx}mtLvMa{eIvOyu7eHAkz?Nv4~9*n!sJxv~6S-Rri zpDvz0ecHr!x7}q?-~Er4I#dj0IjX$3S@We9of-Mx^Y#rgQoQC#>$9jDX2R>4TuOcMKv5~ zPE|^LhAR09srUybqBR1YPE&$0w;hoSoMnbc5W{{*k!{(3sMR^KN?{%})k9xh?v`uKvPXmQa%7maKKuVd2m|RPl&EQ?^Buj{ah(ZjM zVXS19RYQnYXSI)E&SI)W%xqPqVm2&R9lQdm$~dMhxd|a~ST2_9??Z4CzW_tDTUn*G9y{O7>7(M{RTnoAYhf%z9 zhwG;ujIolIV4x&5)LK5uu{ch2ntX556=XwSurcgJ8!zK}!MIo93Lf{Ys3ww7PkYrV14XWOE z-Ex{JiNb+RrMNBZoEJA)kSuN&q2`_2UuH>TdUWw<(RBnB8FR9e)vArncC#7#;pF7x z!TI@I*=Z6XRLjHc#+nPld` zflJ3?gPM&wXV-c3KryFb-~al9kKTX2Z5H_IH@^07|L8w_^IPA^iof~Wzx$K_^r!#w z%U@Fnj~+f~yRPqh$thI4gUFkrP=TDx$Q!O0NZ~!$i!W>nZxl-?EmqVMKNFJno2L5R zg>c+|>i_6bbgwYt431$ZcbLeb{(1D#gUih=&xIN zCi42Itk@4@Ka7j64S=Z6(9-+Di;}2zC~)7BiJ2&b;9+W(Y-TY;Gea_$49J$JJtSyQ z*Y#x%;UJ=G-gu#kdS-9>3+%VsOQPjs5kpulm*X&AUtSTAa*{0j?Jh8%uGfzrKMt|U zs>{_ccKe;cUcVlO1Qyg)R22^ZCd39Q;ra8AnfUtp>h$!41C8UrF@ULQySCxBS(v0{ z8zL=r*?7Zn?}->*gJhU zjWKXw5#;1*q2}aRzL&rW7>*A%?)DU@=W% zVq}15!JqTgm+N-4SMFV{cuyXkX2pISxBGs%=)$69L(0Ys0Z5fdz=0}liHMq}DO@Sl z5M$f6Hkh)uO%s?0EnBguRPGQfX%mBrFjGn>eV$9%6cY!hhniVVnJ@%msEz&j;QajT z@2f4At9Rac=h>TYWRcx||4%>r*)M+iVL!ltc_!4! zj7$iOei%P~@#^KP*CL4ntyhba^D}1R5SGj3a=q3xHi6d56J|=u?D%A=?w7yvRb&3?&wu_` zfBn~g_mjWBx=t65PnPSYtG7r^CX^}n2}_iSy^jo4vSRtWAq1F7&O(Kn90Y0l)NQKL z@ljoGI$q2NjD%^)&n?W@ZZ6vJ_DQGqYhBP)nKF z+oVkFJ1^fg0}!<;3>^0NPrSL>tw)sDo2pkRi%Z_C1oFpBR;r;;eUL{83y0t>QHndp zG$q~(7$5?GiN&gZ|17RTwP;=jbEvPWk&csA)qntVzanYF)CN+8C`6G&MW9Ar@mKO4 z6^=ayD}dT#++gO7yBGwFqilA&<)UjM6SJ8T8tLqz4 z*8@e@ZPqu}22<6xZ5PYs`T2R*b&IxJbX{Q5rWwa^NP|N>qN1WO^Z$B&iwsQ+ZEVQE zOfdveO}Vti5Q8^J-u1)ltIexRG)uho_7}eUyFd8q*T1G4~Rp+u1mX-(B+%t1fFlzd9J;(x&h z`E6%BTz~xvKEx749_er;msJa^26lvAYrT7n0mM0tFpD8D2e*hmgv1OnjN-RVuHTQNHw8P!HnXOQad*CXTL{k6rTu>I=|HKa z`ox%WTv^Q_9dji|!!XKrrzzWRmp7Yz%HwvkC8oA%V+g)Wh*}mA(Uh}f%~^+GOk>U> zIp^#>#Ad4hMp{Kap4`#Ya~`|})|&91-R?z8Cm z#l@Gu@|Cwg|9Me;{rXkk_Z~l@`s8(L!GN5ki1-(`&hu-;1TypgYVHGc(cp(5+DJSGYTs1P( zeu7lv5mK;138KOxfy;P-7+i9K?h`wgVKPSbp}D&V09u>JK_i*~03ZNKL_t*h5|xuP zkVN_!Wcvr%Cnzmoz>`23ehxxLA7lgRUv|i=ByzGD+Ek~saGL8 zE2Gf;>s4k^5mU1yMwU%r6ZezSS_=<$BP z53r|?9xb}=^6KjK<;`vYH=s~5Wm1g`3bq9RrciNK0z`3jx%0bL!^Oo#yXZIuj$$c~ zc^rl$S+dBm?{iLF(?q7g9AnHmYum-hU^0;`;sH`h`PJpstII?YpZVP5-}&m-zWmj% zpFO;|zS;ijgO5YgUOayKm9KsMJ+N4`odH^ujY@3jb5F7u z;N9lAitKs95>_9Kdt~lO0Ynr6tFoF@#0~c%B6JY?xu?(8^oHr@yKnec9nL?P+^*_D z5PPn7wkz`Fm(4Dc0p@6xx9$03mq!U90$Qdh6Ir3~xvoe~c^p#{Elx2ArX9Zi^Ql@d z^{CM3AlNazY?g9~Bx_7%fE~lKxb>;&PT=)300bc%#kV1Z!UIK3XqnkelZ}ocj$>jLX4Yz{C9A1HCip zPt1tfh_V8}&32npK0iH!YVO*i_h+W2BErUL9F}d@55x7#mp7M}o2x4hVSjz~==9|2 z#ly?1^Iy=fe%)V5f^mr!&F@!1KyV>00~08~>&1w$?*YcguQo&0KG~y37qN+1NsPy2 zo87qI?Xu)FrZi%;7$c)~Eo_hYEOLw!S54GjU*EjCObGb=7vK5*4}bLaZ+z>)qsK2_ zUw-iX<;`w)de)qtoxS;)&zwJe`1>I!16N|P3Ad+K@%f%vPGb^c_Lbn65C^!;O6xu@Q+SU!zK`n`oFZymB z!69;~S+2QRy=7Sr;mq_rDlO&Uw(!B13n7T}L5ZdUq?y;_MIKfay;x28fah5uzX09~ zMk{g0V}sfm3kJAi4_oQCB1t$XYRh2-#LN!jBQ)iMZx6@(fpJlV6G2M3AI5RfF+~P) z)||ytR9eJ8N-}_$2o<-k{+RpuF$8McQbWK&O240=X5K%U1DAXE=EbEq5UC-Hj469_ z@0`$&G7P(6NGkI5$>TNz=k};sN@*NNkUe~O(J&>^Na4kYA25eDHfPHPaR{d;c;gLC z&}LKAo(WM5Jb+@t*4Fhw*Dqg<6!4XAeC7K;`u%Uc_uWTNo{c&4&Gz)c!)|?g z@#yiBXHN}y@#4il{`9AR{3n0%H-GcvtE=m$Po69m3no&cz=49P3I)d0VY=)sWl2v{ zvh1=zMJnN9eX2$cGkXd2p#pfC`!kfFOpkj_!Kd*={dS1^%L>B;K$%8jxDQ==hu0tFDf zfs=yOs1^q347D}DOkEe>_g>d*Iy@&F1RMN|1Q-W~rTs9xy1aV% zI&s7o-hKPu{JTH;#<#z7a`s@?5AT2Y;s5-XUyM0Fe)`68z25BhAAI!um%sY;Pk!=~ zAOHBrFJ8PnJzbxjojC#(I2`=n`LyP`VH~^6^G)6i-crHc3{U`v$%CIhbZ@Y8`|JLX zW3J`8rfazKnweWd94rf)DGXv-h_F5tnMBp`7m+-UscFOA6Ed?X%zN)9BaFk)!+W`r z9m4oJ)eZOA&V%8&ookF3U|;`Nhxw`A`4s&;Q~7`)Sj5pMU3_lhd<) z7(f2_;}1Xl@aENkZd|NC&s?6~Vd6M3mlX>cv36P8#mNmPre6%8SJ+Y^+G6~`EI64gT8Mp>tY zd=g_o2$J(K^b}LPdn@W-+HbqbTOkbmF;v9lmeVy2=+Pf%_fA9zWD0Y_l9>}r=$K#c z|3`%t{3O%O7i1JLvryz_F}bN)6dfIFfhtg>j=gC$jjp`T^ zK+MY~gwvA;rzascqEH~Ko-P)zt1!cv}b|<2n?Oqg*o;+Nio_+0`-+cE=UphHG;~4WWzIgfSr~mY`fB46LicR?F z<;%d~^6EP06hd4q77rgjSgqE~JoJ0deLAEam`gM2c~wiz56&FwI=KwDycz#g>9zW= zu>+IOKL6u<$Ho7K&r)LrCvezdrBsC2%%pI?%Q7U8*W-w{i}mT|tWk2^Zw-N4Y9(iw zgute=T4z_ZDr(6t^lP`RNfjk1EUsI3N4MxCm5b#JlxfJy!B1>!#sb;0NY?c~w`aYoU zq%bJJI9zY`eXm65mf?*jPu_a_?d58{K0T+

e}**AHsOA+}xHw5@9u#4ac}?SJF_#pd#fI~iv%^T+i2|JA?VjPYlY4a>iCLnv1iiplR0Lm*6fys?)b}pIx2Leu}NX~_jnzoCg3S|wKY&QasLKFZG z7~*`@F4pVXxpD0)rYKrFH`$pXan}U|aO@~^Oi)ykHSR(r=RLV3$to&U!4d86?T$vH zo!M-@T+UakW!tVpG${ww+zDLE#?G7zqLSuDg%))Z01>n?rKp0iw>SOa8*jYw>bJ+! z>0+@E#3+)Jb&=$QHXIoo=$hB^?0mFc4xa}bO8WOl2QUtCQK#GR6P7VlPh0k zV*!*4v_L_CN+4wO0|A_8#MFb4l9F2MvTv+%a>9sweeCn6kJcwN@^LcwCP|naZc{zP z%mA8{1@+27NQgipkr1fc@+^=>McUyttc~rHBpe*g0)f&;> z%G?(UqM?n$b&+wXPBq1(38YQSb)uv8;=%aVy$5@<>Hcij7*4fwS|)&rHgs*8$#0dtDi0>|MVAw zNKQZm+4`wTC6r`e|98yG7Kw;uFfhaEq^uVtb781$+mw_Ly?3eYQi|SrUsa*gfv^)0 zBY+U0ue@sNx;9%A>!fYTXLio&Df+MiPML<`KYL-Z6L)RvJ9)$>%L0dA$Ob}{m^^t& z(Gd6;qjS#M(}_e=ek39Ql3ahB1=7q;_hu0{^?xT_zu|KkT9aOT>4b^t?_gdDc*c}5 z>5VJ_h!6#q>$PX{=XRqgi*_MeQD62sE!kRlfTd6(gFd##2vG=noi1eb7X`1(SUqs3t+ssR|K!Z=PW3g;8!1<}uh) zCZgQM7!eUelJyDzWIBecSDyOrcV7G94}bW^8*iLDw=W74#d8W(J=)#huj|9oS#BFW5C$!E`-O%77>R$NpGv=;&CF?|sgAp{jQMuqKWfC8YB zB2&U#u=`d11%CCPhVyF6RlxzaICNf4!3E|^XOGW5&Qh6>dq4LZArz!fOifzZVvEfx zL{!zT3ku*}<(Q2^-GwloOng;KOp*jW#t>5yOOt0EHpH&$Vs|vbsUJ191ZUn$>V?J1 zL8i0DRI z#c~Rpm!itZ(r2c7hy;-ltfJjH<5r7qOL~fK-FgF4abP~SAOGN!&G7RZRfw9^trb83 zx|o*hW>i-QkYZ$-Si1(VT%yx5V~meh3S12tF=QC?%GkucXtgN49S$?O(z)$0VVskZGuFg3Xd0UU167$K--vrT|{b|1{RA^RhdqN zuSe^)Q$hh~*6Sv8&e!X8n?!w8g9?*NVxrJS!UiZAMx=gn+f^c!Zm>zE?Vtmg)$r0Q zFa6EWfA;gA{p{NHYu>qa7mkkSU5M3abnf81uSZ>sckkW*^wXP1#|y{Kd5=gb1?~9_ zdP+tlZvaKH*p%zAzw=O}VMJ}a7A3HpVD@NKL?!qAiLoOuOu2{NSHDiUA!lsHCs2|t zJaKrS(@Dg_Xedi|OHg*`m24d!tT>c)vw#2qh;xZG0EQU7_fMW2wOtrbR+Gt&_b#R= z1~_E09~x`HRdrQyXr*hL7&}SPWn3z2su}j54}IbSdc*_(lBB#tW*Gbo5Z=KraL>+$rJ!$jHZv@yTBkD)UO~5HbvRIV--NQxzu~Lng6Y7+V$qn zKp#6hCIle@)l@jT@U^e640-+%FD&RO^~#5X)py4FRTGjy#FG^>z>ZCeM{{AE^efkl ze@KyBl|(F%v>EFFD(^aRUDvj4(}m8Ru%X`s98%Ryz><>>dLnh7fugi!N`}|g-;xvO z)1n6@fJBs%Afkfl=2+-w-dc_ea=BnRPEWGUwl67Up2#WYQbA$0AF!V7ybk82xlZ|0 zgzZOGW^A!ekQAb56N2~b2-jUl%N0(>W>6~60G0?RMU!E%7crUgs|=5AL&$)ebxT6b z;XNU-!z4t6#NI1AZ{7;Xe3fiCrz^sUFR6tAx1$$B+exZ=9FUwEKIOu z|6uam_3PjN!4JOko$p<_a&SwgYWBNaf?Vd#S- zkaF`+O_noX-^i>CU5OJL^O;}H9!EAM{T5C`>)C(UUpNxRAl709Z6c{kQYuPEqRQ;5 z3MZ4Xh~zpQ=ZcUsr~)xp)`?n`2_?kUa=CLZxL#kRzn&95#fh-(gg>ULV0q#}%gjN^ zUv^k9HyG1XkxstZqN=IjWTINsq@Cj!1p!nG^t?6zsdPlBT6(D4? z$*p8wn5D4>69fS?iD)F|T=D~8CXSh`JFqA)vpHzadvdHt#|rB%fDXj8jTK_n#NzIR z5EH0E4A4kdF(AMyCbw<~v98>7GI8G9_7!6!q{(#Jb)j81bzOI%TO78lu7grFT6xFp zM8rGe0hK6v=>@bK|;I=OIguvo6!F7BSI z?%un9^Rv%>{hQzX<~P5+bNkMCJekdAgxEA|LO8+UM%?t)wL4c9o=~X)(@ay!Zf@B} zO2cE(6C_YYK&EO`BZ3jZEXw#MyKk96C*Y4Wu*l&8Jo_jo-J#y+>d7)Vm?`-uh=7=w zSXr%4gM!4AY~tB!5!IB0*oo@yxjiuMi7`q_eIOGvdw|xwSZvuJ`frvDjt111R&RvI`vnATcpfU5`fNv9BuUy+58W zR_o(M7b6UpPAYA*#I|v?^#@Tv2oV&6QcQ%teB7j+6K>+)soU=GG*uQ-M;5tP- zauHE7W<6S(oJ{re>rmKl`Z{x=of^`aU&9kWu@6sMAuST_0EoF4of0z?vbd^RmpJ<^ zvqQ9Sno^RKl88VOHhq)q@M7uMD|TEJ5lLrsHQ!p31#vj>*Wp_Ix|=l+pzgn%X(MWl zr7W$rIkJdk?4Y>$M5dR7Dj=vt8}!?xOjM=cik>Esr2hXkU)1WlJ5x7Ofc&Xh#z%3Be9pIJ{LEU1oE71e|`5LAhb zB`f`T?fDUNewG9FtogcxOcgojy|0j%oEweCkB*L19?w_7>i49ijjg00DMYZIAGst_ zlICJ-08|J;+WFEn-}0jov6g*i+S{bS=o}mHz{K8rOQ;A~sRXJhd*`caG#Za5`6NO_Yl+BI zRo-Q6Z#cj_pdO3K!`(3GWneG2FV?=C3N^OhT_qLcY2;s%)h|DSKJM5&@(kAHcStcN zi{cQ4`~Evn;Ccd85$oP2q6m<3^E9<8eJEAML>n^iH-43U-!2~zw=R5mwEP_aHQhtV z<+czKLc>IkIV5RAKmb&iy*U$l&2;aK31#6}LLzd`S)IiOazg40e9Rez{5-7EN1T~* z$Fs?pog0rvqjBw>8_yT>#cJKfDA1apQFPU?jNIy>S%3+cOb7~M0!lzAj&fwj06x1+ zP&ud4na-i4l#+Nqm@+8=fOEd8o%2;)kGyv#aoe;l9v?54tGccLp{{EH7>&j;#^rJm zLfF~a0RYFYuIt(E?r1VL347-liV4XMq)F7A3T{sr6kB^H+;1Nk)u8ASn5qtdCe5o0 z5FvD3vut8dXg#Fa=-WiDJocG?Prp=o- zk@r4y9i;4|0iues<7zyvD(^J2GRnCPr4xbe6}QR$o^rirfuNA+YpnoXz2%hkOHj~+ZaT&x>auv%Uy zD+5a>d%|2OVCk4VMa-<2JtZIo<$MQH2tr7R<{L{?!5FZ$0%!#E-ut>{@B7q_suE#U z`MR$6c6Y0)iZP}X8F95-E*Fc{dVO$kP*v4zHk(W*qtU3Y>lmVyQ#)cJ9CVo70AI#H zQr$o*0%W-u0dhn|oy7JVC{}nA=@@oLNK%>;BcdynZzmr3srP@a*S7nNgEx5A=lQ*< zix85v3kD0;L{x>zsZF;*2}z6*k-V?Gx9;7R1}a_!qNF4u_6uT)B5m7*5OS7x2(M

Pl+@CUQB>2T5YPC~f94iYf_+5y0|iRQ!A_8tg)V3g{4hICgfJ#d?Nl8dmiE%dDIoRK4qE6C!wQ|nK5RQ-M_5_VmB_fVp2qA=!r%Eo~ zhSMwATATCHw!(Ji(&Jr3QjAd{Fp!T={uvF(o~2dO9n7>e@0^nj{r;s7GPUSjb6i6Tr6FtteNr8WKBax%G`f zK_n4$4huYKCp8gl$dR7C$^L4-n1XA3Q%D{*h>6ukt0BXzDD&wcNkS%Of@I-``r7-dwvA4Sl0x57QdMG#ZQJG!)yLDYR>n6tJ7z$QWV9}Cl7gYc^YYt3DuYLTdb0d=UnM9m=ga>PCMUftq0MtbkPR4QFr`{4 zV{T1Hs;a06VtcTe3;>8Jnsdq}f$Y7dV8j#U*( zVYiBAd?*J#Dw2qht(*eX>g!cgu1PKrBC{LKJrw~I0D`1~NdVc`BhLrtX5Lq`*=%=b zKARprcy!oy0RTeM4dTU{byGH9%vYAt1wzb0v8sYiaTP@8oC`6iim$5icx=*#Nr9L& zH_Zc)B$8r?%hhVRSf-eWcr-QvbnxDL?`N~!x~`qCM5JxI5MvB+GM-db6}k{(MBJoQ zOB>j{a(X!r+lrcIJ)bY?y1sDXf+khzU-vNbFg&J+RVa6!u=Mk(zU=5MwYF0%VPTH9hpKWfi&*VpUfa zRjK1qT_fR{-MMl&gT+Q{kdYH<*TFDPzbSD_&VlPDF3yy;nkn0FrVMAmIss=*;H?Crsr@bC<_go{;^?+K#9a zfGN<3aslk8%BI22tP}G|RC#(nsR0WF%3dZ0QM08Fw1S<-llGEgQOiWfR z%1KfZ0W_RSfFy|~1yxCk46rwwILDLm=wSccbUb?eSZrV1Q{po`>0~j!uS`Z>* z$+72tPJjqRNQ{n{nd`bn!YWlslH=SUwXZI-OnV7jw& z<;v9?pM7?8JU==*uIo`<*PxIhnI=_?Q6vF^l!E{O5i5$SI(DM^#jAW6a&Zz3}k^k$@APkJz4(5Wco|I z$|}pdTgK6dAp`ImNVRPCn;0ik2LS;fX32{|9AH@#i7JT5?1_kC4rwg;fTcAB5)vT` zAR!t2;m+KjZK?GYmqR1cpY^meGQ+&5nd2#2O^m+Alx&LJw#Jq{lq?5Aq}It# z5@u9sQ#V0G3<5x@&@^n7D-29z0UGhoiFcs?a*hc45Qp32$;?U2j(U(N zK*$~eCL>=}e%wVzFdf%Vj*btX95rp|q6DLYWFN$i51DVS;Fy`wv9SmdK%FDUT#f49 z^fJ2&O^#GUN@zk>klXhSwG!|?gXMbt?tAae z7t7=0`To8mVzgf9VqISmkw6HFsgjhMrV-WIY-hb%A0Ic9sek&Jr+@m>pSF@bLH(ajxF>@PMS!fUNLD)oz&LD?an|W*2q10Y$wW-5#G(Kql2TGJM1Xo93P7_s z`(`{D6i|_(8gEx^r#Rc7eAQnS3~S2&!V4F7Dgg{yBM~T2YZ*ZFNP#MvRdWMW1RE*YBnIOy6WKCIAu|x+dkS0N=TvfzG zp8dJq@pv?w?M%j_#j07Zn)zZGO$AT#<7UbXZ33t(t}E-gEasT7Bkx^38g((YZ5u-( z$8}v-b*+F&v<+d|G}c5Bk-YcQogH6Qh$td$+a^hhz|LfQunS2*Lu#X>*=+XXpZsKJ zcP0wI{>^V5Jv!{Vu5vD=6hfC$WTvX}YVC=yBLQv-f&u!Fey|JS^Fhf-Aqj3AitJiC5EOtvwgCWRn? zNsvg}5JGeWb>(``3z1?{LU4rUc@ZHiG6O1TN{%vVm2wl99*0sUN-?V1?8%Ru5VNb1 z6K#T|AgB=msbU_FM&nUEuB+K}(zM~p(fr|~M~mgUZMztf1xt>|IU?1{yHQ;+nF0^8 zBLgg_JJY6Xm#bylb^usW-NhKSH8HvnV;f@-jVXcRXgnt8yz}G90AM*>oqj1 zwfDa3y47lBfzoU?L&U18QcM7A$0qN&U_Lg5Q{1i1At0Y6;X@=OvU2`z}#ZbkiXm&gAu@V zh_WTg0Osi;9ry-Dq`#d0K@PAX8Qzuzpo$7+ycHFqLK{;|5D02#<@q8>Qj!qGF?(i4 zKv2ibxgU7POlZ_JwT{WkMC@42i&2S5h*%YrCFket-dXMzLDaSs1W6$q+lS1IU>h~q9k%oMD9O$@MIpQQ+NLS1qD1h zp0Aq)AUp4;v%UTCNRa@rZM(&C@#N@uI+^awcJJQ3_nY7Tt_$&h`P;vJ_Svgfp1qn< zN-=)^#TQN6R&_m|PIqRrD_5>Ocm4WoXXY5r?eATE_R4H$%Irkadc8V6KDvMZ{^8-0 z2oCmV*REeb*gx3Y+ascs((&=}haY{|w(WAYS}s=0<%+!zA*`CEs9b*bnO9$V_33Ax zc0?(LFK*tr@yCxJA3omQ84(kqh(ffM$>qhF$8Z94_|sJ>{gfDb`d{-k$P04ou;mjR zu;xo7eFk}b@ib&X^-*=$)%S;pD+ z1wG{{12kJ46U`Gbv)mN2P*_fvn8rG7-IshxJufY*u@B-r?APxZcV7(+FpiU`s#sUk zp-YEI=A0v@-YEb8Cd`c+1~3qo92@1I=csI>?KlW?{U-)2z_A`|% zPNND%wH{PdL1F?%s2B)QBqm8QN*BVYs=arNF!G)dA|>x#%@k7#F@Oj&8ui{eW@0DF zd#9zHu80CzGCjkzg`=OJqv1_}2oe!hqDTPt)uAKLFiYg&g z-Z^H~l+4o?0ff4)66melw~rU$;KKBcH-3EO*=u+2-T${Y-(0uhx#zFG^vWyGT)we76^c=YJ-%P(); zx_#^Q*S}B9F(pKrPNw^Nd)KaBdE<>YzW@E#pML7;$#~p#-QnZIk3RhH&Hs4w_rL!` zRnd38^WC5S{O8~L*0(NPxX^W-svaL7z4zXGZ@>LcjA^l4m{5C&0TC`YhP?++l~jbvv~8QV zZ6rlNZ=zU)P*28_>BM2y9^4ohe|Sq_;vTiJ~lfXJr!ktC&F~qj^UFTI5(e^O_07)sPAR;PCOn|grt(U8CZg2F9|NZa(*Z=MBo_Xfk zci(&O_T9U#8h!Wm*ZxkFEW!z ziYdMS;)^>wJ0dB?^wS^z_#gh^AFf@yW*gq_?(Fg5;gu^_&R@82@BaPWz1^zvNmA3S z+41u)JpbBjul?jFKe=}GDuVw0_wV`2hZMUAqLQ_;GtY>0*l>jmP}xk;;jYtDY|mU8 zCq5i{76a1&+ds!s7()qjHYuCa`<`uSCpByp0J+q=0fHDf0*KhQjXhRdfrNk{5(5z; zXiPDss47UR(vy88NpvC+3a15%>tSk%TEYz)pu|+RKeHgrTL!pDSKz>fGb!2Z4iMw1 z3(NKuxd_V2#?wJWppCawZdP{Jh*3e=F$ju?CP2g_DTyL#N_gTlgaCX3B`N!W=_FK^k;x{yj=a@M?bpq=*f?N`m-PX z_$Qa1x`aq6>B0H)=l1uVbGPr@{^E--kB{d&J3FIsrkpixXX&K23y+^1J$!Wd_{mX- zK}42|W$40l*RQ|)^2=|$@y3-aSC-4=dbM=kdFNk!<<-!2i^U>z-4A~7!)sTsjz(jN zF{QLzEcf>IzW3elipU3l_;7c3#*R}=A%xwX*{iR-`pU~MU%YtHId}iw-4EV>|GjtL zTg>Oy55PElDcQ3o1G6)qO$AUl8Wbo1iCy35Dg?LtB$MO;noa!Wrq5 z65tfH#gOm88=K5Rl-a9DW?6t4Ge=P(0IDRl0zLo)1vGgjV{0eZBax?G8^b6feO!{= zkbyot5)K2S{(T7}v+n^pMSs!_6P4bUl><_aJF?}nJ$5USLO{-<`B_k!h}e2!i`Whf z5Ql-H;h<Pdb@r1LcqkX7gm-}E;~Kun<>%EqCV?naQ193g3j zV3ULxweno0lqALE3BeJdig&E0^G{~Dln|ZwF|qf~JI8h#jlY{x#=8KmI5;bGFozIg z2z9Mi1ciuD)P|j70t8XshzxI*M^Yv-BE>qn2L zv%PP<^y<^ku3!7kcQ0JH_~8D-o1c9aQhNUS_3PKJU%htym2bcHtABg*;iIE2L}F(u z++B*n)$*LCMFT)1-O%E7@w4DsfT8~5+uJ9lpH^5th| zJGC_X>q=AO9<6 z%b)gBPJdw=@y$mn%L8T8Lnbf7vj>3yxbY86CHKSt`r+A|Bnc78xbUcwQi>v_MlO^( zNd*u|))~M$U|_$_aWiZSuQPbie_@NOTCRC;o3?&Lk06q z2}P~;84z+a+@!#$o}nTRqLPyLqf3{b8jZ#mFJ7AM?lu7qA3yf40ssXZ zkH-M$9Pi9#KmYm9)=l&L^UqIrcGgXE`_Ap#w{Jgn>EdiQTPzmK#p2_SK6>ZfcblY9A%|AP%F4a(t^h+0zxU(m(v=`Ta)}x zLbCUl}Z+3bdKPIW9P1DKzW9(r}PH5?rK(`p+qYvZend7%-~HfRRe* zguOsPUZEQwZ{TWRWn~>0vsOgcWqRqECRXIxmdImi}(b{PI*+K>1=yjT_!i1t?L=*wA zhb#&~z>579Ktb5pv{901NZ>+rgpRPToK_AoS)E;P!9kT!HGo0~U=xRRpvIyAs+&O1 zBn|*THMOk(0OnS20OqM!MOR8%1RctjL%FO@Ac-ti>kuLnJbV~_|NbA||HDV;pL%vQ zos#oaJ@QrEFUS;AjIrxN+Xe6aXf&G5c54R!Xh9P(Id)d#Ih)Pux^~PvvzhmPxmet~ zb^F1C2TxtPXsQJvhP(IgzVq%oNz(Ve_xjFs1`6j74iJ%vVhD@H;^^qfr=NUsJU_nv z+;ay92Zx6b*G;=Kot-;(0K}p&+ucJ%K#D2eeQ^KHw|@P>CtvPVaPg_9d{w8|isjTT zzRNsxEt34bW<2(Zh|{mriJP`?AxcJTQ_jSI;0poLNqrGiVafL7?Ue?hns8DzR2k-UZ+>x&^^IHRq^27 zZEi_#1Py!^?N7Ra!3}~om!`e6Rz0Fh9V0OeBYwT)24A>T!3b zJC2JSk01#qS)fl69{$T&yGnX%4ym*lv6O;3-1XRRCc$ z8X;j-RjO*l{JZz=ef;Ssqw&~R{^;n*{<;01{rqo;*gJ3Oo+Q$R&N)}rH8}<``nLRzfjMUn7DL;uHePTNNtRqxNrI{EEW|RqreGE%fsxi#W0VkMNOJh(`0>$V zxdwKSB7AZC_~So*^5n@;2+6z3`3jM&Gtz7}`_{K!S}Ya-aCCG80FMqIt(!F=IPX*y zg;X`fXtyYY@Y&7J9zJ^b;)^dnd->U&oyp6uysRn*2m8LN0EyWl(x$YJP1i{okeHG+ z;%4e%xOe~lm$z@#b=5TMzR{VgU9>VYB6MxLGo8Nt(#s#b|NimOa=w`J&Qz1Nkpw8) zwwc|Mi!ZgWHh`}!ssGaxhR|roUmq5UBq~5G6ZNC&C+x|r&)`o({6!1es49qTJ=jcY z-Gqb?(Q4mLgU4oMqKGIcX0b$Oa<-x{4}uVZFqaRVzFLrtFx)AZESn@N!8mOWbW=zI zU>wVIR=3)rY-~k z_0ADf5=lvz$vJ0F+@WV;1?;+xnTXh2WHGfmL{SJKTDzPm+I1a~GoOFGZkncDuAAfK zvWwtq@KX=#aI}J(H$VI0%UiF$_T73kwo)`=iYYA?^BXsB-hXg^Hk%#nAJldI@ZrOw zqa$`S9*@`SwLNi3saF_y_uY3s|NL_m-P_wce|~>&Z};H*0TUY{ma-NfSy3esB^4x! z2CA2uJm>ujFTVKGpZ#oiceY$Er_uFCH*vSQ&4YqJ3(d1*t6Nhvmm+-4WFT`AGd7Vy%s*Y@GJNUA8&D`Nf3NR@ zrcJ3Qe}ahKSEV&#|FQO7g5-@Smz5UyIU|*TfQXJbD2OBpUDK@GKxe2p1=t^3pzn&_ zOMx;KXcrNsh3x~JE3`+maUfIM{|Evw-**Db4DWb?jLz};zfhc5l zO2Psu7OAAoST!r2YT?`H2H6@!Q-9@`YG(I{W~|n(M-T)dsF+fbidr)b&%_7`AOUEy zUOAXFIwFRw=jt3Mv6>nK=Tby!6t`-~I0QZr-@DT6W9HYIi!)Qf_Wbornh6oHB8S8nOjW z$WB4-*OMRjw%4%5I>Rg%uz^m_L~wiW!e;zdSg<*M|E;`R4?G4t7XVls2Z$h&AOohL zngII#D!J*hZjR9pepnPNrX}d07_j1T^lpV+kNHFYbpq!3I%*Z-AsyNmHxV~trO_L zilkEV51>&%1sEYAI08b507-=r9DyT93XVuX1vFwZO#=c=5__{^U>u1OBN3xYA|MhX zMudU+;Tp2AT*W{B z@srO#|NPrKvm|mfKYmJ{7S+|dS+CY9rrB(E^~#lcJi2xJ)?_*XfUa#+#fIH=9az#4 zR3sfAA1@bkN!CO#g&5klO)(PEXf(QX>Cy`?ym0xMXGf#4_ddihUoKXQ<#al=2YGP* z{L8Pra^=dE%g`USZ8>DPEDo3mkdgp23Ep|{y$?S4!?ow02c-F8xm-8( zXuP|-_v)+PzVhs|-+%q}t5>fkk)7!j5kr8OHK^TqG*;EjbYPlJ#C*>4i3C?q3s^rdoVvfKG;71!0~we!V53V=ZmXXuR32f z>*o0Q`1ts^uDo}CI-RbYI9;vh001BWNkld%^RN`oL^kKdhNn_KDW2`?N?s; z(Hn2vx%K6v`;XVlbv>=jhjY&N?(=rm;_P`an7u>TqPIS#5ohke#w2Z{jl;>m0WY*q zOcZBaa{Jw0;s*cVEdIUKfB{(8Rh)%@xU&%a_tWaQ(=dCw{PFMbNBAOdyD0Au~j(zUBs9rJWLZPv}*yLUhO!-x0o-#>S5|Jt?dv)Rt|YuEPo4@RSL zUDqLodw1{Ny>sX3r=O~-YCIZGC+%vrym9kJ+qSFaDug(y>ucAqeeb*9efRC(J-+|A zUAL)b%zP8=qY|+D2FAwYC7MT6hK3WfPkUE-J(cHh=tlysy3L3Ju!7501+Zb(JtwHxm>P8%GKA9)bt?% zfNZlQ-A(@rO;_g-chseQs~x;`Eq_7nx9whPivT^;O;`QHBLrpF0`vgNH5*wF}Ph@@MT5ko>0ax!&0zE+`})=Zit zSu|&ydIUg|)N>}?Xrctfj?e0CSa2d$6$eGd+0Mt-{0dG`-A~{nBB~qZ#IL;zJp?O!D7)FEKvuQv>5;>TB~qOk{BI1HVO}<1i82Z;HIjy=?aOc4o6#>^fAPKY8-$A3tV< zuIrAEk8geP#d^88fA{uBfB1kvj*sUbfBez=@4b6`Ja5k#5{x%lLh zPk;HVUw-((`-{cu-~a93Mx*-Py*s;m=R{#Po87r{=l$Qm_s{?IkE_*cG9HDl{p61y zAI}$m_~8A!w{IUleE6$h{jzDA{d0RN>C;a?SuPgdIp?9S>$r}h5W3FzDQ8ZaL6Pbf zX+76}6|?du=fGEecrxl21(3XI^684yVh>qvEDLV4O!Gz9S7QtW8BVlRm&ps5DZ$)$ zK#_HD>JvlFnG9#pY(I1}XW0AP#kt$MaYzJzVjI^%Drf8Sya}5;_*U_8A0ojfm@0o7 zHa6~Y2Po^W|EK-kZj)vS1NKsSMb}^+W z&?Swj>~l;dAj;Zt_86mxN1TjDZL>Oj@bI1A{bn+rE*FdYcW%ueAHI9_>Zqy!bh%u7 z@%a~@eEP?GckYjCIykpiRn`99?s~QU^0UwW@Bi!neCy2v=a|`je)E$Q+Alx=nQ^Fp9w7y@}|;- zGb&6plr1xDPwEG`aae6ei82$Ciy=r#g&hI{cC;jtff%A(ijH7{>1i7>6uTRq317T8 z&8<^xtOGMv`e2j<*wBOOFRx_65HpbxN=!n z13+$}APPi?B>e#~lkSpcwGQ# ze6GF}KmexP@`e&*Je!HwkC<>*!q5AN*ZEp zyU>Od3lkL3S|<wov{zXKD(6w#oMx&Y-L+A)`G#bSeQwq$^8Y*Tmfk_3{ z>-B2g#FUbtC`I)FyujZ6#TQ)?#a^4djH6$<8I%3E! zS%8JR^j9}1Uy~aeI9`K0VJ45ZIuNR5f)og#3(zKUp<@K^+ELRvM~=u@3Ypn4J9NZE z3@J&lVjSS48e;T-q8eg|F~uZN)JWwSf;3;+0<2<6FsFxwEFY;_c~Ak*JQ>yJcBajE zeDB`9`w!;`-~q-pc+caCo#S!kCA3}FId;x_k(4y8<}E0+tJP>c@=Wb|Et0xUn4oer zuADnRSvO6)P5?j*u}uKr9r%nw)3}zdi!nk7Q594J5!4Km8ki_1(U_7XA{sfaSxib_ zLR0`%a4u0|M~IRTl^BR%JgLT$k%%?DHRX46@~!X>kU&*R&ZI95p%ag|pXbFQ=n%6T zfSM&P*zig=ro=*X1sY`+rRRKW#gebTodLcQh`wm zg#=EVae!tGmlgKLTXJqFyCP78j_jsO62KyDTaIYZl9c{WC8MEOB%n722)2BZGvkiG z?CWa~x)Z0yY_?4x4#7x{nyn!k>qsFchyskzL|Ju>BVYpO$g?#|VN)AGq!^Q$&`nC# zcY-K_rGK<<_eY8VWOLI}j71FcBq9bWMN+7|*OX${wX5aM{{H@@3m4AKo;*2hn)Rrz zYVXY^FVTb)9gXcIz*Yow%1`NGfef8MDgGJ=uWg>p=?Sbk8-a+(%!po8tU}Z(6^vPL z4lxdvglZN5>4$-8D^{7&A(CuW-)x##lZz;O@(*k*J%ILAe0cIcYM&@qAVmKEsC&~tIjSR3G$KxBRc~swx?4+22(5tF zR|5~@F&^V(?)c68?w$8v&X@P>H}hre8GG*a;0wkG5J8qN&QtJb9Klu`fi1cM(BE>pW-G0Q{-{5QOr8Ee$3IOmwoNi8hlGNT*Uq z7)Kxks+f=i)g~e#YLy-&5{5d~E^{SiRe)5CM>NqtN>h&6Ix(WD!C_8|OkAq!J2!96 z_sSy&)(#$AD+{Tsv54A4q^>IATG1JjM)z?DAx7@?dS%h8>bmlT2~`#Qy>fP@ABupe zF$C%fAjws#D9WM;b*!qYGQvP8n$+6IE24?M2m~k;$wyj?{2?Mp6y|^c!U3>XmJmnd z;l0^DukBmhwR2YDh+zc4N%NfTPwvlbHt)8KkJ%%VU4gtGH~Mx6YP%0-Ta+-fnXgGx zsCg${H00Jp!9Zo8Sl5~kqbNdME0+O?P}h~P1PU>_K0!fC1TBGJ!kH05nwtTb1_)5IpdG!m#(KBj;k|P7Kzjtpf*|a+q@Wga{n7wz z&Xf?sY-mr#A7_D-v0_jGTab~h@VGhlv?taWS^kSOXMaIbF5dK;7bLfD*|0ql7SL** z>RyONaZ7qc$*pgb%9<#kry|RW%$|G?5zI*xKryzO2M{nakB4yg*3FXS(PIZ6I?voT#XcuPzWlP84nPxc1H+UgisV}s8VScJiCYhs8=3{usPk4 z71qf-k}NtogrY141?Ji{}FmJ4)WlmiNVKYN}riX=O;oQ#yS>*{1Tx zf9WPUOC=DqS!m3MzP zAx2deK|3e}8lJkyAi^9i!o78Qf-7k* zZQT_8O}#M>h)QCPrwhr~%kUUB(S|9PH?jbtl`%ESMr z)vk=LPgVV#;ROWnhz>!`wx(PiK*Oy#DnY-ZQbQ7V2+RjM08vqJSyyAYbn(KuPfkCy zHh*CMu3i|+_+Ee-5kMFu3Rl2fsJp)eKx!mnlTVcA7;o#LXwDxSeW0iFbkkrI#qs9#Dgfpkpw};!b6Y&;uxR?h=9_G9kYecy%{hs zbF-yy>jRvL$$d_*PRF}-0}E5zc3~V#K&`FnRt^#7gpw62MFvFF3W`)%D4$}jG_Uj~ zwhTh3Rm}mcJe?4dR`*T!qC$vbkW5*dsi2#zu+tU=71X|kn<;jE@EaA0Ikws9Z}E@{ zM<)M}mFzHEb<*a#C4$UWVyY8+P14_H$*#ZY;QwQqcx{a-KS5H~g26F1>5!>ytP)`| zw@URkK#xFA2sH`9;!*Yj9>Z;X9T>`1;uH{zf{OY6Mm@TEEq?I+`-cziTG{z1@Sqyq zjW9xBfJhdkVQz42#hW1=7z9aTEjCCEC8nfYrac7^)Px^m6`)lFBLHk&z?TG_=9RJ5Wf6x_L17q%I^h`EP>E6eg>=-bPlBOY+{PDD|4 zlbI8N-y>kTnzxu?+b>?hQdFv#u2Pz^W+{WLSs!g|X&|zY*Dqp-zE+kd?0r%^Kx=p85~pK2uy z5J|ySn4Jt`Z~)q74PaqlCIUes!lEe0z0qh0Uw%3G^wZBDIl6Ckxs;i*9uGh&kP1Z8 z`ueFBMN?uYN*F=3oHJP}-z3BOyd1Cr1lUjvrIR24X6kAlAX1`(YSXn`N2npT5HPKb z3hs<3>Z1Wr1BziI)Y>I(xJ*(&Bb9esTE8}maV-eKH>O+Y=*hJ(6;)V9KH6d|?j~px zONl1_BH8B1HtTS|JHBn3#8VBe(Hrj9LF-xU>XlK2U(cvna|{p&)g+9FmIWgO%1Yb| z8k$xJMz7l@BBGHjf{0Yc7(;*pVK9WVXFq@B=-RHuW3#h!BN)W0;#iABhl6z5#R-IE z&o+CshE}89=vbr!ji8}x$^K{-oW#QDj1xfx1Oy>vf@3xgh!`j&60MZMags$DrOD(+sfnA^a=(!U z9edxeb<{EK`~zLqF-Iu5NP;$CY&{0{i=qia#89YyDl)Trg(6BIj;4g}V5|SEHi@VF zK$-gRo3cfY_w6w=_$h(&q-W|cp9{P`7y*C~h{*lKo$$C?T#!frBJ*%G>V;60MJ(#7 zg7fD`r%s(c^6=`x13P0`jz={}O$cU2vG5kl1SlYZRHWCedQ2|6=PS|1t9H!}Nd|_x zXzj<9B~k!m_5tLJ1d>h!B>a+X2fD(@MFS7;n@a!EZ4)0bEn`A4Qy-kX?lZwQkQ<86 zx^;;r!>X!7F`flMgtZ{C*0dwU*mOVfUT34!wMRFh*8C=>o;37k>My&m#YY(TLFBmE zjFqM>(;F-YL{d;GW5UunflOPw{4Mz+<{Og>Y<7biq!R{Y)B8xw7^S4s&6yDqHAOL~ z*+NC(|A<_Ue`?ERD}no3v8T_-*Vgh{0w{b1`Q8IK!2&-nwfmqM%WHd8!x)jLenHW1ZK+Bk`Zl73|Jb(8FQt7|_L zYA;i+5sYQ4g;~?wXqk6rA%Z&A>5UW!qbn|{i^w!JS$tXUJuXrvCM9Skz8BS2{Fs@~5drxHjuZ2Ff}|McZr(ly{DZ;Bnca5k2agpooS@ zCF*Pd+fDI5vAJjP{Z)6J<{Yo2ctR8SREzCtYsp=Ebfr3vLziZv#yv?g?}ws4(~skk zM7Vi#bn((xhaTRuv}301%?J-zD%IpVQebC?1pu^soxg=N3Y?Hscp(Pm-vPw&U1Hi2 zKuT-tl9-PO!bwvmW&q0sUI0U`t>+rGU?<(lMC&q5Q>66_Ic|YObox`c14L6_tMNNK zt!YM0KZIB_tHes~j>c9;T78H$8F0cZ#F3d>rdyMc^b9Fi=Y~)nB8!Awv%T#0-0QTB zN&rk2HW|mfKGK4jHy&b^-qzGM))guj+Jd~6=Az9zG#_#{&LKNncuxl9IiKuV8=J|! zmI_~U5Tv0&5{>+ev0Nz1y_1NPN5KxEKK<7EZzYvJ07frYxnT1mxZ=DDsYLqZD#~2YY1OmhuBM}v)I=HHn5)u(J zkE^P#qlerCz`)pxP=uW`r4Kg=FXL9~*g_bn0O2 ztadQ<1RucwNLjj{q~?TXv$o=25|B;dKCp=%>f(rmyLII|E@0@DUXyDkfW*jkU27p> z0ML|3>OQPs&yfYhun9n2#}FulfQV6RT~I(oX0EELuA{{t0s)2yMa>~B&GrB!5J|IP zhE2qaHtBX{C=$uNdcg>XjRTRax-yHKc$^z-mcodS^*Rl&x2{NbowA>dGF$%%mE>du zJvgoX(qtAupE7_}iearOW7H6HD8T}>kz>GEBo=LE(% zZ{p+BAI$`ly-Q+ru0%v)bUbDOkm%=&Jfv8QV-!VUn3)0~YSO~Gj`g@w$w{#ZP*1QI zmS%fsCf?SR+^V10t>kj22ig=3fGMpsG~qLlA9ddkOrEvqaL^zQ^aj}$wstvNXfg8S zVDyU&LJf39-EIjchI3j01Z=|-?P=f?s8%Ck_MY3+l|f9J8lmHvmV-_`1IDf zp1pUvB1ZX_De*p%^n><(tB}_*qzbbsxjC9sj5KyDmsN2!Or*%wkxc>m@wrv$BBq{CwtOCaV6!*-L%aBLxuA)4OI~Mu_MNi(Jy^qJSJO z#dR8!r=x>12wGngzaa(>$O4w)MENNJ1VRf8(}d|7?3PLA+ET=j85OP$P&)bTTZ?68rGP`H*d}x?~BjFk4jF zYOy;{TM7or*jNBxUjL`mWm4YBz&P2Px8h2qW3Qf$K&G_pX!z^MKm?|p6(fxz5@Q63 z!cjPCyq^|+EXyK#(uT4K0N~P%7Jl!W{7OxfXI0fzRk8CX0))kEe|9nKn(a9hH52l6 zYcp>Rh9+=aC>gV7Gjtv;@gRsEpyd=V+o@)e@-=cOl)M*qfK6NEiYQRY%5fF6wI|st zGw#Ep*|k&^5t7kZ^YJm14~F%{c%(^`(wYT$N#kv(;r6Hmw|t~IR|vkX{uuxewl)`j zlV&l28dzr~8i)+uRrQzFxpiV)^&lqKP!1Rb7!YS>XAr8vP&V!X^Nqc`ckSJ?3uHX5 z282{;96>Z#ZSp~Dg6o{bZ)%h{9G!X;f###?RKuuW(^1L-zT zv~S3dkoaC?b8|+~&$dNmGe>47L{qQ}a~_+bM-0i&m+4J1){FqKs;X+N6`~O^2!tp_ z9Vx8L&FJ9#2sI0pudhJ{BHEi=D?4efcY>1CW8k_vMJ7(oy4bzNk~Cq@0MJka<*fkC zq=yJ0!^`GWqe4ZN@(HUC(ox!q5+JGe&D<%kC2Q5yFq+zH1hHUU@2qRVR>W30FmAb`Dl<__%N)9V4pvG53h zk=V~_F|KEvg258% zaUWkpd5%dX(Ulf9F<>=1TGw@~YXAZF5(Lo1NF*YGNYkvPo*^9pZfLT)sf@>!m3$Wx z41m3w@3;*X001BWNkl(ai(UY+FJ) zm|ZlJ6&m|sZ?RhN!4)5-b@Sd3z!mS4i4I&LpSv)NE+S~+f92u5S{fn*qM)UHH6e_M zB^DA>y>#F)r*7=_RyDjfc$y_~sgb*9MBE5ezQW%_yc7{y7!1lm9= zU4ZWnWU}W!33H3Pt2<7i`*qkH&zw_BVL{TUFQ<&Y)3u1ix<=bLN^>Vf^)vwhEeJU= zX%9uFKrP!V&CSk{0S2eA0zZ4;OlSJ%ubhmCOOCTXrpC5nbgf-&D-A7u)nSnfI3QN3 zy`^e(jtc;iV3MV-OM^)nVz9GAV&S39+kJalgHQ693PFUHfKuc0x7qcr&b6nrPC0?M z{I^xZEk0Xse*MpmS(28^@kO(M%}NR&KoJUcMnKK+kb^TKAh9M!Knq|Vj^XaT;bBtLJh-}NwWq4nIdN!Gs6gLw~nh9|m8B3qY@O290_>1c|? z2EDf}IQdScrUFiKWEW{Pq^d)#s!H!<*6b9Nh4M~e=+aOTsVGZLd))*In+Vs&BPmjd zvr}hWLwm%{X?IkTCMkZ()3f>g>AEH?PBFp8T!n1S+GrwQ#N037zN7=&yo{2F~cp7f8C<<~lZ6kglVF*A7 zAus|JWjRwI!l;5fcQ=NkN~I|liB?Vh{wF-a&wbBx!{25t#@KoA8{vfxkbjGoKbTYE z3@LPXc-cm+t1Y>J@eeKP^8Dj=TM^N6r$t8U!j5NT(+C%RJZ|W+B3j zA;xG?XVBo-K|~_QI@XcnB!LlW4X8`}}i`P$oGPuym+wp0e2hQW}>=8bTxr znhKhTTpIwb&RGyl{6_#y&;7#! zok+%~BsTIv`+bmCXTswo&XtTVF}HliAk$vu+o1?W3mDbR43^|+IDpN;&~XuoXg*+r z4q;HdJ{9*)l4ZY6`8|mrNo#WxH+&IjALaYC$xM@tP9Y6|x~l<>Q~tA>aI>)J8oTsWtPDmn40AqMG5cF0 zv#gkxMF2_bX^cj&v9TGW{zl4(A0KnMx-1J#C2^6hV#!k zyrBjcw%YP2^qzVugj+`(? zE@vnaL$q>t8BcC$Ujkv#@ZVc-B{HF>NNA-9MOuse*UlW8b25Q##EqN{i2xsu84H?B zv{`)t&7jkIV>>%+dV!|iNU^WzJ!s~7itJ&;YOEqc&2>){IR+vYHsaq-_z2r($`a`! zf(#5TWl@exCQ*r51h*{`^6%J004=f;CQyks%%H7-*K8M(H4T)`+rba0h8Tc4!f-gM zs)z#PaV?CR_zZmdxl5QcwYuz18`>sSJr{`;Wj2*Sr)IWz@(O5-C>U(q$z0%Sy16tEluSC5z3!SZ-NNGwjCjm^Hq{Yq_LhEMb}@I>m=}b zeV%A{mMS;s$GW zCWM|mPOYcgEFW+??`}JFGZI2wx&swZJU#A+ty^)`}{w=U0r=R=gaBr{p`Kgz1I5OJw=CUuiEEOUZ%6fXnVok5c8G3YDpv5h2^?#_k;wB3lWhp)$w3D+iUcSV^fOGci>9{=Gj3> z#z(Bg><}JMy54&jLxFcHyV5!Im>bQ7Yn%x8U|7>5s=8-pQ-}B%* zPrPs^8Zlq0NHM>ZosBsn=~-k4cv@{vKb6C%n_9@pAS?xKVsmGg)=Pdx$^@2YPOHNK za{wg7a4&gK_9!WKg$NFa%Y45cXsFHbg3X=#p-b)=zwMWXdzV8>?+DamIs zFTQ_cW6P2@QNeIZo_@D)5>;~li+hM8NQ7dQu8FdPZIYyd>s;yFC7X%7f(|w;FXC=nsHpESpn{|2bZW)2n6GV&P)sSYMe|DnVEH~8}Hv-L5a4DpJOo+x1FiE{! z{Zm*?4b>PG&Q^vgvkTW!p`~yg`ZKNF+|R5;%>jsMJw zKWb@NExGTw|H$U(h$}K^UG>ZfN)!Ql2C|;9_3qiZVUt|n8=Edp$?p&04W`B}*?7EV ztkvwlB1I39o#cU97VLLvbv*h06+{d4FT80wo6i1~5A&cR{8ni2zXEb!Z|D_ai7l1C zkL115W24zlXDBH# zs*^zqCMVx>qprRp5m7!*x0ILAnNU$=N(1zH2x6@|*&r(;DcZQy04+#C846~}8Gh;1 zTZU4n=nx?VcNXKS-NQQ#F#+LdBCm7m;9z`MOJ`zdb_e)^OVLcZCh2*~=YLPwJ|y%Z z{-Li)Q`rDhOQ83nT91z;omxAQBRq6p0=Y<01`>@C-U==Zn)4oi=@sdm*uK>Lcf@R= z%FhaN4SV9q^&hFhRLO4{dL{|t;g^`ULyd0YV$&)vLEUg5kLytb1C z^L6vutjfv~1=Gf&obHEAu%s9on2Wgy==fgRkuM}`e}6nN8=r+zgau&$H@F{tQ}>%%0ZwyfQB?^NSR(`3;476`IM^UYmINTjbuuP6i$Dcy_v#+V%m*gl<$BF^w{(k zv%!T=p_N0Kp*2-dG`iO;Y~n}$$%`4pLQ^0B1|lMkDF2=#M7ma8f(*e-lAVl?1W^*b8`4?m|m3LqO-uQS(hFh zCRBYITn%Gg&IE1v4kM%Pga}GzWcv-ZaTd!YN`Mkf_IU*$dUZRQu!4hex;s7sZPY+L zRY8WY%jN7$rI^3t$LlD19N*my{1E2D{fzK7X+m3}Ha}nLHVmM79S7hoG?C5pFT6y^ z(M|c{;X4nHDe%aKuRYs!$!~m{cjqtNHAZFrD0H$N`%MblDmy^eTESt)J8F|EIJ+%@ zDTDqk4SuKzFCRs$=>;pXl=@G}uZmma8(%9TcAab?Ve)O6QYmp<0x*YUDbZw;N1)9mgIU!@g%3mLza~H~zq?mJ z_oD=QNz}oB!-?1mHspI)^UIj5+wGu?*uU0uMw`|-2BGuJ(p$GRB@>p1^azr|!GqAC z_-03u%kF7|K{)8?#0eBVCf}pi+ZuC!@%eddZGD_u2t0il;PC-q7XTcf-^GcCFqPTf z-r@0O$5Lpx@sQ707)+Typ!5?zT-zbTmg{jQIlsqFj()n)BTBq<#VNuk{>v2MmioL^ z1$`y~LN0t1g++`l?6kAFX&KAXe3WVFX)|7E9oNbVBVL%64{w^`T28BAu08ia|7v{f z!WTZ&@3VhewCrz#A+UfhBC7~h)QIp2>=WH+9V#AOSc~XEGQs2DZDnBbaB!meGcatV zW-yDb4zOkqWx6Jb0r?QeC!v$0c@4aa^Ti&tm>R5O)U1A3FU~?>GAEZmnx?}xEsAv@ zb%j=b8#Hl|A1&vQl!%y)&1_3CX!NVE-&xF^u5KL?S^M zu%{F4m+jIg?5I#R-5~4zQNFUI%7zGQ<8QH25sv=z@%}9iDpJsOF^g_hr)4l^``D53 zxxQ;eO(bQN#0PXzm;V+CavVqJmUY=IDTN1SXF*l7iL9CDL64|Z{o+IOmuVqAr&bu; za-xtotT`Y$CLg zQM7pe!GYfEBVlT0=JR>|RJB1jzW|4ZA_``x`Lna4O!Zhr0b;RVcJHNCA&D9f{pb3L{!))H{(3Z8~x%b37hes-=F2S%Iv;8@26c-dTtI12To47 z)uU6}snU>z7uBT)*zQ@XDlRn4<2@f%x|s_GH1f%8`Cb6SV#g8yj3x^D;XfN&BJNlcu?yayi9PalWDx1sdkth(!goB%7bomM7 z`0L7VIY_V)+_>6v)R~sU25|g7TIFBA+YA#Z#-Q6cK~j3N|D3~1B$Nge!()YDhmCu< zX($%tC^KfAOJ}7ds?KQC)iT+=0eMpX<1yYx4HlpG<(wE#QEX<1*CwB(OQ1x zKA~?)x%pi5?0wT2w=iaz$<@Lz(${s}I+Y$46fs2o;fJz&{m)l=rGfWV^)tz6LvF#n$NB{qF- z!vx;Ox_x&0BMuGvOnRMM*rdjqbtQ<`Q7u-f`dKjqpd!Fwp}$wSHl7x zEd1Y4o@7t1C%NeUbUFJjHlNi9z3P24-UD)|Ih%0v4brQ$NLbd+z^Q-tBjPaK-EM&#+q~c4%+L zQWYb2=`3a_zudq;ulvX2_UdE^{w?vgC1=T*krFcrgk@b|Eb-#KE27TmoZ=7ezM{&o zP(NXp?(nk#u!{6V*nld*75fp?88t>LIal5Yob2B1eZfDNzevM+c}wUhHV3VAi9y&` z0TVd#n*8i|wJeyeW-hqy3uwrZ)2!dK!~Y8F;Qy{MoNh~D!Vptaqg&1f8kdF<0xFoL z@mbU%uz#Y!4|pD%Vy?4hY*T8NS?Gwum4O|CM1vbO#W_V0at+Pt{~FDNStFtvna4UY zV$)q|^E=-yJ90kVj4^O3S8>^X4@=s;ste3;ao7(f&*yc zqWz`*-BTV55;U}K(zYjlX3UAmi~zm|;bM%nNpjf1hF=9)>+vF!y<`l09*%8{g$p&^ z)ZDx`ma&n;?RR;H^C14P;Rt%&`?WdSDZ8^3YE9q zQs6|LTV)?r6pT#8qk;s#<_V>u5ap<46&Lxd9wqq`azQUJ4L;{2snc{4G_I58gkz{1 zmx9qGxOy%4>POU5vW;ru-g_3yDx}<8&$~flv-G`mGJ)Z7IUi4O_`mG|fUl=o6BtfB zB#1BZni`Fc(c^TyJRCpH6G&4S@U!WMM0JNyQ&-vMTwDBuk5`3l{^{W5hN1|%D-!oO zALj2DTnYS%%#i0dcI394KcnAFX^C$lr8)Up+2HxMc!~$bz4$8>P)X~%0>~4D4 zSTfjZcewZ^;Kz&|dy4(j@M?7xn9OpyJD!=bynEnrFz9lAp575DFE2L$CUg$~Tja3& z#CtJ}c(X${?!Mska1M4cW(@DyOK>B)M-&M^EcAwu0`2>aGDw}QEdTD@I8Grb-@h}NkR=VSkTl~ z8g(0(?R?&R)c3y`DMm4@sm%?OQTepw^}#psFM2#C9UA-w@D)1)HIbpdf}%tZB_Vrp z(d|>k=)}~IGiEas9TvFj#2<1Pl1yiBi5 z5mAJMpy-iulFxnMdyw~i*B~~2D@yfEo1in6nG~S}6kgMhE~7GLQ^AI&=^RsCk#VU+ z!hk6Y!6+^<4YpOamJy481Dr+bF(S`67QM;oFEur_^o9C&3>gVDdSpm^4IQ2&H8mx8S+ubH^I(&HYHhTMa?}-!dG=9+KJBd zepIbEDWI`SqeLQ!bHS6T`rlt(Dj|Z zfrP)SU$F2AV#pvg0w#h~q;$7JRE7)*Z4PDx+RB_-@P0NtYgx@K)HY&;bEjy9ro9dy zR0em7jf~Gde>IiC=k0D}1RSV@{O;%2ppG9m`(efMh){iX4TzdrdcM~oSVuqTfR{U` zrm~@fLqb|tRMnfgbo+7^7yll;qZ<3y}X@ka`;+|WZF6kt|G*%UrKke$YgJHy$|IbJ0+9kH}f z_RF-bIi@DDV1(kIhm?w^eE!7OIKjU52oI=GbN!#rrTVuoEJHhvoCHg5w(-NZgzi`R zd^Js<3423Pbv{@7uSb)6)WO~%(RltV0%S>wn6~|@CdyweCwSS zAs!dA7E91UF`K${)6~n5X~^?W#a0(bp_ZOX6Ho7EQ3`v{%$H=?pCOF11e0@7o#+;1?$5B!r;4o=y9&l6bHi^Br;y1N zIGs1-&vS~`mjro}VpCjchCJU9Xd0A6-mFP-;s{M_xeO#3iVHc`NPK!|cRAd@1W&F_2h zVkb%!vocM-IK#FdViCKwlRme~ezGp%@tj|F}g$asA)^qyx+hsH}_0s=vD(mGbM(jQtdi(2VdT zN8uERf-cpEv_)@{dJAn&J!%MC-x7T>17hKtI%hDQC}3?^NjXI7I$0-}6lT{QQ*@SH z|6ZFzA;Yo2{x;Pd|C%$-v{;~3o{Ccd6+nU^CZskH0Z$>^s8~7zGmipicMfwBl^QBe zO|Aq3#?Ao^a8lwVV)6K#cKb_JitRT$*a+gVFfn8CdEC#Jui>#6HrhHPKrXi~&<}(q zr>B#dJir^rkCu$)hb>M1{@q(!>&qAkfI_hg@cL|CmtqM8{GO(F09=mG^Faz0gKo#m z{nF1IDj8HEW);VjF}LjZk){|;9-#@8%wZStpgU2LT#p+&B>-oc297F<&2vocM(*1YR!um zBd&yxmV)UGY%G39!%xyU-j}C6N+d$=js};~t*h#)%ge_X;FHes03>LJ&)dr8Ex*?l zi)`P6-fLd^=MZ`vKje&o@gA*~HeW1FG5a&K~%iNJ&{^d>O>XqB3Jtvwy;<;V?hB zm=(!->*ykbZ@|U}vc(MR8c5bENLcC#aMLr-wsZ*Juh(0ze2xzEWMuxk%zfPs>ZkaD z<VB#`@De}_iOK~&c}Xqg^CNEZ*ifz zOKpde7?FXbOhLG~QO>|!ffeUKx(-HXtm>_ok0(bN76Pj>?|^o8W6P6zad`Kh84zZg ziZ1t*704bQt`#0wJgIPuFr&9xIy3!^Mu{Cvm;u$>n$oolt+S*V2lBVNtPS%rTr7FI3sQ@ zm5e-S)V`G(2jUA!OEXTjZfl3P+x_(r;pam2$Mf6st*DWSNqtq>^YgP`_tx1pki@Lj z|G3gH&_fNl>ihr*43`@nZZ@hh<=32duP^|(qjHM>wIbH}e7SaEqdjbI=7Q(PWOg_3 zhMlCcSrPbfNS!PG8nM_!qyv~H7u(oD53jD6KRqke$SVWY{CF8v^V1hmIO||>%w45} zVQ|JH?wM5h1k*M7y8;={y0G+2`L{1E1!&>RD|OqOZPYakYUH-+bkB_YWfJ`X*k^z) zW2m@<0A~0&8Y@BIxt~^??RQrTobh}e4qL0ey~5S!V1jxJKx3GV5pn;(zyN7j9Piz< zNbyt_&yUOXg>nrIb@kCYY}K!pR8U|fXd&1U!cs!mV;|?jD}O54uV5S_(uWuWxKy-Q z9Grr!3|9ya4k3+dmkRb5AU(gs*yWc5AzFKeVe3}*k{1UrgfJ6ug zz%Mt(rn>+2Rvnm$cDP@>gcb9*Io+BI3ihX`fqOb}^_33#ym*x=Wl}zMQe$`arDAIs zt8=)8%dY2amNCmawk(>4<($*&xZx1*yefTq9yZwI*QW-KwzG%4L&kX=R5SQ^*j)J}}pRE)w4#0_PJWEhceI0sGoX4dH0 zy%}alV=1gmM5VWMXFx1X_tJyKdZoLZ=Rp=HxKbe{Ft$(SxChE%< zw54_AcE-cjlLeDpnoTB%CH*u5DGph=1wSNF=`N}5sDn_ZD`sM<9s0GvJ0gg*aX ze{3BL%e1@m`R(?{0a8_N7{QCb-^cBNUVAJ)m-E9fh5t}rK#-%NAkbK2vIAU_SPXhE zfMyS!@8x;qvvSsWGw}?Y)+BgH+|}8YM`~oAeaqkeel(roOn>4j8-d1JDO;^!9bMOA z`%53yCWWsVyGT<>wQ-fzRus+DXIwoAf;$a;I5=BWuSc=qXE-&19y@$)xEmjC%p!*k zNON@tAn0%Z0F+=J20%lr9dfU(nw%UbGR7~TF;rD!LuH0&yZHhdT<{p$-OUXn^xFx+ z`dIpWxp=uowJpnMj}pA5i+HFog5hG(PUFhLsc9RvCQfNX%@U7LZjCrF zB}7MTbXz&?GSu}%t(S)0T2QMNh54?MbXj{9>L9O8&u{GK#luXCOn2ZO6s(P8`y%PG z4m9#jGj@Hy5K;5Jhun($5Oor&p8uu~={%B2uLUdaN3l~|m~}^JrhS+2i-;16qZWe0 ztfB1f4Utx9T~gDQ^NrPh*)h*m+oB}`n3NyD%>;DWK3?c}1F)ZG%FhF|!;pdD*rY*TB<0=Ni#a0U;6I6EJ;+^Yi8;+hH4uqNpj_-wFwx3M4$Jet z5`&5I&5i$39uuT7kqs}xyvKFiyY}EEa6m9-_&ZsMzxBEau;{V2yn)>Cp|X;Gd7 z&;Z7nJes%Sma3$zb)Jr2Sn-M28IiM;MK*HFbl(pWEO5WJcd zQ%jz}N5#cBH#AGM%E>AHN#T|^JxIF2M?Mc3nuCEC@8ZE;-70&xeHr%lCbOrRBqG$W`fpFa`u*$sjHTn_ z<@W9XJg|!VHJ^WF7&`CT0ZiU(p$rgytakf9WGw1iBbKR9Go3a z{Qmu$!~dxdOW(r?$obCG>M0en);qoL3sdx0TU{t!-nQR=IdtAH9v&JR`H5>#`Lnc^ z;ZPJc`;I-UNd>n_(KhLAi^R_S1w#QXkMoPGM(B3aXkW|9wWx<~FmhXl!ouKmfD0@=ESoC~7N z^4ML__=sBq4)RjU?9@M*5eZ>IJ(d8dO8S@lv4Nyo76_#jh8#RrVsB-oRU{0l`))Vt zDx25y@Gk99q09encm|NlFmg*;-34+3!9^;>fYwYJ&0b5oAR{r|6f-8BVC)Tdv$?OB zf14Q8ozd3Phisd4ga&6M{EjeWlQ5)qix4d{A281n_VGpMcU!GIbWFuWh7+kwzHP?G z*F`sF*2+yzl2cqzu7ryAm(97_U)>GTyAi|4P+9hRobxjeVzUcpcbBTkke;W)@-xep zucY~hS<~Wq#yRQAun~N}T6KGSx&}U@ZmZA1c-q|Ut&7d;V>Mm%_~iKH#Dp(!`ZaHP zdVj8d0RNmG@T5Id>R|Mqo?cpHdz#zZe>8tStTk_aYylzMd;90vRV)FY`}OWX_UGM6#G*e3E?-yO&zSGlV$P>|OeXA7E_k?C zh+yIj9^k(hP*ksEMsLZCDhmToM6N$yV_WkMAABs1(|^~4S4qx-3{65t1}CZ-oI@9Z z*|Ua+V84M=^Y_ixC46X9PFdc_* zi$kv0n$%JOh#iBrrvX4K92y82u*mW>w>nZ*!Wc)(x57h(Y=MduLm_GPK3Yvl;n(YS z;WK0tSo(AF6^%Atd#T@DR0F0~N@Nbx4c$*6lrBhFBfKzE&bMf7dYrrI=7Qq5P_RK} z6tM&kHiAyJ2SjaD=wrK~iTy3jC>g24jrOnU-!IeiCATSg$V8Rmy}$6Y@C6$Ny-gdr zic}ko6VNSZIATb%{Sb-c4;e=d2|;Jvu|sO}{b!oYroy7aRL>c|Y!OzNSZ2#Rn#>GCBGgVb&@?b0L<*&)r42(S#6b$X>UzB_MOKLTE886gs;xq0Gw(37 zu!@v46FyN@WzK}2EMAwx+J7{yUVDMdE&9=*NigOeE=s4%-E{>xv84v#;EO4f(-2kW z+b7((%lE4!Q@wz`-cdYJOI^=}N>dpb;ddBkTzmLDUQ&SQ7$&-(50U-v4&$=?Kb{LS zWol!;eS18$9#23mrGo&x%f+J>M(U*M11K6ROwJ!)hvEco{!`<4pFf5Ov-v%5-ht2= z2-}LwNMyd2zhIWrsap~{H$a0iA)rnF`a7g*XneG`=qDwq59ZQT`X=| z%O<)5q;?dT{jJf52VA{ohy69-Yp#MS`B;d{XYHw6i)`36xyDKM`pbB&xHUwfg6m03 zwxWasI<&MrRU4WDKwykz;G?v#@I(J)5|B&Z2|un01-M?Ny01AN+qp%D{J$oNPi0QgSS zro8wscFAI{IV9R{F)NCMjLON@n3s6@5@#%*z>>h1O^+j@stTDn$&3p(#(t|yg@ulO z@?$~a^VI)sV~g+ODMG)R0~Y~0NQjL9U5Uy&X{N78$5vh2C;<-gulFPS;n5Km7FIT} zxM9fervO{>?V`K${@i7XfuZ{0g=HK(@QV?uC2xhv*Hk5NF?uls)g@+JjeC!b2(Dx{ zbDS(>6hVvG^cD63f81&B<&{7$nV<|nD`VEZLS7DS1noP+T;uMD4zU$4FN zUk8)FajeiSN#wmG^DneXIy;_naljrtW5PrTffOssex}~ixcX|cE=3GpiExwRnM5c2 zp>mJKb02p_m3BcYoPakiR`rxdH9D-L@b z23NDi7!)gpiIjIedyv3=n^}2=T<5LTye!ULSq%yh#P$4x*Mz=D zA2{tJWvV#A5dN}6Cmi9t2N3n`5!g==9v?A=K~QdM2; zfV4M>&m!=CV(^~rf6DhBB zY6PS7?(Xga!S0kn%hUBxaai9DP~ars_HeYfm&YE>142 zU;jB4QJRJSBmqY+AI5s`@Bpf~* zfg*u=_qf*N8;5<@?c^Gu4SoUD*VlLIkJKKvk;DfwqLlJ@VxXcx zHOb1&?JEyY8)$DO2PaM|KNxP_m_>}!*dKm6-_h(!8LpFyYDo3paD@pHD{5hi{r4N3 zhwz2?i?wa>M_e6TV{{r1EHMo+Lh!K}UmEEUE+;rl+NB%{G30mzf>&9=#Kc7V;~)#4 z&%uGl$DzZ=ArLOYi($tNxkZo5{v54S&8&JpfmS{qvmqwVrLd$OtJ}JI^y*wm1AcHw z%F0f+dxC6iYyf@e>1i*nTK5?abcX%YQFkdjv-{um2@8kA1{s{$OtyihuKr3VW4DRZ z(B#K>#dlFS@+MB|sLdT&QqF;c1{G3a&rVgwP3=L1hKV&k=p%BNx+8AhFU}x7cwdg`fgjKksw~7pUduBOjoTn%Fo@ z3RQmYhZci$!})qIT5)l(63n12)%H*#!1L0988|=3BdTyv{Vx_I{P-6J_y_z~grprC zVcFK<@bz z)ONOjD;?kk`~Mq!^na+&{x1SOyznN*0K${BKYu>&>Zjzhxm+Af{(>64Oxxv^)I?8N z3kUI%lj+UNDYT#gTv+tN0s6#3Jj{+m7Rf1W2T#lcP`s`{?A-m(=Ec zxDxTbMd7v#XAZ+0w zK!ul>5jOhy-u%PRfm@81iA9i1Xr=S2cc~YnI>r7i(F$A;YgZk&JJ5t3fZ15K-^TseCNrasCf~0C=gtFx&r^-Q2_6=5zR&ZBbc?~gwxvI5nSY>L zRMgyr$dsZ`INA*_JqS`xb$WjF3OZXUcy}(~kQ(54!xg}UG@vIPuPwMk_|dVsLrwH2 z6FBsZU@9`f>ftl~VZD~+XIseax__v;)xo-bQE+#1{*7CWsv|BJV#oayT)H5X`~@Wy z1|C7n(tk74^?M7`NbwR1UqD+~WF3(8;K#7Dhus6Zy31*w$`oLvL(9;8bGG&N-yRbH zls+KrdcV0z0iwuqnl8Wh7Y4uUs7BvceLxqxJ(>b`Z8z2-)@5Zi;I8#?H&k5h>x&Pv zczNd}&>;FEDSC1*ZCYBM9x1Fy0&hiAI@zXBVGBKX^ew3C&dZXraJ~}c#B5A*fmd`6 zs$x=us6>Un)&0tNH#5yg#)8uZUviKN;xM5_&XbVbx+1tP(wY8tLq-=Vjgrn;)MHq~ zRN@T=q;U~|UCaegCu)$6j%8M1U z{Q$k0|9St{)Rci?z;C_w(K?KP9m~59XhPoS{nt3ai?_0Q^FLtg{RpLn7g*Is3lpAN zI7Xzi(a_{f=fKX!TE0>UIeHFbcp>gWTH;aX%@+$WwDAs>n~727zBRFXYX^7);w&C&pRhoSYtZo}(ytOSk>)^bVHk{YHh4k$FJdsP zxaxntopsiEJfv9w&PkuoM@QWqZv$u5-5-D*Pq+Wg`_{)p^N*`_u%AG6hxr!J<^`_% ze*u*fqQ9{N_y&Ln@WYxz_RDsk7jM?t<13X5m<9L)j5konK=FD}o}QDIj3~B5%C#AA zhGUGty=w`w5#!-C?GiafkcQnwjiG_W3d+j3%c3|^2UUMEqQFE0O--Dao1JfSKm;`;@O)iWsP`vG zZh^x5ms=}%>5dcc+V=UmZub&&|Bj=_;rWXH$C1H%pTOH5!^f5ZK#2E$zdixNu(tXd zMnV|xPCqp@Cg&B}D?3|TTYLQ$$DO6_=X(jlOk8yn@Xcn6sR)U#ZzdCq43j4RE$t>Z;rd6;Ki#hW1A6Uc@4R^<^YWy&s!D|>Vu40VjYetL zmm+PXV-pn`^!N@UBH0`((C%damRGnLg$2D0!n+jc9=;-=n#P`}NJ^55X83{Z_dI6M z`T6n6QKi@Id_S5`8OOoSK09;#u+)rTZ|Mqt4|8nFH#7{5f*>C%l8k;^U zHt)p(pC^|W)#sM;a(PX?Y3klhbK!;K;`zKX?H8rFwNnQ8i~-Rm?sX1|6r-Op)TET) z+}5|Vs1sV8Hqj=wWW5%}T1;_DNArd^PM=gD4CQ1T8pu5O46>s(%oYR}F)xc30!q$g zIeG|Oz4R2#f$#wE8(u;L<;u=Z9XQLze0fT!ssdw^%0+EhP9WoY+;8I`zSigS8(mk(*Sk;!ABN>f4@T`m_*5k*K zGsi=+qxfGH$e(j?>YlqI)ApwX*`kx-0+{C#vvhq4Jv z^jL;SNTlhW2RyQATAx`F4pa$(4+g3dcQi|%M=gEZd{^^pl)25sxA(ss?4Zdc(+YWd zKCvzoO&Xk`$F69cik6%siY{WWoirdLLm?CJKmF@NUP&Aq^Zb<{U@@nb&-yt01lSk1I5IcPnRCr!5(Rf)g=;f(2u&UG$c z8s2r(Pzk}3fd{5r(LZIi2=|~Yn)((fO!6WjjKpb{W@mJ?n9Kelvf*mGq;`7~lO_&! zzI$IE_T*?`{%elD9+w!^n>o6Iy;{Uw> zI?W&V2L8_@Lxcibo>c`6ruYFfcFjQk`DcOxRm^FfFq(kh$1;^9`t^NJsVt95TT}D+ z@ipJ|&e`D+a3daiZ$2#Y%CxUuxFjeQwUF4(HPui>?ZlruVs=sva#=<_hW(lo9Pq_w zOkeNM4nkwnrQ(`-htU9aQ9yr}vl=xds;3Mh9Gy{m;#`ka_NdquX9H%jAN%KcFei@BRvCfs@7QG3UlB%AiF~8W4-#P$PuT z_rLULkAth)6yeqX6NN&tY>3^}l->c?M2-#pykYp972x08?DBYDZ9F+i6L{M}2AqmR zLZFoJhQ{eo2?TupU0(^LU$|{~-NNbQ-@4K$eJhWet1KvFG{;ZF3nwkGr$tLzb44MR zJi%4GiHp2Qp1mN`vk9Qeh(}gH+P3Orr)bZ5@sU_pd571XrUK7Nob*jhGo$Ys*8XNL zNA*q$si||5@K-KaM$n-GKSun7iUkuvgftXr%K_{hswygY{qCOT{9l{*_U5&}Q7TKG zA*_mj16lsywwTPiaBu&qrk1ED7QZTfitx7|aG3B0sJ>foFC4(8WU%*tkD1|?N>oaQ z4>%Zjj#|TNp0u^Ix38kBE|L5i;`elX?co2|uG7qqW0o(zZuw(XMMXt=lvRc}q*LQH z8^EO_`~T~_)qz*aki_|kB1{7%V*9=sT9<6RI)>qq9;p>IO(@_mjEenBw?@AM(WiwB z#ItP>`!n;v?~>V1u|%4M39JjBwUqD!Q_0>9QnB&q9@=}IpUUXct8Tw>8<&m7a8j9E zAfUO|kUkD;_oP&LStGU7xW9tD)Q3)f`Lwqk1!FOrGc@ig>NE=FO%>gZKN2J@{qMI; z?wnNY>vQ&pj}A<2OAA?u&-2YdA2f0#i3a$vb><3L z$)P&(=vnPlI&j+HBx#(wA&H^m&Gs8!FLx{DeXoNpku%_sI%oCVZrquzE3IT!pd7ZQ zE;ZG=Ys>F&)T#w2*V_x_$O3Qw{6B6#-})*Ac(+!V`eAY^V+uQ5pKscMjOB6D^A#wC zyVSb~N6NS7=N$tM-YMS=w6(Ne7OMR^o0~ta9XKNA@9yr#?;5D zQWW|t+uQDsOnLODu-1d|$7XxMViEl*tC4?jp|=Pj8$=og;X+s{8S%Qfw3$Fq28~IpyI!`Do8f~gI4Az%8HBVbE$7|3 z{%dFwnzNY_G^G1$qxTt2-0XW$G`OER`o3pw=H=`e1+ac8 zKsn9x_CJGE4fUnTEUr0QcBr78^*8XXuIwYR+(s0D`Pr~24gy-ATA!cQ%QMY9^(|qZ z*F`rjk12VjOHl@PW@Z2b?WfPTxKF3EMan6I%T}3mDL|+6*?WmW_Pgtu_`{KmiIvYO zod^lSjSVqzUCLb4;iQt>F119o*dOo^Qw3eZcb) z_1*{Q3+ZAmteFAPUnP5pm__n?h!)&c8DR}!Ap?biJ9H;4iI+Jl#%m*sCtDp7bma-E z+v_m4Mv0x*3m$|4Ul(`ZPX?TL9tEQ5;&=KZoW;&=Ef||~%T(+97$XrPkb1I3Q`4kw z8vx83kO3?^9v0Io?VD)}rFSJuErDSLJG;)gw+4Y(DN={VweVhC6-`UF`PG-f^|!!y z=A{sJaj}G`;3FqQyiATpjKOrEUE|}j5840o`U)8d35N)+rl!Ub2yKx6^N#=|u)%K* zvI+_;DoPk_!(fIv@X(ESZ5w|$s${5RV`D#n9DdF)i2$Ea&aLgjy?l7CM{w);@bdi? znIqX-dSFt~d{}zwi|$L@^^W(1V2m#@iZTpFfZ+%;7j8a!i*Q{X+z-JNj+D|0LEV&j zU9OGmMm{JVuM~Et(fP9La5yQ$z@_}kg{a=F3xj? zDq}a8g?_e4u(c6EIK8QkX+V7mOV2*Al@Ca;6jD%m`< z;HlR&K&feIR?X=SU7pVp0w3FB)j-{$+#xhb2o3lm>KAM;i(dd+=0`$apQAysToTcf zj=mLg9*aX7ci4^Q)n1r+cM`SIsuY3%7;^Pf3%dLy=9Vx=-_}rz>)^>=S)tjVHLb>_ zw4nj0(ZQM$+?8Oijqc z5wJX~6UZhWW^&>vY^cK9EA1=J9Tk^J9N2F@oVZzA!GZ+Q^e@lfZVdc>8pg&wC<*;^ zOtLyI7E{`9#VLrlW&{!Slr6)Ufx$uo?s;876-qJh*dSK+Wb{bbXogB|Gx@@ZC2jc} zdUvp7kV z2>>*Z@=&8Qt#!B8ru14pgH27jJ7=pwjRH=py@3VS`%_tKgwx(@XA*=1vvu@n;2nIB zER}(2C=k=z3oO&ypCT3Ye|^q55JdU-+?T)QFbK0sqW`%?u?ehx8JdQL6Q3&0kgrH8 zw5#9osj3U$fx_my=|bo_6U&tB%xxyS$e8_0x%Fe)!iw3&Fr@(>mFq7Ng|1rPasN@Dl0mSU{ki?^52C2fd;RZFCRG3NWoZ9E1XxdEb?2WUkzw3Kx-4;|E3arY?O07!s zde-|KJYFl=61QFM_6{#qIU?J#l_b9!t$uxLzle~Lpjq&3|1`xCYPmUK)c%8Z)_EVb|7lAKE<+7q?<@u@~;j_qa zByt0?3X{IMyjj&}XJ^-h(}Dj+MB`*KqUU6awx86=ObA9eK(ggw3;my}wb$og@ka-T zbxM9;0oLTt{~7_Ng<1|+0$Dwg&NeeMLuHm*azyXxR4PRs7P&J@^gb1BtdW1ly?kMR zc=!$|!T^4SpYNYS?t!!#cT(}J>OipX?de0Z^^8@S)~9){X9Q_vh0D=C0t2f{5mR+^ ze&XY<&S)R7AL4T90E2G&MuYfvQk08s`t|Q0ubrp6Tb`m>ZCx7rA!cTDcqMaDn+jse zV&Aqq>G+gYNr>c~M_jBX)d#A9HS(t`c6jx%aI8np%0_Wq&+mCt_yUyTRrT3empfZ@t%%<3d`h&ix^ z30Npq1qtLS88dXb77!65u||Rt*<%U9Y3guz@-3|_E^nqr8m?64JiF9AR#Q#OaoM%KJHjulrPHM7-!b88;N@5Mc%$kr{XiU>hL;6(G)uMR1tx*QvhRkgKSPn%PD zFMrF@S&adOBSI`vB(mQ_8M@L5o-sh~0jPtkNv9nXd z7}%1cEF1c%8m`&Debqh?*|mM*H-;_2yE<9zpOG%NvKf3m_9P_O-=$~u;2^_jWaiRS zD3K>w(rqk~Pb369eWb9nvlsw_`5t(&NjY`hW%GdqDhqP=U*FmijofL}8`9Iq)(D`Y z{+CkjsT1HIQKYW?CGU6?9`UoV79@WmH)Jb%zLvT0mt2gZ;lNJ4wc@^`aKKsYT_K*> zeHgHcYWn>#2GZyWwIaT%z{>m9Q~N{Hy1ZWC5(e3syjhOLDPecpG232BnNST4!4~UQ zwla^mO?SbR#OHZCSI=RFv=FVKF6BsLtp_t=UW@u|*3{XV{Ps%`_Stt59C$ccB+4)u zZdv9OPvt+o%xd{D(fIty`0yH3L1BX!NTCa?*2x-SP~2p1Z1nTVU9fJsl;XJ7_HV>! zWK)W&`6fj}PiSNHR*X)@>ARlVGR$x44gT?+Nuz#&l5pY?C{jQ4-U5TfQRYdd=ihXq zFKn+5Jpi@r?&#P&E4w2zphxoeF|-fVtDhLo)ruW-nTnQ;kwHCne0)4Uel=ev$f}SW zQ%)!$qxSo^sl9_V>#aj7Q&pdmF=Yd1v{h*tFkaTLPOJChBP%ZAo|sF*Y^D34>9hOYiw&RM2NE?hrpdRMk3iQsnQuX@IT+rQMiZ3KuXko& z^o2HLOGw!MOa42>SS}PTOw+`Op~=3;0Xmmz%1lijn&X&xaTeUK(&5Zu>a`nRo+YZc zDTx+B)jiLS6P3d#^N=VI&4$8Ab^dQLF$#wZAUZ%H} z4kyJ_OYHw09okD9$A2BVWiA^0LHl@JNaK_c6d+DYI1Xgg!1*cRf`MjagCF$}2Z4D~l9( zfW|LxUL$^P!O$EwHaDr{r$7)HUXh`fv#27~sp0-3n6-3Aj6gE zSK~|}8R*C1tht}nDa8+xQwuZvUfgR{7aMk^ft|cubnU*E(32D(EQuGAgUTzTGso#^(l*61d$NA?c04`dUR-HWD+ zMI^?g2?w#J2fYcBMl9En6?1kp0}bTEVVLzLU=s!*&q7G>2ol3VRet`^xzOHw#)6G) zVY**9%y)cSTW(p^F#EG0cHfg3Z|y}7Sdx#jLx#iG1c;oO7(JRW84NQXsJr973}A=l zi!hMI!RgsESdxvHD5mX&zWlns_u(dklPrdSJW^dw;&A9y<>3Z((>SjGtpar%VQFb8 zvt*j3)AiW()8b|&w^9j~+HYQ9mj!(~YSu9eoqbFppNNQv5TD}wf~OS2o;y+jO07_V zWIy=@MQ}e!WwRQzy1K@YFR)cf0g4qEyv{Rt8pAhfljO?9iwk_GJ3XH9~Cbd%rd5u zn$z3BvvI;k{pAN)3j8kT^BqV}(czOPaZUxCk(^0_DakmiVv0h(CTQ2fs&>~iLfP+emv z_^4q3+kmz0dXi)yvg{beXgR?UmDaJfA z6B^LWOVd-Mp$6e*jEwUrD(Yq?a?E#c>H`8bpL^JY|qJbhwE2sqJrLAvl z{b@c1Lnf$q&ygwW=m8UflfC{`^^fyM?vL!I+_vTbDBHs3#Kz1F5>vyAB;v(EmgVvR z^e~eYC8e35_;XF=%B9t~xyf)6*joq!R-z5H{coV#jCEB*4-py7Rbp(ZG(87SG#di-wgkIrAVDU$%{ z>gxQ{1>io=0=v4nBpkG3amMW`x8gGJ@d9Oju4mHB;pRk1_o_R|w3eEMji znd`0<8z(1+s+t-!Q2HBg=s1zPi;s(sht8pygS|IY?nnSTH~#SPx2{<#mvSMS9gTcn zu|uqLl6M+`gsi!Pfc$&>oRw99z!(2A;)C|-D~KFPR9GJtxsZQTYiq3rM6x&v&~?rxE_;A1tjeX|~A-J)HqUeUnr>G{TEe4fzS z=J#ywWWG3<_jr|oRUdJ|^EVC<`vZSgscq+?k%7Vb>gw^$>c@`*GRcMX<5zzV4-YRd z*%i3Tjt~PKsZVxKBzAM&$A9aaB0unUCnQE1tvhKuYc``Hst_0aJUF;|__Z)&Wd$%5 z-THM~3wG+JdF#)^2#N!IUd+7j7W?Mb-EdlO4(sSKAkt83Ij9Xh$XrqG_Fsg0#QyJ} zIgHt#A6@6_IH!B;eg;mZd^-N~j%9?7!tK~xG9~*{)4@NC5_TOUtuevKkd;E0SJb+a zp|V^t^DAMpd$INg_OI`X6QrCZzI-AMOBkOT_cO2j@SqURriR!H{sIO(O5)7eIg+fQ zCMjQtRN>_j@`G6(@x};<#xI@ILuLuj5HWcu?7sdSglD~`dRT{f`e_P`>Kqzw2)8R6 z1Y!Nt%q0&@H!j3IP$Ad(hpn~33$|;7G2=@oTCV(|Yz5&IU`y66f4bYaFz)nv2HOAS zTA=#X(@lE@7>n(k0NMsAc}BA|d1-h9xc@MkP_IhhcXw%7!``a#xh<{~zS%^BGSGfl z0(8I_LN-=5ws&M36LZXRBp5#~{u_xshQ0ujtj08x?WAjB_1n+pUIZGbzf^fA2FvjD zBgX4OctlPj#1L2dLTEBGGgp89wDIl$b;^*MJCaEgAMft&+}re0lESn~lb8jaK7=Ry zv}-MrXwyTNFL$F!hcB8xDAB-0clIasIkQOsSd=6Ev1786J#KQc)Tp;!~CHo+AF+!XwBCj>xlHOZw zN-&-o~Fi88cartIH+TOKJ01oy*n{F;!}pv&WE7)GjHW1wqjcyv>0ZEYQ8|Ly2L?Qz02I99ou68Ev96IHaqrJq22!>VKjz3j5>n~e;njb~ zSL52P7w!EW@V_oEF9AlzsZtvXpI@)qk?<*9hL8hpQe-4rrLA9Mm@d~K&zzb`*eUz6 z7RIqETOx3FK0LgCI?3ECTt>j1IW=2Pj$v{zWR#h!L~^EOEnkKd`oZEoJ_D-EiEOzW z{-On9ZT1({Q*}!$HkC!5z^xs<;r8YF&}91IK#k{z+kqlFR_6OA+Uy10rW#^2Av4vX zoX0`QO{`rk5QNr((!Sa?YIzthFmP9AdYJO!9w(AKlVd4qMpy_41d8k@f{JKH(l|T3 z;gk4j^h7TEo7?_i>|~`Nob#?oOpJ*J?I={7cqNG~Q2%|j0>VL}U4=w-$QPQgEIvWF zbWX38OU1T=1h{s z13iQ2-Jkq*sUjN%ApyM=$KySL;+Ha}LGl;$A1z|oTG)#Z$I6C|djWSw?5%EkQ52`t;g)Q$~ z9POSjeq(O!xtM7jH9qDziCY*e%Y#T2s3i;FdEbrH{{BN}u3NV}ia3{RkQmGhK%GRko)7{uq#r2e&aUJ7n;)qU04f4<|}E#+u6mG|0)r~*^OCEvm8_dW$>Y36E(uzHb) z;)JwOozO5_0Ra(Z1(Aj}zQ?6z`-{)7j{tnw=5sW+vtvd!vb4&r1ZR+@8ywl#$TcxB z;Y#*)o_nG}tFxpql3CF2yl1uN`X=Z3;^MBTi88xx!lv{V+wgAqBRP0a3tTAjAw%dmT*VFj6i> ziu`3d+$Ji;Xp9ksfYLb-DdUQcj*i+N+O@bCuGUGCT&wW#_)jTr?{4G$a%{y)-pC!n zk5>AIR(sGu+_x8*H8tA7{dgTAn2 zso8~_zKK)vd}R{UhEfN~jz{hNLgr{XE3Sy!c9a0aVOUI^=pDN1npw}8<4(%dy zazsOs5+W(7;e4iuu}#+@h6kraX|_M2=~fSQQ}oj|f8CG-|Dan%gs-^kIp#@29SN7T zkbg|t?Z>SS6O*^j7uujlFcnUzuIVR$C*2ntO~Os*lx==pLJjFpS_~&Iu}ve6F!jp3 zy4srn#uVLNXMlngV?C2=sG}pBgoqteC_BGEv}^VoD?FuP#Q~V}0VOTe-cjxFi>ex) zXQ#T>T6ed0Uck#k;J=3%Uf$NQ6cJT3=4azE{cKsBeAOV26k3>tot+)PnL0Y2_3a*n zZr9D)*o6SMnvn0mD*7fU6fFK55BH##o!`il97g3bn^SLeRA-teh1Xxuz8FGlwJ$+9 zOhR|ovR0j%x_6XuWUXRsQ-qCMVu5zMcfK7%SUc@BX`yS1p*ENpJ!)qamyC>%!pGr@ z|5bAK(?rP9|FZxP6vNarW~$+i)H0kL3HF+UemXkE_FpQTU=*H|{-HoH?;ofO%lU9m zOc4J9MwKB(379N8nX^7YR#E;NU);5jwUt8J*Ak6_x@L8Cx(D;}Iteg3H97`43ezIl z&c9Vp9!6pOjEt`!L@Wgw1{3T_N`oPKm)T%brZ1~CID>eg+A1iq0`$*NK9*0bZ0(Td z=Q3PHw|?->rY@S5&d2+(OHy;o4)?}@Imm#>Q(j-0A2B)}tNw(ha_=9Gnm0x|xG%Ba zZ;gSkyS+VAG^AQ7iCXVu*5+%e zF7ds2wdc$JhLg9YWy!o#&$^%&!T`n+XQ8TEw&la~i@PKdH(y+g1#nw;!+7e-Ew0;%8-9_?GcyRxc8RYJ%9 zxzYqURH^2UaT}_tF=;Vo)w+luUxSpbxNq&!6fpYp!^9}w?D1qK5i3UOYm)rA%$HAM zM)(P?5CS((&}!(uE+*lVm-3gpeOe&Eo-hk=!Vr&)hH0{RVANe%h}IuyY-Fg0(CQeM zo2GTWorn~diuzizV!}6$ZUqd`+uJ|yRac7M_kCKfH5B}GJK6t~4IS^aDgsawR=XBN zo39yFp2#g)mB4PEhNiBk%USno*evayM!62!-nu|Tp%1{oHXh6z?C)n=M%V|SqRDVT?9yvP@oJrT#B7q_6k`&dw27z!9!`T1D z(ihU(ac7?2Zo7zCAjvDF*=4mP^!Jgek@1qeag1d}ld@^mlf%(=7n7$^GBvqad~x|Y zbwe^`W&h)1iUQcuJPMR&jYq* z%VWQA1ga;LXFwiZlT7dM&kUg0=wzKV<{t zp0F)u{pzy1JjKzgbRIN)e~ZQC!!Y3ZL}aGf&x&nP>((jxx1>n^!4@)nJoq=yL?!mn zUPYYdD9zA(3#d0mEe~AHW=;4ONcOEdoU;Xc0!$yP?VSy~{q}%l6QGY#E5@RlniCJS zX)?V^>k^Yj;m1W=SS>!X0dBN_fd8uM{{*gh6zMd}jdP90*#yS%YYExJIGK0~(antw z=|TGFIcBDao}{Cn)g_GZ6j<2d9K$;EHqA>*OQmIHaOAD4j^<~sfo<1M59!9AeStBn zRwc`IHg|gPEB>Dfxi8!0tS>qr^ry5M!y`vVMmjq?)$nfogr$o8$&TNi43-FvU3Vo8 z%A1gtQ)+V+CO~Om>vq7$WoW*P?ZB_nHJd&7hF=RSdn#mwXqQm;hm7Op4xO1jLo^;} z%>=EQlLbz&YWxo&Ls;YUl6Ztz%kovstKkw^k0Fxhm|%5`03ObqI%T0)!%M6JEln7u zRW%G8R~JcNjHSx|Cg(~Zf)@shp}z~D^G~N|UcQuWSW4xqWmt~$=0FQ1`>N)3ESo@n$1h7?h z_CHWAi=#ff3CjiA6c|HN9rkRsm#soK2~$RY=-r`FSqjL*b;pZAbj+Sd~_9Xyinb8iwN^OCjARPl86_1y#BuKD@-kjsEYWix5NZ+Wb{?>_%2K6YSRfEyD2j*+7)AB7SdB^m-=xRm~F~rJny>@{1Lh= zwx!$@ETmat;L|d5y_xZb`I6*W4e^H?!DeFPQHsKPFken&erA0YH(HbJ1;!r3MOuVM zLvl4VcCb`XWTM8nT2GaYzF!8mFAE8FyGG@@$_Hw_Z;LS%JTci#+wYS`!->;Ek5*4Q z--^h2AJRRbE2zjX3sJ43q(C%8nK$m+%&asO;3>i=>G{+4!V>3n)S<#+AB@i2#L~WL zHo?`Z_PTIGg7}mHKhbL_#nZ3;a7S~`p1^ENVjuE&DJg;!D7zI_d5;pdE&~nP?3uEo zQ*K69PT=3)G`P4cg`@mey5-HYf`Wpr&Rf6%%gM;4wQ^L9#JW3OWAcpzhZLBh3>w&M z*n9wjw^~|0=vVViG|)$r)RSN$|K~RY20=rB8bC57(<5591jYlx=d2*$%0wN86}#58 zY61v3Ir$5~az7jv#ecpzG2VDNz9n_e&N;sUn8DRE?P9?g)p}U!+|+%Sx9Ria4C% zt0~G8BKrWIIHl9&H7Dg`&YL`CX?H5AgYv*{^{e3#<%sq(X-lU-J4h=DdN)k7`;qP{;5iXOlLHJ!PFG;@}X3kv;+^dk8 z*S7BOiljU@^9PGd%p51u?3jCsqd>WG5ZG3?TZVQ%eZ(J?ORtRq5)FX_;r6d@bxb6 z_3i8B+g6eGo4*g!mEAyZG$NA~HO9-KxgHbCvuZ=~wjBqGhMGn>5d;R&EZyqxqJ&|| zGtg){=HyeTGxSOq5lf!BQ?@^xdQ7_UNBAo3?u!yiAMwGb6mYYDehOUjQ0}hRGZ%@_ zvg8Zxl{$u0<7$qRmQ3u5BZAcM!ZVOrUkC2>hu@dK+Y+`_7H-}PUR!d^$3z43Qw2+; z5mXRDQ&a76%1KIs< zpH_fDG4PEKTY`?7sJl#yfMZK2P!NOiH&LaUEIuC5$L;Rz?E!|1!29h8wmZy5X35}= zA3x9k`U#uc@R9uo(DC*>Pr*)>)6>#3e&P(dN~IkqB1`d{U+|$PFRt1MFP;G`ys4$- z-uAAwZe|OxUPmnVAkY8mPxv+A2i}<`eMc7j#AX@xMw$u5nqxz<5g=V;#leiMY~&+w zWF|gRJii#f-T)5I+lS4{Zti9E>iwntQm!z;ERHxq%QoriYa!@31G8O9Pga*9+p+-5Hv6WAfVZTvZjJzo^&oE^2<|&Lz{Hl6C zTO&ZMj_4XeBZ1gqSOzoQUT)-(2^M2W7lmuD0dpr;Lp&>AE2b<8H^@Y=I+MP~;yG*# zP8T4zA(!T3$*RU&@RtmjHyD7@?Bc#8w_=fAEnXWW$MV!5`y}p3*TCQ;H^I&rd%l}z z9&o*!zL=4P^XFvbWcy!?yMFrqxf;5?l@7MdO-%STza6o;Q67zp4_8LjgV4a*M6-5s z1E6?Hz7eDl3=!xhjI0-eYl&<^_9tZ>f&F_|}XlrS!nIsn$>`|^KaO- zCIe6+#(4k`+!gq6wYwGgcdS|;$Qlw95P*F7k_41L|N2lU3_5)30gOVLgQ|Y{ZJ9EO zIdB7%D0BSQBYO`Fc0@7`~${HK5pIlyhbt;S9Fw<#1$I*jMP1u1knAJYL zaupRseVXjx@OUG-u50Kdn}#O=35oE&noGaZ-hOMn{o~TGymU47)RoXoYU~bQ%VY#f z#7v$r;FFO9hL=0i3Pk2 z?Ot^1_PjavaPAn(j^m^$qLwR^B{q*K{26$248(suE&^7Tp@TdiSm;c<_7=vIW?He> z<@)?D@HwmJ;Yj6kM^{5g@Uza8+aTTTiPD5(yaFNUST>e#=(?bRW z*we9eFFUF*aE)wO@OjgJ{9uTWdxI^gyB70rkhy+SV`R1K9%I*@v&xhi(2ToiR8qyi zw)vB25J-w9Kl!4O^7|25V7kTdnV#cE4kv*VGnRA=Z6ZE#HiD5t?f5D`NgO#LfWQW| zr0QNhW<@k)q;2F4AFYK%FV}+@c{Qy>XxJRu{kof=9aQp1ElAj5Y4t6XL9JZjU$T9y z?)~Q)BNez4zXm&&$1Z5~&?}_UN zfvLt+qR_@rKqoX_9$z84bJ7KwQ_aoIz{%R^xEXU51&+q?O=+q|MM+pnk@kBK@M-w& zes>N;S^*=DH5=~8DxRf>CN6kRtd)v`VBk|cvCb19VPt z`g-2llXZTRD;nVSyn0hz%>`iU=YVv&+r6=Y@|OH*uaXTgo)pcz-2ay$Ndj{#(sykT z5WVYeb$)p|czr+t`pBzsPF!ng8SXKqWAVyFC={5yhyXsx%S%;wDMkq?8IMTvU_lA~;h#&&T#%R3Ck`pvCj z4g!_n_^c`gZznotkBHXN1={koy@SlbsJ#zpC3zl)D#fICdO|5FzEoB zl}V;iP(<{t!{IjjdJOQTIV&p}Fc|C%ea$&rxV5FF<@xwzlY~Qb?J4YCCY1? z>9zW9Bn!qfNjBnIs+6`jlY2&XN-?QC(_yGBk6O?uMXk!mFjp>wx85O1#13Z2V3=_$ zDST*uKqq8nW}c+D$s>FB2Ci-`2g-;eG3biNA^)~8WeTRWOX+V_o?GTXW0H<4g;NKz&!!93J zE34HgcFgv#M1t6pit_UKaxO~o(AXcXBjgqL!(8d_YefjcG}9WujvZ9&{CXao6Evh+a$R0awulM%UFpJG)pU& z1cXw^&kuwSJiaCG@@oz}U-uQYm7tKW8$-Q(p`F|uoyO=-Z`J_!Lh*bzZ9WKWOyAyy z1HlYHpa?e;-^?}NG%=+bP=&G2Pjo+v20rW+eTLI4JMhgdJz7{; z0MzW^VL$(qG}dSdLe~^ZK-!kNGI{-V|6eweFvH^0lR*;oWK}aU>7PTz|y`Pc(W|}Fs8D!yqrYMfL7g%8U@eTT_l8vCKbIyA6+=>($;uw_G*#`r&^fM zpM-8iIB6mgO?0rOx~giw<2^)AXJxAtFM=d}h09=JNR)T28Pw3(s|RJYDK+XOz;$of zC*R?Af)hcjUsVRld%O)jb{*d?UZ_7`NFW5uQQBmy3tDN&Z~5jb(3D{5>EqFdQ!?+` z(SG}tcZN@~T}Fd4SnS`-^|ftgDGBRy9L)9v3@@JVVo9z6l6`)k9pClM5na_zfNro$ zT`p*sMne9u(u+1yE=>jbPinvELsQ35>!1=5XyrjS8LN;U%^U+lAf0=lnd%bt!!gFI zbNlf+#2 zCxI$@>*+K;&+>7^>Ah!XAr?d#2bqtL@27A5wVkuGuWkE^!!1gHwW@WkXL7QYVNP%Y zFNojA5&$g#81VlxhS#BOfldricBU61QC!yoAL!sLfk8jT}D9GyO)59qnsAh7RHtFF7 zMpYZhadbf`@N@(bTjuseQjXn;U>==kVueT|gUaCrU%FHuZuuaNVSZe`G}tDQ@l@c5 zR2wp%vJLl*eV6EjPuS{7T-2HW4jm=~Wn#F(xozyC3|BJVba>ggt(4;TtK%p-C5bmq z(*kFuX7sGwWg*;O$54JRK%kLu%p4FdM*6*hBmxkg!89#(dWE)Fka=^Q^51N`*1V93 zuo+9y^99)RVOK>d<(v#LeY%BdyAlqnalW`}p2?=JCjXn`#qjWQjsRgA}hFU=v$74Y&D4y0iWyx4G) z-T2Kf>EM@JRq~TzG|yIBG07zX<>3-Y6>rFfn*eLShXdy9z}q%p3;^z}VMWL15>@~qQjn#&*w3zw+Ss3J?j$5;9rDqeV^z0!D@W?eC56EqdlyK52aJI25 zX3Z!{$TQ#%-uEY>g!M@LIbOHbgj^t5#RZ_Nd;3FE)VuA(fd zc+}nS5cqG+N-)qeUajkxkAe?D6UhT&YDd@>LUtrr#? zCdjxfjU1$Svf*@l;3ME0euohw6`V3oVxBP?G7vEH zpAn=DK2qdY4rK7a{wUJ_!SIcM5(ecA{v#&1}?A=mYj8^3NNU|8OO z0c!rR#Q7d8k(K+sYFeiW*+CtpDm$)jbfJx{t?j4Br%4a%3lnw{7|B%W5{Vjp38*j0 zGKhH!uynlx8XE>Yv0*6@vT_J~*pa5OC%D&0|5hfV@P}GucT0*LOU2`=fMfCBv^ zmjsw0ID=WPq=EU<{jY89z=z|@%eqAeMh2dUD*sVdCs6(sCOC9TdBt=Ga2sA9umPdg zK(@)z?5t_)e6tiF1~qauf?Yg3xJlkLFZm`im1j=vmnaa{8g|}pe!4LH?(ggL`TLra zyXSMI1M~GD(uM7xH&QmY8(;{cKzyR zb<~`v;mNrX)^MyplqYJ{o936u-@>B`5};sp<&E*+AG%)emfnY3m>p!jAJlQ^`>MmS zZz6EpUNh>>4>9NZF25h$hx>MT$&i6wQT7k#Bn_sJ1m7JPonY4YGgYA~l-O~!A?3Ru z>pO_n&DzAcQ3-^T;NT$>2$c{4q4W~ium6a$t?1~l_rfbNEcHi6j@q~xp<9NN65DZ` z(zsH{p;S#*8~LsB&6W573J?fHEk}k4DSYy z{k!hsT{KA_O{3?nwiE}?;@Z!jhe|5%-pm({qUV6jlc-(E&<6puo}>Xr|9SV66tG7T zwzSp)q!Tbf0gk;@H=9_YwP>Z|-C##UX1)p@s#~RKq0VskG4VNhwyP?_fxg5dG8F&N zdoMG|OapI%M`P(lZVyXgjN4^a$l-O&J%FMzgvXPn^mpKJY?e(-8KDGX@h=Sw?mkeg zKe1?Q2Hd&_IY`v$jD7=e=Aqj;?0K4rprw~Au+c!~+SBAa76KK+;NLSeDxOFv(4=bY zrNxH9OYR>Oc{r3J+;R>QyQ~vG@DosTMI9mNhHvLZ=(IzBbp2U*PPeetrxFP zk2{l-e}U+IJZUm`IoNE+kKwOEY$*^3V|2gD36>UPxQ8GP`ZrhJK1C_5ll8BKvo_4E ztUw--i2qX|I|wZI9-BT)3cs8_PP2G4Nm8bf+rA~!$(5h2p;y0rvIaGI4Le8**?Epm zq4dX@*5lkB?+g$xb(7P%n)KmI70e7@I+|Z*@WtfvYG?wGt^nPMLku9DqkO7*Dtu_@ql)q0#{uO|{X+@+9LpmYcEuzMU%!8V`|0BQ-FZn2p!uh1X=&+I z6L8s^XKzK{xDJ<+Q{Avs+;z1_=)g`tE zx^_|5*;#Me{PxE0YK(nvo~ExOj7yKe*oL`&a0EXi69Rs+A;NL?qOsm8fU%_$IS82f z$>?U9vF7xE^5O)`z_uER&C(}KUw*rnp>@XAQU2EwjWw#W8M%xnCv(L804l4hQ%Ttl z9ChE`2PCVP17k`8thUvwjLbLM~NZivICT3iB$W;hd&ku*f&W@EtI ze^>)Ugqg%a7}!qY;|OXB1fjb&wkxU-WH>uBXdCgizBApsv^}4$YdML9DDSHd)Uogp zu>npKZ>XplM5b@j*9neNjs$SHJpKxOOR%)WFcF5Onyc^H>iXQGrbmU`bZ~|lWu2y9# z=Euj!M>gZG$?LAQGZ4FOOobabTlI4N+VI|77I&|xDXN`5TC1$v)9Pe+jaT&fG(J8T zIC1?tr2M-%%`$`_lj?w{do`f2Z^?v$QF1hDUFJTs7?C2PB}jdkxNb|Vs;OpSX8t0M zoOf=+Eg&SczPkR@+4I;5Bw!s(?;(OT@NCUvmxf84t=tCm7~M_zDp}DzXmx<@C3Z*0 z{`vkW+4$uuJ!@ZKiyfJ4XJz)-Pa z&?fcr;p2oOPuBzr6Onl#y#$^-6%uLQ$!EOh9+-iW$~rq%PA&5ar2bn|s#eN-sIKd; zS9I1Vf(poNcNNgb9u%PnQo#`{mW`(2SaN36A9V97Eqg}FNQKyC+9vHk2#Y!%3{O8@%`8+ElIXL^5%S)1+2+Z>KXQD-(RnktkaOK zsN62>ISH`2maFE#5CTtpoRHwlAIbyth5A z`aHP%+h6tI82s2Ce&z2}Sy4&#iyc0Stg9$11EoJOnUEOOP?xXhup!8ci;qHubDKuW z*e|Hxw;AZ$ztEYRa-Wv+xP3T%dio@Z1s8C>){-jIvgYWeU#$g%n`TW}bsM!hl42V! zFNWA#rhM^rEWo+O{FK~?kL~VhHV6*%^Xus8>FMl#zPb1D@Sui$v&*~Q3V?>rFJ2vw zECP{vz}JNQm~F8q4~%;bF|1v8rLrv}o-r8>yH`vWLCj1`)0;4{f#n?)9X9cUXN5eF zVydAxiGwXg-(QLhvMlAB5i~O+Yg@*4Dv6j?%!1a$Sa{@$JSXIh9$=RevR&wk!sYzWAIhPD|pYaFZ$yc0_E=#s7f^; +} + +/** + * @title Checkout + * @description Generic checkout + * @logo https://files.catbox.moe/9g6xiq.png + */ +export default function App(props: State): DecoApp { + const { storefrontToken } = props; + + const storefront = createGraphqlClient({ + endpoint: "https://storefront-api.fbits.net/graphql", + headers: new Headers({ + "TCS-Access-Token": storefrontToken?.get?.() ?? "", + }), + fetcher: fetchSafe, + }); + + return { manifest, state: { ...props, storefront } }; +} + +export type AppContext = AC>; diff --git a/checkout/utils/parseHeaders.ts b/checkout/utils/parseHeaders.ts new file mode 100644 index 000000000..7734ccb51 --- /dev/null +++ b/checkout/utils/parseHeaders.ts @@ -0,0 +1,18 @@ +export const getClientIP = (headers: Headers) => { + const cfConnectingIp = headers.get("cf-connecting-ip"); + const xForwardedFor = headers.get("x-forwarded-for"); + + if (cfConnectingIp) return cfConnectingIp; + + return xForwardedFor; +}; + +export const parseHeaders = (headers: Headers) => { + const clientIP = getClientIP(headers); + + const newHeaders = new Headers(); + + if (clientIP) newHeaders.set("X-Forwarded-For", clientIP); + + return newHeaders; +}; diff --git a/deco.ts b/deco.ts index 1f14f0ac9..d37784af6 100644 --- a/deco.ts +++ b/deco.ts @@ -12,6 +12,7 @@ const config = { apps: [ app("smarthint"), app("ra-trustvox"), + app("checkout"), app("anthropic"), app("resend"), app("emailjs"), diff --git a/decohub/apps/checkout.ts b/decohub/apps/checkout.ts new file mode 100644 index 000000000..aa62a5612 --- /dev/null +++ b/decohub/apps/checkout.ts @@ -0,0 +1 @@ +export { default } from "../../checkout/mod.ts"; diff --git a/decohub/manifest.gen.ts b/decohub/manifest.gen.ts index 20e833808..c8dccb11d 100644 --- a/decohub/manifest.gen.ts +++ b/decohub/manifest.gen.ts @@ -8,29 +8,30 @@ import * as $$$$$$$$$$$2 from "./apps/analytics.ts"; import * as $$$$$$$$$$$3 from "./apps/anthropic.ts"; import * as $$$$$$$$$$$4 from "./apps/blog.ts"; import * as $$$$$$$$$$$5 from "./apps/brand-assistant.ts"; -import * as $$$$$$$$$$$6 from "./apps/crux.ts"; -import * as $$$$$$$$$$$7 from "./apps/emailjs.ts"; -import * as $$$$$$$$$$$8 from "./apps/htmx.ts"; -import * as $$$$$$$$$$$9 from "./apps/implementation.ts"; -import * as $$$$$$$$$$$10 from "./apps/konfidency.ts"; -import * as $$$$$$$$$$$11 from "./apps/linx-impulse.ts"; -import * as $$$$$$$$$$$12 from "./apps/linx.ts"; -import * as $$$$$$$$$$$13 from "./apps/mailchimp.ts"; -import * as $$$$$$$$$$$14 from "./apps/nuvemshop.ts"; -import * as $$$$$$$$$$$15 from "./apps/power-reviews.ts"; -import * as $$$$$$$$$$$16 from "./apps/ra-trustvox.ts"; -import * as $$$$$$$$$$$17 from "./apps/resend.ts"; -import * as $$$$$$$$$$$18 from "./apps/shopify.ts"; -import * as $$$$$$$$$$$19 from "./apps/smarthint.ts"; -import * as $$$$$$$$$$$20 from "./apps/sourei.ts"; -import * as $$$$$$$$$$$21 from "./apps/typesense.ts"; -import * as $$$$$$$$$$$22 from "./apps/verified-reviews.ts"; -import * as $$$$$$$$$$$23 from "./apps/vnda.ts"; -import * as $$$$$$$$$$$24 from "./apps/vtex.ts"; -import * as $$$$$$$$$$$25 from "./apps/wake.ts"; -import * as $$$$$$$$$$$26 from "./apps/wap.ts"; -import * as $$$$$$$$$$$27 from "./apps/weather.ts"; -import * as $$$$$$$$$$$28 from "./apps/workflows.ts"; +import * as $$$$$$$$$$$6 from "./apps/checkout.ts"; +import * as $$$$$$$$$$$7 from "./apps/crux.ts"; +import * as $$$$$$$$$$$8 from "./apps/emailjs.ts"; +import * as $$$$$$$$$$$9 from "./apps/htmx.ts"; +import * as $$$$$$$$$$$10 from "./apps/implementation.ts"; +import * as $$$$$$$$$$$11 from "./apps/konfidency.ts"; +import * as $$$$$$$$$$$12 from "./apps/linx-impulse.ts"; +import * as $$$$$$$$$$$13 from "./apps/linx.ts"; +import * as $$$$$$$$$$$14 from "./apps/mailchimp.ts"; +import * as $$$$$$$$$$$15 from "./apps/nuvemshop.ts"; +import * as $$$$$$$$$$$16 from "./apps/power-reviews.ts"; +import * as $$$$$$$$$$$17 from "./apps/ra-trustvox.ts"; +import * as $$$$$$$$$$$18 from "./apps/resend.ts"; +import * as $$$$$$$$$$$19 from "./apps/shopify.ts"; +import * as $$$$$$$$$$$20 from "./apps/smarthint.ts"; +import * as $$$$$$$$$$$21 from "./apps/sourei.ts"; +import * as $$$$$$$$$$$22 from "./apps/typesense.ts"; +import * as $$$$$$$$$$$23 from "./apps/verified-reviews.ts"; +import * as $$$$$$$$$$$24 from "./apps/vnda.ts"; +import * as $$$$$$$$$$$25 from "./apps/vtex.ts"; +import * as $$$$$$$$$$$26 from "./apps/wake.ts"; +import * as $$$$$$$$$$$27 from "./apps/wap.ts"; +import * as $$$$$$$$$$$28 from "./apps/weather.ts"; +import * as $$$$$$$$$$$29 from "./apps/workflows.ts"; const manifest = { "apps": { @@ -40,29 +41,30 @@ const manifest = { "decohub/apps/anthropic.ts": $$$$$$$$$$$3, "decohub/apps/blog.ts": $$$$$$$$$$$4, "decohub/apps/brand-assistant.ts": $$$$$$$$$$$5, - "decohub/apps/crux.ts": $$$$$$$$$$$6, - "decohub/apps/emailjs.ts": $$$$$$$$$$$7, - "decohub/apps/htmx.ts": $$$$$$$$$$$8, - "decohub/apps/implementation.ts": $$$$$$$$$$$9, - "decohub/apps/konfidency.ts": $$$$$$$$$$$10, - "decohub/apps/linx-impulse.ts": $$$$$$$$$$$11, - "decohub/apps/linx.ts": $$$$$$$$$$$12, - "decohub/apps/mailchimp.ts": $$$$$$$$$$$13, - "decohub/apps/nuvemshop.ts": $$$$$$$$$$$14, - "decohub/apps/power-reviews.ts": $$$$$$$$$$$15, - "decohub/apps/ra-trustvox.ts": $$$$$$$$$$$16, - "decohub/apps/resend.ts": $$$$$$$$$$$17, - "decohub/apps/shopify.ts": $$$$$$$$$$$18, - "decohub/apps/smarthint.ts": $$$$$$$$$$$19, - "decohub/apps/sourei.ts": $$$$$$$$$$$20, - "decohub/apps/typesense.ts": $$$$$$$$$$$21, - "decohub/apps/verified-reviews.ts": $$$$$$$$$$$22, - "decohub/apps/vnda.ts": $$$$$$$$$$$23, - "decohub/apps/vtex.ts": $$$$$$$$$$$24, - "decohub/apps/wake.ts": $$$$$$$$$$$25, - "decohub/apps/wap.ts": $$$$$$$$$$$26, - "decohub/apps/weather.ts": $$$$$$$$$$$27, - "decohub/apps/workflows.ts": $$$$$$$$$$$28, + "decohub/apps/checkout.ts": $$$$$$$$$$$6, + "decohub/apps/crux.ts": $$$$$$$$$$$7, + "decohub/apps/emailjs.ts": $$$$$$$$$$$8, + "decohub/apps/htmx.ts": $$$$$$$$$$$9, + "decohub/apps/implementation.ts": $$$$$$$$$$$10, + "decohub/apps/konfidency.ts": $$$$$$$$$$$11, + "decohub/apps/linx-impulse.ts": $$$$$$$$$$$12, + "decohub/apps/linx.ts": $$$$$$$$$$$13, + "decohub/apps/mailchimp.ts": $$$$$$$$$$$14, + "decohub/apps/nuvemshop.ts": $$$$$$$$$$$15, + "decohub/apps/power-reviews.ts": $$$$$$$$$$$16, + "decohub/apps/ra-trustvox.ts": $$$$$$$$$$$17, + "decohub/apps/resend.ts": $$$$$$$$$$$18, + "decohub/apps/shopify.ts": $$$$$$$$$$$19, + "decohub/apps/smarthint.ts": $$$$$$$$$$$20, + "decohub/apps/sourei.ts": $$$$$$$$$$$21, + "decohub/apps/typesense.ts": $$$$$$$$$$$22, + "decohub/apps/verified-reviews.ts": $$$$$$$$$$$23, + "decohub/apps/vnda.ts": $$$$$$$$$$$24, + "decohub/apps/vtex.ts": $$$$$$$$$$$25, + "decohub/apps/wake.ts": $$$$$$$$$$$26, + "decohub/apps/wap.ts": $$$$$$$$$$$27, + "decohub/apps/weather.ts": $$$$$$$$$$$28, + "decohub/apps/workflows.ts": $$$$$$$$$$$29, }, "name": "decohub", "baseUrl": import.meta.url, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index e2a69b87a..d6d68fcbc 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1297,8 +1297,18 @@ export const Shop = { export const GetBuyList = { fragments: [BuyList], query: gql`query BuyList($id: Long!) { - buyList(id: $id){ + buyList(id: $id){ ...BuyList - } + } + }`, +}; + +export const CustomerCreate = { + query: gql`mutation CustomerCreate($input: CustomerCreateInput) { + customerCreate(input: $input) { + customerId + customerName + customerType + } }`, }; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 220b8ae6b..fb714a63e 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5131,3 +5131,10 @@ export type BuyListQueryVariables = Exact<{ export type BuyListQuery = { buyList?: { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, kit: boolean, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, buyListId: number, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null, id: any } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null } | null, buyTogether?: Array<{ productId?: any | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null, buyListProducts?: Array<{ productId: any, quantity: number, includeSameParent: boolean } | null> | null } | null }; + +export type CustomerCreateMutationVariables = Exact<{ + input?: InputMaybe; +}>; + + +export type CustomerCreateMutation = { customerCreate?: { customerId: any, customerName?: string | null, customerType?: string | null } | null }; From 2bf150befa23139a33c81fa4b46a7e0edb9b381c Mon Sep 17 00:00:00 2001 From: Luigi Date: Sun, 2 Jun 2024 02:08:07 -0300 Subject: [PATCH 02/37] feat: Add address/checkout methods --- a.ts | 1 + checkout/actions/createAddress.ts | 84 +++++++++++++++++++ checkout/actions/createCheckout.ts | 56 +++++++++++++ checkout/actions/deleteAddress.ts | 90 ++++++++++++++++++++ checkout/actions/login.ts | 7 ++ checkout/actions/logout.ts | 11 +++ checkout/actions/updateAddress.ts | 91 ++++++++++++++++++++ checkout/graphql/queries.ts | 97 ++++++++++++++++++++++ checkout/graphql/storefront.graphql.gen.ts | 39 +++++++++ checkout/loaders/getUser.ts | 30 +++++++ checkout/loaders/getUserAddress.ts | 30 +++++++ checkout/manifest.gen.ts | 28 +++++-- checkout/utils/getCustomerAcessToken.ts | 5 ++ 13 files changed, 563 insertions(+), 6 deletions(-) create mode 100644 checkout/actions/createAddress.ts create mode 100644 checkout/actions/createCheckout.ts create mode 100644 checkout/actions/deleteAddress.ts create mode 100644 checkout/actions/logout.ts create mode 100644 checkout/actions/updateAddress.ts create mode 100644 checkout/loaders/getUser.ts create mode 100644 checkout/loaders/getUserAddress.ts create mode 100644 checkout/utils/getCustomerAcessToken.ts diff --git a/a.ts b/a.ts index 417a82247..e10f9a050 100644 --- a/a.ts +++ b/a.ts @@ -21,4 +21,5 @@ const config: CodegenConfig = { }, }; +await import("deco/scripts/apps/bundle.ts"); await generate({ ...config }, true); diff --git a/checkout/actions/createAddress.ts b/checkout/actions/createAddress.ts new file mode 100644 index 000000000..9b3052051 --- /dev/null +++ b/checkout/actions/createAddress.ts @@ -0,0 +1,84 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CustomerAddressCreateMutation, + CustomerAddressCreateMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { CustomerAddressCreate } from "../../checkout/graphql/queries.ts"; +import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + +// https://wakecommerce.readme.io/docs/customeraddresscreate +export default async function ( + props: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customerAddressCreate } = await storefront.query< + CustomerAddressCreateMutation, + CustomerAddressCreateMutationVariables + >( + { + variables: { + address: props, + customerAccessToken: getCustomerAcessToken(req), + }, + ...CustomerAddressCreate, + }, + { headers }, + ); + + return customerAddressCreate; +} + +interface Props { + /** + * Detalhes do endereço + */ + addressDetails: string; + /** + * Número do endereço + */ + addressNumber: string; + /** + * Cep do endereço + */ + cep: string; + /** + * Cidade do endereço + */ + city: string; + /** + * País do endereço, ex. BR + */ + country: string; + /** + * E-mail do usuário + */ + email: string; + /** + * Nome do usuário + */ + name: string; + /** + * Bairro do endereço + */ + neighborhood: string; + /** + * Telefone do usuário + */ + phone: string; + /** + * Ponto de referência do endereço + */ + referencePoint?: string; + /** + * Estado do endereço + */ + state: string; + /** + * Rua do endereço + */ + street: string; +} diff --git a/checkout/actions/createCheckout.ts b/checkout/actions/createCheckout.ts new file mode 100644 index 000000000..890003046 --- /dev/null +++ b/checkout/actions/createCheckout.ts @@ -0,0 +1,56 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CreateCheckoutMutation, + CreateCheckoutMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { CustomerAddressRemove } from "../graphql/queries.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-createcheckout +export default async function ( + { products }: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { createCheckout } = await storefront.query< + CreateCheckoutMutation, + CreateCheckoutMutationVariables + >( + { + variables: { products: products ?? [] }, + ...CustomerAddressRemove, + }, + { headers }, + ); + + return createCheckout; +} + +interface Props { + products?: { + /** + * ID do variante do produto + */ + productVariantId: number; + /** + * Quantidade do produto a ser adicionado + */ + quantity: number; + /** + * Personalizações do produto + */ + customization?: { + customizationId: number; + value: string; + }[]; + /** + * Informações de assinatura + */ + subscription?: { + recurringTypeId: number; + subscriptionGroupId: number; + }; + }; +} diff --git a/checkout/actions/deleteAddress.ts b/checkout/actions/deleteAddress.ts new file mode 100644 index 000000000..b9d3a717a --- /dev/null +++ b/checkout/actions/deleteAddress.ts @@ -0,0 +1,90 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CustomerAddressRemoveMutation, + CustomerAddressRemoveMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { CustomerAddressRemove } from "../graphql/queries.ts"; +import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + +// https://wakecommerce.readme.io/docs/customeraddressremove +export default async function ( + props: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customerAddressRemove } = await storefront.query< + CustomerAddressRemoveMutation, + CustomerAddressRemoveMutationVariables + >( + { + variables: { + id: props.addressId, + customerAccessToken: getCustomerAcessToken(req), + }, + ...CustomerAddressRemove, + }, + { headers }, + ); + + return customerAddressRemove; +} + +interface Props { + /** + * ID do endereço + */ + addressId: string; + address: { + /** + * Detalhes do endereço + */ + addressDetails?: string; + /** + * Número do endereço + */ + addressNumber?: string; + /** + * Cep do endereço + */ + cep?: string; + /** + * Cidade do endereço + */ + city?: string; + /** + * País do endereço, ex. BR + */ + country?: string; + /** + * E-mail do usuário + */ + email?: string; + /** + * Nome do usuário + */ + name?: string; + /** + * Bairro do endereço + */ + neighborhood?: string; + /** + * Telefone do usuário + */ + phone?: string; + /** + * Ponto de referência do endereço + */ + referencePoint?: string; + /** + * Estado do endereço + */ + state?: string; + /** + * Rua do endereço + */ + street?: string; + }; +} diff --git a/checkout/actions/login.ts b/checkout/actions/login.ts index 92d0759a9..56b4aeefc 100644 --- a/checkout/actions/login.ts +++ b/checkout/actions/login.ts @@ -22,9 +22,16 @@ export default async function ( if (customerAuthenticatedLogin) { setCookie(response.headers, { name: "customerAccessToken", + path: "/", value: customerAuthenticatedLogin.token as string, expires: new Date(customerAuthenticatedLogin.validUntil), }); + setCookie(response.headers, { + name: "customerAccessTokenExpires", + path: "/", + value: customerAuthenticatedLogin.validUntil, + expires: new Date(customerAuthenticatedLogin.validUntil), + }); } return customerAuthenticatedLogin; diff --git a/checkout/actions/logout.ts b/checkout/actions/logout.ts new file mode 100644 index 000000000..feb94fdba --- /dev/null +++ b/checkout/actions/logout.ts @@ -0,0 +1,11 @@ +import type { AppContext } from "../mod.ts"; +import { deleteCookie } from "std/http/cookie.ts"; + +export default function ( + _props: object, + _req: Request, + { response }: AppContext, +) { + deleteCookie(response.headers, "customerAccessToken"); + deleteCookie(response.headers, "customerAccessTokenExpires"); +} diff --git a/checkout/actions/updateAddress.ts b/checkout/actions/updateAddress.ts new file mode 100644 index 000000000..09b9946ac --- /dev/null +++ b/checkout/actions/updateAddress.ts @@ -0,0 +1,91 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CustomerAddressUpdateMutation, + CustomerAddressUpdateMutationVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { CustomerAddressUpdate } from "../graphql/queries.ts"; +import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + +// https://wakecommerce.readme.io/docs/customeraddressupdate +export default async function ( + props: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customerAddressUpdate } = await storefront.query< + CustomerAddressUpdateMutation, + CustomerAddressUpdateMutationVariables + >( + { + variables: { + address: props.address, + id: props.addressId, + customerAccessToken: getCustomerAcessToken(req), + }, + ...CustomerAddressUpdate, + }, + { headers }, + ); + + return customerAddressUpdate; +} + +interface Props { + /** + * ID do endereço + */ + addressId: string; + address: { + /** + * Detalhes do endereço + */ + addressDetails?: string; + /** + * Número do endereço + */ + addressNumber?: string; + /** + * Cep do endereço + */ + cep?: string; + /** + * Cidade do endereço + */ + city?: string; + /** + * País do endereço, ex. BR + */ + country?: string; + /** + * E-mail do usuário + */ + email?: string; + /** + * Nome do usuário + */ + name?: string; + /** + * Bairro do endereço + */ + neighborhood?: string; + /** + * Telefone do usuário + */ + phone?: string; + /** + * Ponto de referência do endereço + */ + referencePoint?: string; + /** + * Estado do endereço + */ + state?: string; + /** + * Rua do endereço + */ + street?: string; + }; +} diff --git a/checkout/graphql/queries.ts b/checkout/graphql/queries.ts index 1ccfcbae3..060f0c99c 100644 --- a/checkout/graphql/queries.ts +++ b/checkout/graphql/queries.ts @@ -841,3 +841,100 @@ export const CustomerAuthenticatedLogin = { } }`, }; + +export const CustomerAddressCreate = { + query: gql`mutation customerAddressCreate( + $customerAccessToken: String!, + $address: CreateCustomerAddressInput!, + ) { + customerAddressCreate( + customerAccessToken: $customerAccessToken, + address: $address, + ) { + addressDetails + addressNumber + cep + city + country + email + id + name + neighborhood + phone + state + street + referencePoint + } + }`, +}; + +export const CustomerAddressRemove = { + query: + gql`mutation customerAddressRemove($customerAccessToken: String!, $id: ID!) { + customerAddressRemove(customerAccessToken: $customerAccessToken, id: $id) { + isSuccess + } + }`, +}; + +export const CustomerAddressUpdate = { + query: gql`mutation customerAddressUpdate( + $id: ID!, + $customerAccessToken: String!, + $address: UpdateCustomerAddressInput!, + ) { + customerAddressUpdate( + customerAccessToken: $customerAccessToken, + address: $address, + id: $id + ) { + addressDetails + addressNumber + cep + city + country + email + id + name + neighborhood + phone + state + street + referencePoint + } + }`, +}; + +export const GetUserAddress = { + fragments: [Customer], + query: gql`query GetUserAddress($customerAccessToken: String) { + customer(customerAccessToken: $customerAccessToken) { + ...Customer, + addresses { + address + address2 + addressDetails + addressNumber + cep + city + country + email + id + name + neighborhood + phone + referencePoint + state + street + } + } + }`, +}; + +export const createCheckout = { + query: gql`mutation createCheckout($products: [CheckoutProductItemInput]!) { + createCheckout(products: $products) { + checkoutId + } + }`, +}; diff --git a/checkout/graphql/storefront.graphql.gen.ts b/checkout/graphql/storefront.graphql.gen.ts index c37e5000e..7c71dfc4c 100644 --- a/checkout/graphql/storefront.graphql.gen.ts +++ b/checkout/graphql/storefront.graphql.gen.ts @@ -4888,3 +4888,42 @@ export type CustomerAuthenticatedLoginMutationVariables = Exact<{ export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, type?: LoginType | null, validUntil: any } | null }; + +export type CustomerAddressCreateMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + address: CreateCustomerAddressInput; +}>; + + +export type CustomerAddressCreateMutation = { customerAddressCreate?: { addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, state?: string | null, street?: string | null, referencePoint?: string | null } | null }; + +export type CustomerAddressRemoveMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + id: Scalars['ID']['input']; +}>; + + +export type CustomerAddressRemoveMutation = { customerAddressRemove?: { isSuccess: boolean } | null }; + +export type CustomerAddressUpdateMutationVariables = Exact<{ + id: Scalars['ID']['input']; + customerAccessToken: Scalars['String']['input']; + address: UpdateCustomerAddressInput; +}>; + + +export type CustomerAddressUpdateMutation = { customerAddressUpdate?: { addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, state?: string | null, street?: string | null, referencePoint?: string | null } | null }; + +export type GetUserAddressQueryVariables = Exact<{ + customerAccessToken?: InputMaybe; +}>; + + +export type GetUserAddressQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; + +export type CreateCheckoutMutationVariables = Exact<{ + products: Array> | InputMaybe; +}>; + + +export type CreateCheckoutMutation = { createCheckout?: { checkoutId: any } | null }; diff --git a/checkout/loaders/getUser.ts b/checkout/loaders/getUser.ts new file mode 100644 index 000000000..7b204c846 --- /dev/null +++ b/checkout/loaders/getUser.ts @@ -0,0 +1,30 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + GetUserQuery, + GetUserQueryVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { GetUser } from "../graphql/queries.ts"; +import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customer +export default async function ( + _props: object, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customer } = await storefront.query< + GetUserQuery, + GetUserQueryVariables + >( + { + variables: { customerAccessToken: getCustomerAcessToken(req) }, + ...GetUser, + }, + { headers }, + ); + + return customer; +} diff --git a/checkout/loaders/getUserAddress.ts b/checkout/loaders/getUserAddress.ts new file mode 100644 index 000000000..3ee6c59b9 --- /dev/null +++ b/checkout/loaders/getUserAddress.ts @@ -0,0 +1,30 @@ +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + GetUserAddressQuery, + GetUserAddressQueryVariables, +} from "../graphql/storefront.graphql.gen.ts"; +import { GetUserAddress } from "../graphql/queries.ts"; +import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customer +export default async function ( + _props: object, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + + const { customer } = await storefront.query< + GetUserAddressQuery, + GetUserAddressQueryVariables + >( + { + variables: { customerAccessToken: getCustomerAcessToken(req) }, + ...GetUserAddress, + }, + { headers }, + ); + + return customer; +} diff --git a/checkout/manifest.gen.ts b/checkout/manifest.gen.ts index ad861ef67..e5b3cb03e 100644 --- a/checkout/manifest.gen.ts +++ b/checkout/manifest.gen.ts @@ -2,15 +2,31 @@ // This file SHOULD be checked into source version control. // This file is automatically updated during development when running `dev.ts`. -import * as $$$$$$$$$0 from "./actions/login.ts"; -import * as $$$$$$$$$1 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$2 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$0 from "./actions/createAddress.ts"; +import * as $$$$$$$$$1 from "./actions/createCheckout.ts"; +import * as $$$$$$$$$2 from "./actions/deleteAddress.ts"; +import * as $$$$$$$$$3 from "./actions/login.ts"; +import * as $$$$$$$$$4 from "./actions/logout.ts"; +import * as $$$$$$$$$5 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$6 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$7 from "./actions/updateAddress.ts"; +import * as $$$0 from "./loaders/getUser.ts"; +import * as $$$1 from "./loaders/getUserAddress.ts"; const manifest = { + "loaders": { + "checkout/loaders/getUser.ts": $$$0, + "checkout/loaders/getUserAddress.ts": $$$1, + }, "actions": { - "checkout/actions/login.ts": $$$$$$$$$0, - "checkout/actions/signupCompany.ts": $$$$$$$$$1, - "checkout/actions/signupPerson.ts": $$$$$$$$$2, + "checkout/actions/createAddress.ts": $$$$$$$$$0, + "checkout/actions/createCheckout.ts": $$$$$$$$$1, + "checkout/actions/deleteAddress.ts": $$$$$$$$$2, + "checkout/actions/login.ts": $$$$$$$$$3, + "checkout/actions/logout.ts": $$$$$$$$$4, + "checkout/actions/signupCompany.ts": $$$$$$$$$5, + "checkout/actions/signupPerson.ts": $$$$$$$$$6, + "checkout/actions/updateAddress.ts": $$$$$$$$$7, }, "name": "checkout", "baseUrl": import.meta.url, diff --git a/checkout/utils/getCustomerAcessToken.ts b/checkout/utils/getCustomerAcessToken.ts new file mode 100644 index 000000000..1bd8c4d27 --- /dev/null +++ b/checkout/utils/getCustomerAcessToken.ts @@ -0,0 +1,5 @@ +import { getCookies } from "std/http/cookie.ts"; + +export default function (req: Request) { + return getCookies(req.headers).customerAccessToken; +} From 01c046ec1da2da511bc2e6c1e56c7e6cab58f536 Mon Sep 17 00:00:00 2001 From: Luigi Date: Sat, 8 Jun 2024 14:18:27 -0300 Subject: [PATCH 03/37] refactor: Remove generic checkout --- a.ts | 4 +- checkout/actions/createCheckout.ts | 56 - checkout/actions/login.ts | 49 - checkout/graphql/queries.ts | 940 - checkout/graphql/storefront.graphql.gen.ts | 4929 --- checkout/graphql/storefront.graphql.json | 27810 ----------------- checkout/loaders/getUserAddress.ts | 30 - checkout/logo.png | Bin 165326 -> 0 bytes checkout/manifest.gen.ts | 25 - checkout/mod.ts | 35 - checkout/utils/getCustomerAcessToken.ts | 5 - checkout/utils/parseHeaders.ts | 18 - decohub/apps/checkout.ts | 1 - decohub/manifest.gen.ts | 94 +- utils/graphql.ts | 5 + {checkout => wake}/actions/createAddress.ts | 4 +- wake/actions/createCheckout.ts | 46 + {checkout => wake}/actions/deleteAddress.ts | 4 +- wake/actions/login.ts | 63 + {checkout => wake}/actions/logout.ts | 0 {checkout => wake}/actions/signupCompany.ts | 12 +- {checkout => wake}/actions/signupPerson.ts | 14 +- {checkout => wake}/actions/updateAddress.ts | 4 +- {checkout => wake}/loaders/getUser.ts | 4 +- wake/loaders/getUserAddresses.ts | 24 + wake/manifest.gen.ts | 84 +- wake/utils/ensureCheckout.ts | 22 + wake/utils/getCustomerAcessToken.ts | 12 + wake/utils/graphql/queries.ts | 118 + wake/utils/graphql/storefront.graphql.gen.ts | 55 + wake/utils/isLogged.ts | 5 + 31 files changed, 471 insertions(+), 34001 deletions(-) delete mode 100644 checkout/actions/createCheckout.ts delete mode 100644 checkout/actions/login.ts delete mode 100644 checkout/graphql/queries.ts delete mode 100644 checkout/graphql/storefront.graphql.gen.ts delete mode 100644 checkout/graphql/storefront.graphql.json delete mode 100644 checkout/loaders/getUserAddress.ts delete mode 100644 checkout/logo.png delete mode 100644 checkout/mod.ts delete mode 100644 checkout/utils/getCustomerAcessToken.ts delete mode 100644 checkout/utils/parseHeaders.ts delete mode 100644 decohub/apps/checkout.ts rename {checkout => wake}/actions/createAddress.ts (92%) create mode 100644 wake/actions/createCheckout.ts rename {checkout => wake}/actions/deleteAddress.ts (93%) create mode 100644 wake/actions/login.ts rename {checkout => wake}/actions/logout.ts (100%) rename {checkout => wake}/actions/signupCompany.ts (86%) rename {checkout => wake}/actions/signupPerson.ts (85%) rename {checkout => wake}/actions/updateAddress.ts (93%) rename {checkout => wake}/loaders/getUser.ts (86%) create mode 100644 wake/loaders/getUserAddresses.ts create mode 100644 wake/utils/ensureCheckout.ts create mode 100644 wake/utils/getCustomerAcessToken.ts create mode 100644 wake/utils/isLogged.ts diff --git a/a.ts b/a.ts index e10f9a050..3a92f9de4 100644 --- a/a.ts +++ b/a.ts @@ -5,9 +5,9 @@ import { type CodegenConfig, generate } from "npm:@graphql-codegen/cli"; const config: CodegenConfig = { schema: "https://storefront-api.fbits.net/graphql", - documents: "./checkout/graphql/queries.ts", + documents: "./wake/utils/graphql/queries.ts", generates: { - "./checkout/graphql/storefront.graphql.gen.ts": { + "./wake/utils/graphql/storefront.graphql.gen.ts": { // This order matters plugins: [ "typescript", diff --git a/checkout/actions/createCheckout.ts b/checkout/actions/createCheckout.ts deleted file mode 100644 index 890003046..000000000 --- a/checkout/actions/createCheckout.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import type { - CreateCheckoutMutation, - CreateCheckoutMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { CustomerAddressRemove } from "../graphql/queries.ts"; - -// https://wakecommerce.readme.io/docs/storefront-api-createcheckout -export default async function ( - { products }: Props, - req: Request, - { storefront }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); - - const { createCheckout } = await storefront.query< - CreateCheckoutMutation, - CreateCheckoutMutationVariables - >( - { - variables: { products: products ?? [] }, - ...CustomerAddressRemove, - }, - { headers }, - ); - - return createCheckout; -} - -interface Props { - products?: { - /** - * ID do variante do produto - */ - productVariantId: number; - /** - * Quantidade do produto a ser adicionado - */ - quantity: number; - /** - * Personalizações do produto - */ - customization?: { - customizationId: number; - value: string; - }[]; - /** - * Informações de assinatura - */ - subscription?: { - recurringTypeId: number; - subscriptionGroupId: number; - }; - }; -} diff --git a/checkout/actions/login.ts b/checkout/actions/login.ts deleted file mode 100644 index 56b4aeefc..000000000 --- a/checkout/actions/login.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import type { - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { CustomerAuthenticatedLogin } from "../../checkout/graphql/queries.ts"; -import { setCookie } from "std/http/cookie.ts"; - -export default async function ( - props: Props, - req: Request, - { storefront, response }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); - - const { customerAuthenticatedLogin } = await storefront.query< - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables - >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); - - if (customerAuthenticatedLogin) { - setCookie(response.headers, { - name: "customerAccessToken", - path: "/", - value: customerAuthenticatedLogin.token as string, - expires: new Date(customerAuthenticatedLogin.validUntil), - }); - setCookie(response.headers, { - name: "customerAccessTokenExpires", - path: "/", - value: customerAuthenticatedLogin.validUntil, - expires: new Date(customerAuthenticatedLogin.validUntil), - }); - } - - return customerAuthenticatedLogin; -} - -export interface Props { - /** - * Email - */ - input: string; - /** - * Senha - */ - pass: string; -} diff --git a/checkout/graphql/queries.ts b/checkout/graphql/queries.ts deleted file mode 100644 index 060f0c99c..000000000 --- a/checkout/graphql/queries.ts +++ /dev/null @@ -1,940 +0,0 @@ -import { gql } from "../../utils/graphql.ts"; - -const Checkout = gql` -fragment Checkout on Checkout { - checkoutId - shippingFee - subtotal - total - completed - coupon - products { - imageUrl - brand - ajustedPrice - listPrice - price - name - productId - productVariantId - quantity - sku - url - } -} -`; - -const Product = gql` -fragment Product on Product { - mainVariant - productName - productId - alias - attributes { - value - name - } - productCategories { - name - url - hierarchy - main - googleCategories - } - informations { - title - value - type - } - available - averageRating - condition - createdAt - ean - id - images { - url - fileName - print - } - minimumOrderQuantity - prices { - bestInstallment { - discount - displayName - fees - name - number - value - } - discountPercentage - discounted - installmentPlans { - displayName - installments { - discount - fees - number - value - } - name - } - listPrice - multiplicationFactor - price - priceTables { - discountPercentage - id - listPrice - price - } - wholesalePrices { - price - quantity - } - } - productBrand { - fullUrlLogo - logoUrl - name - alias - } - productVariantId - seller { - name - } - parentId - sku - numberOfVotes - stock - variantName - variantStock - collection - urlVideo - similarProducts { - alias - image - imageUrl - name - } - promotions { - content - disclosureType - id - fullStampUrl - stamp - title - } - # parallelOptions -} -`; - -const ProductVariant = gql` -fragment ProductVariant on ProductVariant { - - aggregatedStock - alias - available - attributes { - attributeId - displayType - id - name - type - value - } - ean - id - images { - fileName - mini - order - print - url - } - productId - productVariantId - productVariantName - sku - stock - prices { - discountPercentage - discounted - installmentPlans { - displayName - name - installments { - discount - fees - number - value - } - } - listPrice - multiplicationFactor - price - priceTables { - discountPercentage - id - listPrice - price - } - wholesalePrices { - price - quantity - } - bestInstallment { - discount - displayName - fees - name - number - value - } - } - offers { - name - prices { - installmentPlans { - displayName - installments { - discount - fees - number - value - } - } - listPrice - price - } - productVariantId - } - promotions { - content - disclosureType - id - fullStampUrl - stamp - title - } -}`; - -const SingleProductPart = gql` -fragment SingleProductPart on SingleProduct { - mainVariant - productName - productId - alias - collection - attributes { - name - type - value - attributeId - displayType - id - } - numberOfVotes - productCategories { - name - url - hierarchy - main - googleCategories - } - informations { - title - value - type - } - available - averageRating - breadcrumbs { - text - link - } - condition - createdAt - ean - id - images { - url - fileName - print - } - minimumOrderQuantity - prices { - bestInstallment { - discount - displayName - fees - name - number - value - } - discountPercentage - discounted - installmentPlans { - displayName - installments { - discount - fees - number - value - } - name - } - listPrice - multiplicationFactor - price - priceTables { - discountPercentage - id - listPrice - price - } - wholesalePrices { - price - quantity - } - } - productBrand { - fullUrlLogo - logoUrl - name - alias - } - productVariantId - seller { - name - } - seo { - name - scheme - type - httpEquiv - content - } - sku - stock - variantName - parallelOptions - urlVideo - reviews { - rating - review - reviewDate - email - customer - } - similarProducts { - alias - image - imageUrl - name - } - attributeSelections { - selections { - attributeId - displayType - name - varyByParent - values { - alias - available - value - selected - printUrl - } - } - canBeMatrix - matrix { - column { - displayType - name - values { - value - } - } - data { - available - productVariantId - stock - } - row { - displayType - name - values { - value - printUrl - } - } - } - selectedVariant { - ...ProductVariant - } - candidateVariant { - ...ProductVariant - } - }, - promotions { - content - disclosureType - id - fullStampUrl - stamp - title - } - -} -`; - -const SingleProduct = gql` -fragment SingleProduct on SingleProduct { - ...SingleProductPart, - buyTogether { - productId - } -} - -`; - -const RestockAlertNode = gql` - fragment RestockAlertNode on RestockAlertNode { - email, - name, - productVariantId, - requestDate - } -`; - -const NewsletterNode = gql` - fragment NewsletterNode on NewsletterNode { - email, - name, - createDate, - updateDate - } -`; - -const ShippingQuote = gql` - fragment ShippingQuote on ShippingQuote { - id - type - name - value - deadline - shippingQuoteId - deliverySchedules { - date - periods { - end - id - start - } - } - products { - productVariantId - value - } - } -`; - -export const Customer = gql` - fragment Customer on Customer { - id - email - gender - customerId - companyName - customerName - customerType - responsibleName - informationGroups { - exibitionName - name - } - } -`; - -export const WishlistReducedProduct = gql` - fragment WishlistReducedProduct on Product { - productId - productName - } -`; - -export const GetProduct = { - fragments: [SingleProductPart, SingleProduct, ProductVariant], - query: gql`query GetProduct($productId: Long!) { - product(productId: $productId) { - ...SingleProduct - - } - }`, -}; - -export const GetCart = { - fragments: [Checkout], - query: gql`query GetCart($checkoutId: String!) { - checkout(checkoutId: $checkoutId) { ...Checkout } - }`, -}; - -export const CreateCart = { - fragments: [Checkout], - query: gql`mutation CreateCart { checkout: createCheckout { ...Checkout } }`, -}; - -export const GetProducts = { - fragments: [Product], - query: - gql`query GetProducts($filters: ProductExplicitFiltersInput!, $first: Int!, $sortDirection: SortDirection!, $sortKey: ProductSortKeys, $after: String) { products(filters: $filters, first: $first, sortDirection: $sortDirection, sortKey: $sortKey, after: $after) { - nodes { ...Product } - totalCount - pageInfo{ - hasNextPage, - endCursor, - hasPreviousPage, - startCursor - } - }}`, -}; - -export const Search = { - fragments: [Product], - query: - gql`query Search($operation: Operation!, $query: String, $onlyMainVariant: Boolean, $minimumPrice: Decimal, $maximumPrice: Decimal , $limit: Int, $offset: Int, $sortDirection: SortDirection, $sortKey: ProductSearchSortKeys, $filters: [ProductFilterInput]) { - result: search(query: $query, operation: $operation) { - aggregations { - maximumPrice - minimumPrice - priceRanges { - quantity - range - } - filters { - field - origin - values { - quantity - name - } - } - } - breadcrumbs { - link - text - } - forbiddenTerm { - text - suggested - } - pageSize - redirectUrl - searchTime - productsByOffset( - filters: $filters, - limit: $limit, - maximumPrice: $maximumPrice, - minimumPrice: $minimumPrice, - onlyMainVariant: $onlyMainVariant - offset: $offset, - sortDirection: $sortDirection, - sortKey: $sortKey - ) { - items { - ...Product - } - page - pageSize - totalCount - } - - } - }`, -}; - -export const AddCoupon = { - fragments: [Checkout], - query: gql`mutation AddCoupon($checkoutId: Uuid!, $coupon: String!) { - checkout: checkoutAddCoupon( - checkoutId: $checkoutId - coupon: $coupon - ) { ...Checkout } - }`, -}; - -export const AddItemToCart = { - fragments: [Checkout], - query: gql`mutation AddItemToCart($input: CheckoutProductInput!) { - checkout: checkoutAddProduct(input: $input) { ...Checkout } - }`, -}; - -export const RemoveCoupon = { - fragments: [Checkout], - query: gql`mutation RemoveCoupon($checkoutId: Uuid!) { - checkout: checkoutRemoveCoupon(checkoutId: $checkoutId) { - ...Checkout - } - }`, -}; - -export const RemoveItemFromCart = { - fragments: [Checkout], - query: gql`mutation RemoveItemFromCart($input: CheckoutProductInput!) { - checkout: checkoutRemoveProduct(input: $input) { ...Checkout } - }`, -}; - -export const ProductRestockAlert = { - fragments: [RestockAlertNode], - query: gql`mutation ProductRestockAlert($input: RestockAlertInput!) { - productRestockAlert(input: $input) { ...RestockAlertNode } - }`, -}; - -export const WishlistAddProduct = { - fragments: [Product], - query: - gql`mutation WishlistAddProduct($customerAccessToken: String!, $productId: Long!) { - wishlistAddProduct(customerAccessToken: $customerAccessToken, productId: $productId) { ...Product } - }`, -}; - -export const WishlistRemoveProduct = { - fragments: [Product], - query: - gql`mutation WishlistRemoveProduct($customerAccessToken: String!, $productId: Long!) { - wishlistRemoveProduct(customerAccessToken: $customerAccessToken, productId: $productId) { ...Product } - }`, -}; - -export const CreateNewsletterRegister = { - fragments: [NewsletterNode], - query: gql`mutation CreateNewsletterRegister($input: NewsletterInput!) { - createNewsletterRegister(input: $input) { ...NewsletterNode } - }`, -}; - -export const Autocomplete = { - fragments: [Product], - query: - gql`query Autocomplete($limit: Int, $query: String, $partnerAccessToken: String) { - autocomplete(limit: $limit, query: $query , partnerAccessToken: $partnerAccessToken ) { - suggestions, - products { - ...Product - } - } - }`, -}; - -export const ProductRecommendations = { - fragments: [Product], - query: gql`query ProductRecommendations( - $productId: Long!, - $algorithm: ProductRecommendationAlgorithm!, - $partnerAccessToken: String, - $quantity: Int! - ) { - productRecommendations(productId: $productId, algorithm: $algorithm, partnerAccessToken: $partnerAccessToken, quantity: $quantity) { - ...Product - } - }`, -}; - -export const ShippingQuotes = { - fragments: [ShippingQuote], - query: - gql`query ShippingQuotes($cep: CEP,$checkoutId: Uuid, $productVariantId: Long,$quantity: Int = 1, $useSelectedAddress: Boolean){ - shippingQuotes(cep: $cep,checkoutId: $checkoutId,productVariantId: $productVariantId,quantity: $quantity, useSelectedAddress: $useSelectedAddress){ - ...ShippingQuote - } - }`, -}; - -export const GetUser = { - fragments: [Customer], - query: gql`query getUser($customerAccessToken: String){ - customer(customerAccessToken: $customerAccessToken) { - ...Customer - } - }`, -}; - -export const GetWishlist = { - fragments: [WishlistReducedProduct], - query: gql`query getWislist($customerAccessToken: String){ - customer(customerAccessToken: $customerAccessToken) { - wishlist { - products { - ...WishlistReducedProduct - } - } - } - }`, -}; - -export const GetURL = { - query: gql`query getURL($url: String!) { - uri(url: $url) { - hotsiteSubtype - kind - partnerSubtype - productAlias - productCategoriesIds - redirectCode - redirectUrl - } - }`, -}; - -export const CreateProductReview = { - query: - gql`mutation createProductReview ($email: String!, $name: String!, $productVariantId: Long!, $rating: Int!, $review: String!){ - createProductReview(input: {email: $email, name: $name, productVariantId: $productVariantId, rating: $rating, review: $review}) { - customer - email - rating - review - reviewDate - }}`, -}; - -export const SendGenericForm = { - query: - gql`mutation sendGenericForm ($body: Any, $file: Upload, $recaptchaToken: String){ - sendGenericForm(body: $body, file: $file, recaptchaToken: $recaptchaToken) { - isSuccess - }}`, -}; - -export const Hotsite = { - fragments: [Product], - query: gql`query Hotsite($url: String, - $filters: [ProductFilterInput], - $limit: Int, - $maximumPrice: Decimal, - $minimumPrice: Decimal, - $onlyMainVariant: Boolean - $offset: Int, - $sortDirection: SortDirection, - $sortKey: ProductSortKeys) { - result: hotsite(url: $url) { - aggregations { - filters { - field - origin - values { - name - quantity - } - } - maximumPrice - minimumPrice - priceRanges { - quantity - range - } - } - productsByOffset( - filters: $filters, - limit: $limit, - maximumPrice: $maximumPrice, - minimumPrice: $minimumPrice, - onlyMainVariant: $onlyMainVariant - offset: $offset, - sortDirection: $sortDirection, - sortKey: $sortKey - ) { - items { - ...Product - } - page - pageSize - totalCount - } - breadcrumbs { - link - text - } - endDate - expression - id - name - pageSize - seo { - content - httpEquiv - name - scheme - type - } - sorting { - direction - field - } - startDate - subtype - template - url - hotsiteId - } - } - `, -}; - -export const productOptions = { - query: gql`query productOptions ($productId: Long!){ - productOptions(productId: $productId) { - attributes { - attributeId - displayType - id - name - type - values { - productVariants { - ...ProductVariant - } - value - } - } - id - } - }`, -}; - -export const Shop = { - query: gql`query shop{ - shop { - checkoutUrl - mainUrl - mobileCheckoutUrl - mobileUrl - modifiedName - name - } - }`, -}; - -export const CustomerCreate = { - query: gql`mutation customerCreate($input: CustomerCreateInput) { - customerCreate(input: $input) { - customerId - customerName - customerType - } - }`, -}; - -export const CustomerAuthenticatedLogin = { - query: - gql`mutation customerAuthenticatedLogin($input: String!, $pass: String!) { - customerAuthenticatedLogin(input:{input: $input, password: $pass}) { - isMaster - token - type - validUntil - } - }`, -}; - -export const CustomerAddressCreate = { - query: gql`mutation customerAddressCreate( - $customerAccessToken: String!, - $address: CreateCustomerAddressInput!, - ) { - customerAddressCreate( - customerAccessToken: $customerAccessToken, - address: $address, - ) { - addressDetails - addressNumber - cep - city - country - email - id - name - neighborhood - phone - state - street - referencePoint - } - }`, -}; - -export const CustomerAddressRemove = { - query: - gql`mutation customerAddressRemove($customerAccessToken: String!, $id: ID!) { - customerAddressRemove(customerAccessToken: $customerAccessToken, id: $id) { - isSuccess - } - }`, -}; - -export const CustomerAddressUpdate = { - query: gql`mutation customerAddressUpdate( - $id: ID!, - $customerAccessToken: String!, - $address: UpdateCustomerAddressInput!, - ) { - customerAddressUpdate( - customerAccessToken: $customerAccessToken, - address: $address, - id: $id - ) { - addressDetails - addressNumber - cep - city - country - email - id - name - neighborhood - phone - state - street - referencePoint - } - }`, -}; - -export const GetUserAddress = { - fragments: [Customer], - query: gql`query GetUserAddress($customerAccessToken: String) { - customer(customerAccessToken: $customerAccessToken) { - ...Customer, - addresses { - address - address2 - addressDetails - addressNumber - cep - city - country - email - id - name - neighborhood - phone - referencePoint - state - street - } - } - }`, -}; - -export const createCheckout = { - query: gql`mutation createCheckout($products: [CheckoutProductItemInput]!) { - createCheckout(products: $products) { - checkoutId - } - }`, -}; diff --git a/checkout/graphql/storefront.graphql.gen.ts b/checkout/graphql/storefront.graphql.gen.ts deleted file mode 100644 index 7c71dfc4c..000000000 --- a/checkout/graphql/storefront.graphql.gen.ts +++ /dev/null @@ -1,4929 +0,0 @@ - -// deno-fmt-ignore-file -// deno-lint-ignore-file no-explicit-any ban-types ban-unused-ignore -// -// DO NOT EDIT. This file is generated by deco. -// This file SHOULD be checked into source version control. -// To generate this file: deno task start -// - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -export type MakeEmpty = { [_ in K]?: never }; -export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: { input: string; output: string; } - String: { input: string; output: string; } - Boolean: { input: boolean; output: boolean; } - Int: { input: number; output: number; } - Float: { input: number; output: number; } - Any: { input: any; output: any; } - CEP: { input: any; output: any; } - CountryCode: { input: any; output: any; } - DateTime: { input: any; output: any; } - Decimal: { input: any; output: any; } - EmailAddress: { input: any; output: any; } - Long: { input: any; output: any; } - Upload: { input: any; output: any; } - Uuid: { input: any; output: any; } -}; - -/** Price alert input parameters. */ -export type AddPriceAlertInput = { - /** The alerted's email. */ - email: Scalars['String']['input']; - /** The alerted's name. */ - name: Scalars['String']['input']; - /** The product variant id to create the price alert. */ - productVariantId: Scalars['Long']['input']; - /** The google recaptcha token. */ - recaptchaToken?: InputMaybe; - /** The target price to alert. */ - targetPrice: Scalars['Decimal']['input']; -}; - -export type AddressNode = { - /** Zip code. */ - cep?: Maybe; - /** Address city. */ - city?: Maybe; - /** Address country. */ - country?: Maybe; - /** Address neighborhood. */ - neighborhood?: Maybe; - /** Address state. */ - state?: Maybe; - /** Address street. */ - street?: Maybe; -}; - -export type Answer = { - id?: Maybe; - value?: Maybe; -}; - -export type ApplyPolicy = - | 'AFTER_RESOLVER' - | 'BEFORE_RESOLVER'; - -/** Attributes available for the variant products from the given productId. */ -export type Attribute = Node & { - /** The id of the attribute. */ - attributeId: Scalars['Long']['output']; - /** The display type of the attribute. */ - displayType?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The name of the attribute. */ - name?: Maybe; - /** The type of the attribute. */ - type?: Maybe; - /** The values of the attribute. */ - values?: Maybe>>; -}; - -export type AttributeFilterInput = { - attributeId: Scalars['Long']['input']; - value: Scalars['String']['input']; -}; - -/** Input to specify which attributes to match. */ -export type AttributeInput = { - /** The attribute Ids to match. */ - id?: InputMaybe>; - /** The attribute name to match. */ - name?: InputMaybe>>; - /** The attribute type to match. */ - type?: InputMaybe>>; - /** The attribute value to match */ - value?: InputMaybe>>; -}; - -export type AttributeMatrix = { - /** Information about the column attribute. */ - column?: Maybe; - /** The matrix products data. List of rows. */ - data?: Maybe>>>>; - /** Information about the row attribute. */ - row?: Maybe; -}; - -export type AttributeMatrixInfo = { - displayType?: Maybe; - name?: Maybe; - values?: Maybe>>; -}; - -export type AttributeMatrixProduct = { - available: Scalars['Boolean']['output']; - productVariantId: Scalars['Long']['output']; - stock: Scalars['Long']['output']; -}; - -export type AttributeMatrixRowColumnInfoValue = { - printUrl?: Maybe; - value?: Maybe; -}; - - -export type AttributeMatrixRowColumnInfoValuePrintUrlArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Attributes available for the variant products from the given productId. */ -export type AttributeSelection = { - /** Check if the current product attributes can be rendered as a matrix. */ - canBeMatrix: Scalars['Boolean']['output']; - /** The candidate variant given the current input filters. Variant may be from brother product Id. */ - candidateVariant?: Maybe; - /** Informations about the attribute matrix. */ - matrix?: Maybe; - /** The selected variant given the current input filters. Variant may be from brother product Id. */ - selectedVariant?: Maybe; - /** Attributes available for the variant products from the given productId. */ - selections?: Maybe>>; -}; - -/** Attributes available for the variant products from the given productId. */ -export type AttributeSelectionOption = { - /** The id of the attribute. */ - attributeId: Scalars['Long']['output']; - /** The display type of the attribute. */ - displayType?: Maybe; - /** The name of the attribute. */ - name?: Maybe; - /** The values of the attribute. */ - values?: Maybe>>; - /** If the attributes varies by parent. */ - varyByParent: Scalars['Boolean']['output']; -}; - -export type AttributeSelectionOptionValue = { - alias?: Maybe; - available: Scalars['Boolean']['output']; - printUrl?: Maybe; - selected: Scalars['Boolean']['output']; - /** The value of the attribute. */ - value?: Maybe; -}; - - -export type AttributeSelectionOptionValuePrintUrlArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Attributes values with variants */ -export type AttributeValue = { - /** Product variants that have the attribute. */ - productVariants?: Maybe>>; - /** The value of the attribute. */ - value?: Maybe; -}; - -/** Get query completion suggestion. */ -export type Autocomplete = { - /** Suggested products based on the current query. */ - products?: Maybe>>; - /** List of possible query completions. */ - suggestions?: Maybe>>; -}; - -/** A banner is usually an image used to show sales, highlight products, announcements or to redirect to another page or hotsite on click. */ -export type Banner = Node & { - /** Banner's alternative text. */ - altText?: Maybe; - /** Banner unique identifier. */ - bannerId: Scalars['Long']['output']; - /** Banner's name. */ - bannerName?: Maybe; - /** URL where the banner is stored. */ - bannerUrl?: Maybe; - /** The date the banner was created. */ - creationDate?: Maybe; - /** Field to check if the banner should be displayed on all pages. */ - displayOnAllPages: Scalars['Boolean']['output']; - /** Field to check if the banner should be displayed on category pages. */ - displayOnCategories: Scalars['Boolean']['output']; - /** Field to check if the banner should be displayed on search pages. */ - displayOnSearches: Scalars['Boolean']['output']; - /** Field to check if the banner should be displayed on the website. */ - displayOnWebsite: Scalars['Boolean']['output']; - /** Field to check if the banner should be displayed to partners. */ - displayToPartners: Scalars['Boolean']['output']; - /** The banner's height in px. */ - height?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** Field to check if the banner URL should open in another tab on click. */ - openNewTab: Scalars['Boolean']['output']; - /** The displaying order of the banner. */ - order: Scalars['Int']['output']; - /** The displaying position of the banner. */ - position?: Maybe; - /** A list of terms to display the banner on search. */ - searchTerms?: Maybe>>; - /** The banner's title. */ - title?: Maybe; - /** URL to be redirected on click. */ - urlOnClick?: Maybe; - /** The banner's width in px. */ - width?: Maybe; -}; - -/** Define the banner attribute which the result set will be sorted on. */ -export type BannerSortKeys = - /** The banner's creation date. */ - | 'CREATION_DATE' - /** The banner's unique identifier. */ - | 'ID'; - -/** A connection to a list of items. */ -export type BannersConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; -}; - -/** An edge in a connection. */ -export type BannersEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -export type BestInstallment = { - /** Wether the installment has discount. */ - discount: Scalars['Boolean']['output']; - /** The custom display name of the best installment plan option. */ - displayName?: Maybe; - /** Wether the installment has fees. */ - fees: Scalars['Boolean']['output']; - /** The name of the best installment plan option. */ - name?: Maybe; - /** The number of installments. */ - number: Scalars['Int']['output']; - /** The value of the installment. */ - value: Scalars['Decimal']['output']; -}; - -/** Informations about brands and its products. */ -export type Brand = Node & { - /** If the brand is active at the platform. */ - active: Scalars['Boolean']['output']; - /** The alias for the brand's hotsite. */ - alias?: Maybe; - /** Brand unique identifier. */ - brandId: Scalars['Long']['output']; - /** The date the brand was created in the database. */ - createdAt: Scalars['DateTime']['output']; - /** The full brand logo URL. */ - fullUrlLogo?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The brand's name. */ - name?: Maybe; - /** A list of products from the brand. */ - products?: Maybe; - /** The last update date. */ - updatedAt: Scalars['DateTime']['output']; - /** A web address to be redirected. */ - urlCarrossel?: Maybe; - /** A web address linked to the brand. */ - urlLink?: Maybe; - /** The url of the brand's logo. */ - urlLogo?: Maybe; -}; - - -/** Informations about brands and its products. */ -export type BrandFullUrlLogoArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - - -/** Informations about brands and its products. */ -export type BrandProductsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: ProductSortKeys; -}; - -/** Filter brand results based on giving attributes. */ -export type BrandFilterInput = { - /** Its unique identifier (you may provide a list of IDs if needed). */ - brandIds?: InputMaybe>; - /** Its brand group unique identifier (you may provide a list of IDs if needed). */ - groupIds?: InputMaybe>; - /** The set of group brand names which the result item name must be included in. */ - groupNames?: InputMaybe>>; - /** The set of brand names which the result item name must be included in. */ - names?: InputMaybe>>; -}; - -/** Define the brand attribute which the result set will be sorted on. */ -export type BrandSortKeys = - /** The brand unique identifier. */ - | 'ID' - /** The brand name. */ - | 'NAME'; - -/** A connection to a list of items. */ -export type BrandsConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - totalCount: Scalars['Int']['output']; -}; - -/** An edge in a connection. */ -export type BrandsEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -/** Informations about breadcrumb. */ -export type Breadcrumb = { - /** Breadcrumb link. */ - link?: Maybe; - /** Breadcrumb text. */ - text?: Maybe; -}; - -/** BuyBox informations. */ -export type BuyBox = { - /** List of the possibles installment plans. */ - installmentPlans?: Maybe>>; - /** Maximum price among sellers. */ - maximumPrice?: Maybe; - /** Minimum price among sellers. */ - minimumPrice?: Maybe; - /** Quantity of offers. */ - quantityOffers?: Maybe; - /** List of sellers. */ - sellers?: Maybe>>; -}; - -/** A buy list represents a list of items for sale in the store. */ -export type BuyList = Node & { - /** Check if the product can be added to cart directly from spot. */ - addToCartFromSpot?: Maybe; - /** The product url alias. */ - alias?: Maybe; - /** Information about the possible selection attributes. */ - attributeSelections?: Maybe; - /** List of the product attributes. */ - attributes?: Maybe>>; - /** The product author. */ - author?: Maybe; - /** Field to check if the product is available in stock. */ - available?: Maybe; - /** The product average rating. From 0 to 5. */ - averageRating?: Maybe; - /** List of product breadcrumbs. */ - breadcrumbs?: Maybe>>; - /** BuyBox informations. */ - buyBox?: Maybe; - buyListId: Scalars['Int']['output']; - buyListProducts?: Maybe>>; - /** Buy together products. */ - buyTogether?: Maybe>>; - /** Buy together groups products. */ - buyTogetherGroups?: Maybe>>; - /** The product collection. */ - collection?: Maybe; - /** The product condition. */ - condition?: Maybe; - /** The product creation date. */ - createdAt?: Maybe; - /** A list of customizations available for the given products. */ - customizations?: Maybe>>; - /** The product delivery deadline. */ - deadline?: Maybe; - /** Product deadline alert informations. */ - deadlineAlert?: Maybe; - /** Check if the product should be displayed. */ - display?: Maybe; - /** Check if the product should be displayed only for partners. */ - displayOnlyPartner?: Maybe; - /** Check if the product should be displayed on search. */ - displaySearch?: Maybe; - /** The product's unique EAN. */ - ean?: Maybe; - /** Check if the product offers free shipping. */ - freeShipping?: Maybe; - /** The product gender. */ - gender?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** List of the product images. */ - images?: Maybe>>; - /** List of the product insformations. */ - informations?: Maybe>>; - /** Check if its the main variant. */ - mainVariant?: Maybe; - /** The product maximum quantity for an order. */ - maximumOrderQuantity?: Maybe; - /** The product minimum quantity for an order. */ - minimumOrderQuantity?: Maybe; - /** Check if the product is a new release. */ - newRelease?: Maybe; - /** The number of votes that the average rating consists of. */ - numberOfVotes?: Maybe; - /** Product parallel options information. */ - parallelOptions?: Maybe>>; - /** Parent product unique identifier. */ - parentId?: Maybe; - /** The product prices. */ - prices?: Maybe; - /** Summarized informations about the brand of the product. */ - productBrand?: Maybe; - /** Summarized informations about the categories of the product. */ - productCategories?: Maybe>>; - /** Product unique identifier. */ - productId?: Maybe; - /** The product name. */ - productName?: Maybe; - /** - * Summarized informations about the subscription of the product. - * @deprecated Use subscriptionGroups to get subscription information. - */ - productSubscription?: Maybe; - /** Variant unique identifier. */ - productVariantId?: Maybe; - /** List of promotions this product belongs to. */ - promotions?: Maybe>>; - /** The product publisher */ - publisher?: Maybe; - /** List of customer reviews for this product. */ - reviews?: Maybe>>; - /** The product seller. */ - seller?: Maybe; - /** Product SEO informations. */ - seo?: Maybe>>; - /** List of similar products. */ - similarProducts?: Maybe>>; - /** The product's unique SKU. */ - sku?: Maybe; - /** The values of the spot attribute. */ - spotAttributes?: Maybe>>; - /** The product spot information. */ - spotInformation?: Maybe; - /** Check if the product is on spotlight. */ - spotlight?: Maybe; - /** The available aggregated product stock (all variants) at the default distribution center. */ - stock?: Maybe; - /** List of the product stocks on different distribution centers. */ - stocks?: Maybe>>; - /** List of subscription groups this product belongs to. */ - subscriptionGroups?: Maybe>>; - /** Check if the product is a telesale. */ - telesales?: Maybe; - /** The product last update date. */ - updatedAt?: Maybe; - /** The product video url. */ - urlVideo?: Maybe; - /** The variant name. */ - variantName?: Maybe; - /** The available aggregated variant stock at the default distribution center. */ - variantStock?: Maybe; -}; - - -/** A buy list represents a list of items for sale in the store. */ -export type BuyListImagesArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Contains the id and quantity of a product in the buy list. */ -export type BuyListProduct = { - productId: Scalars['Long']['output']; - quantity: Scalars['Int']['output']; -}; - -/** BuyTogetherGroups informations. */ -export type BuyTogetherGroup = { - /** BuyTogether name */ - name?: Maybe; - /** BuyTogether products */ - products?: Maybe>>; - /** BuyTogether type */ - type: BuyTogetherType; -}; - -export type BuyTogetherType = - | 'CAROUSEL' - | 'PRODUCT'; - -/** The products to calculate prices. */ -export type CalculatePricesProductsInput = { - productVariantId: Scalars['Long']['input']; - quantity: Scalars['Int']['input']; -}; - -/** A connection to a list of items. */ -export type CategoriesConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; -}; - -/** An edge in a connection. */ -export type CategoriesEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -/** Categories are used to arrange your products into different sections by similarity. */ -export type Category = Node & { - /** Category unique identifier. */ - categoryId: Scalars['Long']['output']; - /** A list of child categories, if it exists. */ - children?: Maybe>>; - /** A description to the category. */ - description?: Maybe; - /** Field to check if the category is displayed in the store's menu. */ - displayMenu: Scalars['Boolean']['output']; - /** The hotsite alias. */ - hotsiteAlias?: Maybe; - /** The URL path for the category. */ - hotsiteUrl?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The url to access the image linked to the category. */ - imageUrl?: Maybe; - /** The web address to access the image linked to the category. */ - imageUrlLink?: Maybe; - /** The category's name. */ - name?: Maybe; - /** The parent category, if it exists. */ - parent?: Maybe; - /** The parent category unique identifier. */ - parentCategoryId: Scalars['Long']['output']; - /** The position the category will be displayed. */ - position: Scalars['Int']['output']; - /** A list of products associated with the category. */ - products?: Maybe; - /** A web address linked to the category. */ - urlLink?: Maybe; -}; - - -/** Categories are used to arrange your products into different sections by similarity. */ -export type CategoryProductsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: ProductSortKeys; -}; - -/** Define the category attribute which the result set will be sorted on. */ -export type CategorySortKeys = - /** The category unique identifier. */ - | 'ID' - /** The category name. */ - | 'NAME'; - -export type Checkout = Node & { - /** The CEP. */ - cep?: Maybe; - /** Indicates if the checking account is being used. */ - checkingAccountActive: Scalars['Boolean']['output']; - /** Total used from checking account. */ - checkingAccountValue?: Maybe; - /** The checkout unique identifier. */ - checkoutId: Scalars['Uuid']['output']; - /** Indicates if the checkout is completed. */ - completed: Scalars['Boolean']['output']; - /** The coupon for discounts. */ - coupon?: Maybe; - /** The total coupon discount applied at checkout. */ - couponDiscount: Scalars['Decimal']['output']; - /** The customer associated with the checkout. */ - customer?: Maybe; - /** The total value of customizations added to the products. */ - customizationValue: Scalars['Decimal']['output']; - /** The discount applied at checkout excluding any coupons. */ - discount: Scalars['Decimal']['output']; - /** The node unique identifier. */ - id?: Maybe; - login?: Maybe; - /** The metadata related to this checkout. */ - metadata?: Maybe>>; - /** The checkout orders informations. */ - orders?: Maybe>>; - /** The additional fees applied based on the payment method. */ - paymentFees: Scalars['Decimal']['output']; - /** A list of products associated with the checkout. */ - products?: Maybe>>; - /** The selected delivery address for the checkout. */ - selectedAddress?: Maybe; - /** The selected payment method */ - selectedPaymentMethod?: Maybe; - /** Selected Shipping. */ - selectedShipping?: Maybe; - /** Selected shipping quote groups. */ - selectedShippingGroups?: Maybe>>; - /** The shipping fee. */ - shippingFee: Scalars['Decimal']['output']; - /** The subtotal value. */ - subtotal: Scalars['Decimal']['output']; - /** The total value. */ - total: Scalars['Decimal']['output']; - /** The total discount applied at checkout. */ - totalDiscount: Scalars['Decimal']['output']; - /** The last update date. */ - updateDate: Scalars['DateTime']['output']; - /** Url for the current checkout id. */ - url?: Maybe; -}; - -/** Represents an address node in the checkout. */ -export type CheckoutAddress = { - /** The street number of the address. */ - addressNumber?: Maybe; - /** The ZIP code of the address. */ - cep: Scalars['Int']['output']; - /** The city of the address. */ - city?: Maybe; - /** The additional address information. */ - complement?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The neighborhood of the address. */ - neighborhood?: Maybe; - /** The reference point for the address. */ - referencePoint?: Maybe; - /** The state of the address. */ - state?: Maybe; - /** The street name of the address. */ - street?: Maybe; -}; - -/** Represents a customer node in the checkout. */ -export type CheckoutCustomer = { - /** Customer's checking account balance. */ - checkingAccountBalance?: Maybe; - /** Taxpayer identification number for businesses. */ - cnpj?: Maybe; - /** Brazilian individual taxpayer registry identification. */ - cpf?: Maybe; - /** Customer's unique identifier. */ - customerId: Scalars['Long']['output']; - /** Customer's name. */ - customerName?: Maybe; - /** The email address of the customer. */ - email?: Maybe; - /** Customer's phone number. */ - phoneNumber?: Maybe; -}; - -export type CheckoutCustomizationInput = { - customizationId: Scalars['Long']['input']; - value?: InputMaybe; -}; - -export type CheckoutLite = { - /** Indicates if the checkout is completed. */ - completed: Scalars['Boolean']['output']; - /** The customer ID associated with the checkout. */ - customerId?: Maybe; -}; - -export type CheckoutMetadataInput = { - key?: InputMaybe; - value?: InputMaybe; -}; - -/** Represents a node in the checkout order. */ -export type CheckoutOrder = { - /** The list of adjustments applied to the order. */ - adjustments?: Maybe>>; - /** The date of the order. */ - date: Scalars['DateTime']['output']; - /** Details of the delivery or store pickup. */ - delivery?: Maybe; - /** The discount value of the order. */ - discountValue: Scalars['Decimal']['output']; - /** The dispatch time text from the shop settings. */ - dispatchTimeText?: Maybe; - /** The interest value of the order. */ - interestValue: Scalars['Decimal']['output']; - /** The ID of the order. */ - orderId: Scalars['Long']['output']; - /** The order status. */ - orderStatus: OrderStatus; - /** The payment information. */ - payment?: Maybe; - /** The list of products in the order. */ - products?: Maybe>>; - /** The shipping value of the order. */ - shippingValue: Scalars['Decimal']['output']; - /** The total value of the order. */ - totalValue: Scalars['Decimal']['output']; -}; - -/** The delivery or store Pickup Address. */ -export type CheckoutOrderAddress = { - /** The street address. */ - address?: Maybe; - /** The ZIP code. */ - cep?: Maybe; - /** The city. */ - city?: Maybe; - /** Additional information or details about the address. */ - complement?: Maybe; - /** Indicates whether the order is for store pickup. */ - isPickupStore: Scalars['Boolean']['output']; - /** The name. */ - name?: Maybe; - /** The neighborhood. */ - neighborhood?: Maybe; - /** . */ - pickupStoreText?: Maybe; -}; - -/** Represents an adjustment applied to checkout. */ -export type CheckoutOrderAdjustment = { - /** The name of the adjustment. */ - name?: Maybe; - /** The type of the adjustment. */ - type?: Maybe; - /** The value of the adjustment. */ - value: Scalars['Decimal']['output']; -}; - -/** This represents a Card payment node in the checkout order. */ -export type CheckoutOrderCardPayment = { - /** The brand card. */ - brand?: Maybe; - /** The interest generated by the card. */ - cardInterest: Scalars['Decimal']['output']; - /** The installments generated for the card. */ - installments: Scalars['Int']['output']; - /** The cardholder name. */ - name?: Maybe; - /** The final four numbers on the card. */ - number?: Maybe; -}; - -/** The delivery or store pickup details. */ -export type CheckoutOrderDelivery = { - /** The delivery or store pickup address. */ - address?: Maybe; - /** The cost of delivery or pickup. */ - cost: Scalars['Decimal']['output']; - /** The estimated delivery or pickup time, in days. */ - deliveryTime: Scalars['Int']['output']; - /** The estimated delivery or pickup time, in hours. */ - deliveryTimeInHours?: Maybe; - /** The name of the recipient. */ - name?: Maybe; -}; - -/** The invoice payment information. */ -export type CheckoutOrderInvoicePayment = { - /** The digitable line. */ - digitableLine?: Maybe; - /** The payment link. */ - paymentLink?: Maybe; -}; - -/** The checkout order payment. */ -export type CheckoutOrderPayment = { - /** The card payment information. */ - card?: Maybe; - /** The bank invoice payment information. */ - invoice?: Maybe; - /** The name of the payment method. */ - name?: Maybe; - /** The Pix payment information. */ - pix?: Maybe; -}; - -/** This represents a Pix payment node in the checkout order. */ -export type CheckoutOrderPixPayment = { - /** The QR code. */ - qrCode?: Maybe; - /** The expiration date of the QR code. */ - qrCodeExpirationDate?: Maybe; - /** The image URL of the QR code. */ - qrCodeUrl?: Maybe; -}; - -/** Represents a node in the checkout order products. */ -export type CheckoutOrderProduct = { - /** The list of adjustments applied to the product. */ - adjustments?: Maybe>>; - /** The list of attributes of the product. */ - attributes?: Maybe>>; - /** The image URL of the product. */ - imageUrl?: Maybe; - /** The name of the product. */ - name?: Maybe; - /** The ID of the product variant. */ - productVariantId: Scalars['Long']['output']; - /** The quantity of the product. */ - quantity: Scalars['Int']['output']; - /** The unit value of the product. */ - unitValue: Scalars['Decimal']['output']; - /** The value of the product. */ - value: Scalars['Decimal']['output']; -}; - -/** Represents an adjustment applied to a product in the checkout order. */ -export type CheckoutOrderProductAdjustment = { - /** Additional information about the adjustment. */ - additionalInformation?: Maybe; - /** The name of the adjustment. */ - name?: Maybe; - /** The type of the adjustment. */ - type?: Maybe; - /** The value of the adjustment. */ - value: Scalars['Decimal']['output']; -}; - -/** Represents an attribute of a product. */ -export type CheckoutOrderProductAttribute = { - /** The name of the attribute. */ - name?: Maybe; - /** The value of the attribute. */ - value?: Maybe; -}; - -export type CheckoutProductAdjustmentNode = { - /** The observation referent adjustment in Product */ - observation?: Maybe; - /** The type that was applied in product adjustment */ - type?: Maybe; - /** The value that was applied to the product adjustment */ - value: Scalars['Decimal']['output']; -}; - -export type CheckoutProductAttributeNode = { - /** The attribute name */ - name?: Maybe; - /** The attribute type */ - type: Scalars['Int']['output']; - /** The attribute value */ - value?: Maybe; -}; - -export type CheckoutProductCustomizationNode = { - /** The available product customizations. */ - availableCustomizations?: Maybe>>; - /** The product customization unique identifier. */ - id?: Maybe; - /** The product customization values. */ - values?: Maybe>>; -}; - -export type CheckoutProductCustomizationValueNode = { - /** The product customization cost. */ - cost: Scalars['Decimal']['output']; - /** The product customization name. */ - name?: Maybe; - /** The product customization value. */ - value?: Maybe; -}; - -export type CheckoutProductInput = { - id: Scalars['Uuid']['input']; - products: Array>; -}; - -export type CheckoutProductItemInput = { - customization?: InputMaybe>>; - customizationId?: InputMaybe; - metadata?: InputMaybe>>; - productVariantId: Scalars['Long']['input']; - quantity: Scalars['Int']['input']; - subscription?: InputMaybe; -}; - -export type CheckoutProductItemUpdateInput = { - customization?: InputMaybe>>; - customizationId?: InputMaybe; - productVariantId: Scalars['Long']['input']; - subscription?: InputMaybe; -}; - -export type CheckoutProductNode = { - /** The product adjustment information */ - adjustments?: Maybe>>; - /** The price adjusted with promotions and other price changes */ - ajustedPrice: Scalars['Decimal']['output']; - /** Information about the possible selection attributes. */ - attributeSelections?: Maybe; - /** The product brand */ - brand?: Maybe; - /** The product category */ - category?: Maybe; - /** The product customization. */ - customization?: Maybe; - /** If the product is a gift */ - gift: Scalars['Boolean']['output']; - /** The product Google category */ - googleCategory?: Maybe>>; - /** The product URL image */ - imageUrl?: Maybe; - /** The product informations */ - informations?: Maybe>>; - /** The product installment fee */ - installmentFee: Scalars['Boolean']['output']; - /** The product installment value */ - installmentValue: Scalars['Decimal']['output']; - /** The product list price */ - listPrice: Scalars['Decimal']['output']; - /** The metadata related to this checkout. */ - metadata?: Maybe>>; - /** The product name */ - name?: Maybe; - /** The product number of installments */ - numberOfInstallments: Scalars['Int']['output']; - /** The product price */ - price: Scalars['Decimal']['output']; - /** The product attributes */ - productAttributes?: Maybe>>; - /** The product unique identifier */ - productId: Scalars['Long']['output']; - /** The product variant unique identifier */ - productVariantId: Scalars['Long']['output']; - /** The product quantity */ - quantity: Scalars['Int']['output']; - /** The product seller. */ - seller?: Maybe; - /** The product shipping deadline */ - shippingDeadline?: Maybe; - /** The product SKU */ - sku?: Maybe; - /** The product subscription information */ - subscription?: Maybe; - /** The total price adjusted with promotions and other price changes */ - totalAdjustedPrice: Scalars['Decimal']['output']; - /** The total list price */ - totalListPrice: Scalars['Decimal']['output']; - /** The product URL */ - url?: Maybe; -}; - - -export type CheckoutProductNodeAttributeSelectionsArgs = { - selected?: InputMaybe>>; -}; - -export type CheckoutProductSellerNode = { - /** The distribution center ID. */ - distributionCenterId?: Maybe; - /** The seller name. */ - sellerName?: Maybe; -}; - -/** Information for the subscription of a product in checkout. */ -export type CheckoutProductSubscription = { - /** The available subscriptions. */ - availableSubscriptions?: Maybe>>; - /** The selected subscription. */ - selected?: Maybe; -}; - -export type CheckoutProductSubscriptionItemNode = { - /** Display text. */ - name?: Maybe; - /** The number of days of the recurring type. */ - recurringDays: Scalars['Int']['output']; - /** The recurring type id. */ - recurringTypeId: Scalars['Long']['output']; - /** If selected. */ - selected: Scalars['Boolean']['output']; - /** Subscription group discount value. */ - subscriptionGroupDiscount: Scalars['Decimal']['output']; - /** The subscription group id. */ - subscriptionGroupId: Scalars['Long']['output']; -}; - -export type CheckoutProductUpdateInput = { - id: Scalars['Uuid']['input']; - product: CheckoutProductItemUpdateInput; -}; - -/** The checkout areas available to reset */ -export type CheckoutResetType = - | 'PAYMENT'; - -export type CheckoutShippingDeadlineNode = { - /** The shipping deadline */ - deadline: Scalars['Int']['output']; - /** The shipping description */ - description?: Maybe; - /** The shipping second description */ - secondDescription?: Maybe; - /** The shipping second title */ - secondTitle?: Maybe; - /** The shipping title */ - title?: Maybe; -}; - -export type CheckoutShippingQuoteGroupNode = { - /** The distribution center. */ - distributionCenter?: Maybe; - /** The products related to the shipping quote group. */ - products?: Maybe>>; - /** Selected Shipping. */ - selectedShipping?: Maybe; -}; - -export type CheckoutSubscriptionInput = { - recurringTypeId: Scalars['Int']['input']; - subscriptionGroupId: Scalars['Long']['input']; -}; - -/** Contents are used to show things to the user. */ -export type Content = Node & { - /** The content in html to be displayed. */ - content?: Maybe; - /** Content unique identifier. */ - contentId: Scalars['Long']['output']; - /** The date the content was created. */ - creationDate?: Maybe; - /** The content's height in px. */ - height?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The content's position. */ - position?: Maybe; - /** A list of terms to display the content on search. */ - searchTerms?: Maybe>>; - /** The content's title. */ - title?: Maybe; - /** The content's width in px. */ - width?: Maybe; -}; - -/** Define the content attribute which the result set will be sorted on. */ -export type ContentSortKeys = - /** The content's creation date. */ - | 'CreationDate' - /** The content's unique identifier. */ - | 'ID'; - -/** A connection to a list of items. */ -export type ContentsConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; -}; - -/** An edge in a connection. */ -export type ContentsEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -/** Input data for submitting a counter offer for a product. */ -export type CounterOfferInput = { - /** Any additional information or comments provided by the user regarding the counter offer. */ - additionalInfo?: InputMaybe; - /** The email address of the user submitting the counter offer. */ - email?: InputMaybe; - /** The proposed price by the user for the product. */ - price: Scalars['Decimal']['input']; - /** The unique identifier of the product variant for which the counter offer is made. */ - productVariantId: Scalars['Long']['input']; - /** URL linking to the page or the location where the product is listed. */ - url?: InputMaybe; -}; - -export type CreateCustomerAddressInput = { - address?: InputMaybe; - address2?: InputMaybe; - addressDetails?: InputMaybe; - addressNumber?: InputMaybe; - cep: Scalars['CEP']['input']; - city: Scalars['String']['input']; - country: Scalars['CountryCode']['input']; - email?: InputMaybe; - name: Scalars['String']['input']; - neighborhood?: InputMaybe; - phone?: InputMaybe; - referencePoint?: InputMaybe; - state: Scalars['String']['input']; - street?: InputMaybe; -}; - -/** A customer from the store. */ -export type Customer = Node & { - /** A specific customer's address. */ - address?: Maybe; - /** Customer's addresses. */ - addresses?: Maybe>>; - /** Customer's birth date. */ - birthDate: Scalars['DateTime']['output']; - /** Customer's business phone number. */ - businessPhoneNumber?: Maybe; - /** Customer's checking account balance. */ - checkingAccountBalance?: Maybe; - /** Customer's checking account History. */ - checkingAccountHistory?: Maybe>>; - /** Taxpayer identification number for businesses. */ - cnpj?: Maybe; - /** Entities legal name. */ - companyName?: Maybe; - /** Brazilian individual taxpayer registry identification. */ - cpf?: Maybe; - /** Creation Date. */ - creationDate: Scalars['DateTime']['output']; - /** Customer's unique identifier. */ - customerId: Scalars['Long']['output']; - /** Customer's name. */ - customerName?: Maybe; - /** Indicates if it is a natural person or company profile. */ - customerType?: Maybe; - /** Customer's delivery address. */ - deliveryAddress?: Maybe; - /** Customer's email address. */ - email?: Maybe; - /** Customer's gender. */ - gender?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** Customer information groups. */ - informationGroups?: Maybe>>; - /** Customer's mobile phone number. */ - mobilePhoneNumber?: Maybe; - /** A specific order placed by the customer. */ - order?: Maybe; - /** List of orders placed by the customer. */ - orders?: Maybe; - /** Statistics about the orders the customer made in a specific timeframe. */ - ordersStatistics?: Maybe; - /** Get info about the associated partners. */ - partners?: Maybe>>; - /** Customer's phone number. */ - phoneNumber?: Maybe; - /** Customer's residential address. */ - residentialAddress?: Maybe; - /** Responsible's name. */ - responsibleName?: Maybe; - /** Registration number Id. */ - rg?: Maybe; - /** State registration number. */ - stateRegistration?: Maybe; - /** Customer's subscriptions. */ - subscriptions?: Maybe>>; - /** Date of the last update. */ - updateDate: Scalars['DateTime']['output']; - /** Customer wishlist. */ - wishlist?: Maybe; -}; - - -/** A customer from the store. */ -export type CustomerAddressArgs = { - addressId: Scalars['ID']['input']; -}; - - -/** A customer from the store. */ -export type CustomerOrderArgs = { - orderId?: Scalars['Long']['input']; -}; - - -/** A customer from the store. */ -export type CustomerOrdersArgs = { - offset?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}; - - -/** A customer from the store. */ -export type CustomerOrdersStatisticsArgs = { - dateGte?: InputMaybe; - dateLt?: InputMaybe; - onlyPaidOrders?: Scalars['Boolean']['input']; - partnerId?: InputMaybe; -}; - - -/** A customer from the store. */ -export type CustomerWishlistArgs = { - productsIds?: InputMaybe>>; -}; - -export type CustomerAccessToken = { - isMaster: Scalars['Boolean']['output']; - legacyToken?: Maybe; - token?: Maybe; - /** The user login type */ - type?: Maybe; - validUntil: Scalars['DateTime']['output']; -}; - -export type CustomerAccessTokenDetails = { - /** The customer id */ - customerId: Scalars['Long']['output']; - /** The identifier linked to the access token */ - identifier?: Maybe; - /** Specifies whether the user is a master user */ - isMaster: Scalars['Boolean']['output']; - /** The user login origin */ - origin?: Maybe; - /** The user login type */ - type?: Maybe; - validUntil: Scalars['DateTime']['output']; -}; - -/** The input to authenticate a user. */ -export type CustomerAccessTokenInput = { - email: Scalars['String']['input']; - password: Scalars['String']['input']; -}; - -export type CustomerAddressNode = Node & { - /** Address street. */ - address?: Maybe; - /** Address street 2. */ - address2?: Maybe; - /** Address details. */ - addressDetails?: Maybe; - /** Address number. */ - addressNumber?: Maybe; - /** zip code. */ - cep?: Maybe; - /** address city. */ - city?: Maybe; - /** Country. */ - country?: Maybe; - /** The email of the customer address. */ - email?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The name of the customer address. */ - name?: Maybe; - /** Address neighborhood. */ - neighborhood?: Maybe; - /** The phone of the customer address. */ - phone?: Maybe; - /** Address reference point. */ - referencePoint?: Maybe; - /** State. */ - state?: Maybe; - /** - * Address street. - * @deprecated Use the 'address' field to get the address. - */ - street?: Maybe; -}; - -/** The input to authenticate a user. */ -export type CustomerAuthenticateInput = { - input: Scalars['String']['input']; - password: Scalars['String']['input']; -}; - -export type CustomerCheckingAccountHistoryNode = { - /** Customer's checking account history date. */ - date: Scalars['DateTime']['output']; - /** Description of the customer's checking account history. */ - historic?: Maybe; - /** Type of customer's checking account history. */ - type: TypeCheckingAccount; - /** Value of customer's checking account history. */ - value: Scalars['Decimal']['output']; -}; - -export type CustomerCreateInput = { - /** The street address for the registered address. */ - address?: InputMaybe; - /** The street address for the registered address. */ - address2?: InputMaybe; - /** Any additional information related to the registered address. */ - addressComplement?: InputMaybe; - /** The building number for the registered address. */ - addressNumber?: InputMaybe; - /** The date of birth of the customer. */ - birthDate?: InputMaybe; - /** The CEP for the registered address. */ - cep?: InputMaybe; - /** The city for the registered address. */ - city?: InputMaybe; - /** The Brazilian tax identification number for corporations. */ - cnpj?: InputMaybe; - /** The legal name of the corporate customer. */ - corporateName?: InputMaybe; - /** The country for the registered address. */ - country?: InputMaybe; - /** The Brazilian tax identification number for individuals. */ - cpf?: InputMaybe; - /** Indicates if it is a natural person or company profile. */ - customerType: EntityType; - /** The email of the customer. */ - email?: InputMaybe; - /** The full name of the customer. */ - fullName?: InputMaybe; - /** The gender of the customer. */ - gender?: InputMaybe; - /** The customer information group values. */ - informationGroupValues?: InputMaybe>>; - /** Indicates if the customer is state registration exempt. */ - isStateRegistrationExempt?: InputMaybe; - /** The neighborhood for the registered address. */ - neighborhood?: InputMaybe; - /** Indicates if the customer has subscribed to the newsletter. */ - newsletter?: InputMaybe; - /** The password for the customer's account. */ - password?: InputMaybe; - /** The password confirmation for the customer's account. */ - passwordConfirmation?: InputMaybe; - /** The area code for the customer's primary phone number. */ - primaryPhoneAreaCode?: InputMaybe; - /** The customer's primary phone number. */ - primaryPhoneNumber?: InputMaybe; - /** The name of the receiver for the registered address. */ - receiverName?: InputMaybe; - /** A reference point or description to help locate the registered address. */ - reference?: InputMaybe; - /** Indicates if the customer is a reseller. */ - reseller?: InputMaybe; - /** The area code for the customer's secondary phone number. */ - secondaryPhoneAreaCode?: InputMaybe; - /** The customer's secondary phone number. */ - secondaryPhoneNumber?: InputMaybe; - /** The state for the registered address. */ - state?: InputMaybe; - /** The state registration number for businesses. */ - stateRegistration?: InputMaybe; -}; - -/** The input to change the user email. */ -export type CustomerEmailChangeInput = { - /** The new email. */ - newEmail: Scalars['String']['input']; -}; - -export type CustomerInformationGroupFieldNode = { - /** The field name. */ - name?: Maybe; - /** The field order. */ - order: Scalars['Int']['output']; - /** If the field is required. */ - required: Scalars['Boolean']['output']; - /** The field value. */ - value?: Maybe; -}; - -export type CustomerInformationGroupNode = { - /** The group exibition name. */ - exibitionName?: Maybe; - /** The group fields. */ - fields?: Maybe>>; - /** The group name. */ - name?: Maybe; -}; - -export type CustomerOrderCollectionSegment = { - items?: Maybe>>; - page: Scalars['Int']['output']; - pageSize: Scalars['Int']['output']; - totalCount: Scalars['Int']['output']; -}; - -/** Define the order attribute which the result set will be sorted on. */ -export type CustomerOrderSortKeys = - /** The total order value. */ - | 'AMOUNT' - /** The date the order was placed. */ - | 'DATE' - /** The order ID. */ - | 'ID' - /** The order current status. */ - | 'STATUS'; - -export type CustomerOrdersStatistics = { - /** The number of products the customer made from the number of orders. */ - productsQuantity: Scalars['Int']['output']; - /** The number of orders the customer made. */ - quantity: Scalars['Int']['output']; -}; - -/** The input to change the user password by recovery. */ -export type CustomerPasswordChangeByRecoveryInput = { - /** Key generated for password recovery. */ - key: Scalars['String']['input']; - /** The new password. */ - newPassword: Scalars['String']['input']; - /** New password confirmation. */ - newPasswordConfirmation: Scalars['String']['input']; -}; - -/** The input to change the user password. */ -export type CustomerPasswordChangeInput = { - /** The current password. */ - currentPassword: Scalars['String']['input']; - /** The new password. */ - newPassword: Scalars['String']['input']; - /** New password confirmation. */ - newPasswordConfirmation: Scalars['String']['input']; -}; - -export type CustomerSimpleCreateInputGraphInput = { - /** The date of birth of the customer. */ - birthDate?: InputMaybe; - /** The Brazilian tax identification number for corporations. */ - cnpj?: InputMaybe; - /** The legal name of the corporate customer. */ - corporateName?: InputMaybe; - /** The Brazilian tax identification number for individuals. */ - cpf?: InputMaybe; - /** Indicates if it is a natural person or company profile. */ - customerType: EntityType; - /** The email of the customer. */ - email?: InputMaybe; - /** The full name of the customer. */ - fullName?: InputMaybe; - /** Indicates if the customer is state registration exempt. */ - isStateRegistrationExempt?: InputMaybe; - /** The area code for the customer's primary phone number. */ - primaryPhoneAreaCode?: InputMaybe; - /** The customer's primary phone number. */ - primaryPhoneNumber?: InputMaybe; - /** The state registration number for businesses. */ - stateRegistration?: InputMaybe; -}; - -export type CustomerSubscription = { - /** Subscription billing address. */ - billingAddress?: Maybe; - /** The date when the subscription was cancelled. */ - cancellationDate?: Maybe; - /** The coupon code applied to the subscription. */ - coupon?: Maybe; - /** The date of the subscription. */ - date: Scalars['DateTime']['output']; - /** Subscription delivery address. */ - deliveryAddress?: Maybe; - /** The date of intercalated recurring payments. */ - intercalatedRecurrenceDate?: Maybe; - /** The date of the next recurring payment. */ - nextRecurrenceDate?: Maybe; - /** Subscription orders. */ - orders?: Maybe>>; - /** The date when the subscription was paused. */ - pauseDate?: Maybe; - /** The payment details for the subscription. */ - payment?: Maybe; - /** The list of products associated with the subscription. */ - products?: Maybe>>; - /** The details of the recurring subscription. */ - recurring?: Maybe; - /** The subscription status. */ - status?: Maybe; - /** The subscription group id. */ - subscriptionGroupId: Scalars['Long']['output']; - /** Subscription unique identifier. */ - subscriptionId: Scalars['Long']['output']; -}; - -export type CustomerSubscriptionPayment = { - /** The details of the payment card associated with the subscription. */ - card?: Maybe; - /** The type of payment for the subscription. */ - type?: Maybe; -}; - -export type CustomerSubscriptionPaymentCard = { - /** The brand of the payment card (e.g., Visa, MasterCard). */ - brand?: Maybe; - /** The expiration date of the payment card. */ - expiration?: Maybe; - /** The masked or truncated number of the payment card. */ - number?: Maybe; -}; - -export type CustomerSubscriptionProduct = { - /** The id of the product variant associated with the subscription. */ - productVariantId: Scalars['Long']['output']; - /** The quantity of the product variant in the subscription. */ - quantity: Scalars['Int']['output']; - /** Indicates whether the product variant is removed from the subscription. */ - removed: Scalars['Boolean']['output']; - /** The id of the subscription product. */ - subscriptionProductId: Scalars['Long']['output']; - /** The monetary value of the product variant in the subscription. */ - value: Scalars['Decimal']['output']; -}; - -export type CustomerSubscriptionRecurring = { - /** The number of days between recurring payments. */ - days: Scalars['Int']['output']; - /** The description of the recurring subscription. */ - description?: Maybe; - /** The name of the recurring subscription. */ - name?: Maybe; - /** The recurring subscription id. */ - recurringId: Scalars['Long']['output']; - /** Indicates whether the recurring subscription is removed. */ - removed: Scalars['Boolean']['output']; -}; - -export type CustomerUpdateInput = { - /** The date of birth of the customer. */ - birthDate?: InputMaybe; - /** The legal name of the corporate customer. */ - corporateName?: InputMaybe; - /** The full name of the customer. */ - fullName?: InputMaybe; - /** The gender of the customer. */ - gender?: InputMaybe; - /** The customer information group values. */ - informationGroupValues?: InputMaybe>>; - /** The customer's primary phone number. */ - primaryPhoneNumber?: InputMaybe; - /** The customer's primary phone number. */ - primaryPhoneNumberInternational?: InputMaybe; - /** The Brazilian register identification number for individuals. */ - rg?: InputMaybe; - /** The customer's secondary phone number. */ - secondaryPhoneNumber?: InputMaybe; - /** The customer's secondary phone number. */ - secondaryPhoneNumberInternational?: InputMaybe; - /** The state registration number for businesses. */ - stateRegistration?: InputMaybe; -}; - -/** Some products can have customizations, such as writing your name on it or other predefined options. */ -export type Customization = Node & { - /** Cost of customization. */ - cost: Scalars['Decimal']['output']; - /** Customization unique identifier. */ - customizationId: Scalars['Long']['output']; - /** Customization group's name. */ - groupName?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** Maximum allowed size of the field. */ - maxLength: Scalars['Int']['output']; - /** The customization's name. */ - name?: Maybe; - /** Priority order of customization. */ - order: Scalars['Int']['output']; - /** Type of customization. */ - type?: Maybe; - /** Value of customization. */ - values?: Maybe>>; -}; - -/** Deadline alert informations. */ -export type DeadlineAlert = { - /** Deadline alert time */ - deadline?: Maybe; - /** Deadline alert description */ - description?: Maybe; - /** Second deadline alert time */ - secondDeadline?: Maybe; - /** Second deadline alert description */ - secondDescription?: Maybe; - /** Second deadline alert title */ - secondTitle?: Maybe; - /** Deadline alert title */ - title?: Maybe; -}; - -/** The delivery schedule detail. */ -export type DeliveryScheduleDetail = { - /** The date of the delivery schedule. */ - date?: Maybe; - /** The end date and time of the delivery schedule. */ - endDateTime: Scalars['DateTime']['output']; - /** The end time of the delivery schedule. */ - endTime?: Maybe; - /** The start date and time of the delivery schedule. */ - startDateTime: Scalars['DateTime']['output']; - /** The start time of the delivery schedule. */ - startTime?: Maybe; -}; - -/** Input for delivery scheduling. */ -export type DeliveryScheduleInput = { - /** The date. */ - date: Scalars['DateTime']['input']; - /** The period ID. */ - periodId: Scalars['Long']['input']; -}; - -/** A distribution center. */ -export type DistributionCenter = { - /** The distribution center unique identifier. */ - id?: Maybe; - /** The distribution center seller name. */ - sellerName?: Maybe; -}; - -/** Define the entity type of the customer registration. */ -export type EntityType = - /** Legal entity, a company, business, organization. */ - | 'COMPANY' - /** An international person, a legal international entity. */ - | 'INTERNATIONAL' - /** An individual person, a physical person. */ - | 'PERSON'; - -export type EnumInformationGroup = - | 'NEWSLETTER' - | 'PESSOA_FISICA' - | 'PESSOA_JURIDICA'; - -/** Represents a list of events with their details. */ -export type EventList = { - /** URL of the event's cover image */ - coverUrl?: Maybe; - /** Date of the event */ - date?: Maybe; - /** Type of the event */ - eventType?: Maybe; - /** Indicates if the token is from the owner of this event list */ - isOwner: Scalars['Boolean']['output']; - /** URL of the event's logo */ - logoUrl?: Maybe; - /** Name of the event owner */ - ownerName?: Maybe; - /** Event title */ - title?: Maybe; - /** URL of the event */ - url?: Maybe; -}; - -export type EventListAddProductInput = { - /** The unique identifier of the product variant. */ - productVariantId: Scalars['Long']['input']; - /** The quantity of the product to be added. */ - quantity: Scalars['Int']['input']; -}; - -/** Represents a list of store events. */ -export type EventListStore = { - /** Date of the event */ - date?: Maybe; - /** Event type name of the event */ - eventType?: Maybe; - /** URL of the event's logo */ - logoUrl?: Maybe; - /** The name of the event. */ - name?: Maybe; - /** The URL of the event. */ - url?: Maybe; -}; - -/** Represents a list of events types. */ -export type EventListType = { - /** The URL of the event's logo. */ - logoUrl?: Maybe; - /** The name of the event. */ - name?: Maybe; - /** The URL path of the event. */ - urlPath?: Maybe; -}; - -export type FilterPosition = - /** Both filter position. */ - | 'BOTH' - /** Horizontal filter position. */ - | 'HORIZONTAL' - /** Vertical filter position. */ - | 'VERTICAL'; - -export type FriendRecommendInput = { - /** The buy list id */ - buyListId?: InputMaybe; - /** Email of who is recommending a product */ - fromEmail: Scalars['String']['input']; - /** Who is recommending */ - fromName: Scalars['String']['input']; - /** The message */ - message?: InputMaybe; - /** The Product Id */ - productId?: InputMaybe; - /** Email of the person who will receive a product recommendation */ - toEmail: Scalars['String']['input']; - /** Name of the person who will receive a product recommendation */ - toName: Scalars['String']['input']; -}; - -/** The customer's gender. */ -export type Gender = - | 'FEMALE' - | 'MALE'; - -/** The shipping quotes for group. */ -export type GroupShippingQuote = { - /** The shipping deadline. */ - deadline: Scalars['Int']['output']; - /** The shipping deadline, in hours. */ - deadlineInHours?: Maybe; - /** The shipping name. */ - name?: Maybe; - /** The shipping quote unique identifier. */ - shippingQuoteId: Scalars['Uuid']['output']; - /** The shipping type. */ - type?: Maybe; - /** The shipping value. */ - value: Scalars['Float']['output']; -}; - -/** A hotsite is a group of products used to organize them or to make them easier to browse. */ -export type Hotsite = Node & { - /** A list of banners associated with the hotsite. */ - banners?: Maybe>>; - /** A list of contents associated with the hotsite. */ - contents?: Maybe>>; - /** The hotsite will be displayed until this date. */ - endDate?: Maybe; - /** Expression used to associate products to the hotsite. */ - expression?: Maybe; - /** Hotsite unique identifier. */ - hotsiteId: Scalars['Long']['output']; - /** The node unique identifier. */ - id?: Maybe; - /** The hotsite's name. */ - name?: Maybe; - /** Set the quantity of products displayed per page. */ - pageSize: Scalars['Int']['output']; - /** A list of products associated with the hotsite. */ - products?: Maybe; - /** Sorting information to be used by default on the hotsite. */ - sorting?: Maybe; - /** The hotsite will be displayed from this date. */ - startDate?: Maybe; - /** The subtype of the hotsite. */ - subtype?: Maybe; - /** The template used for the hotsite. */ - template?: Maybe; - /** The hotsite's URL. */ - url?: Maybe; -}; - - -/** A hotsite is a group of products used to organize them or to make them easier to browse. */ -export type HotsiteProductsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}; - -/** Define the hotsite attribute which the result set will be sorted on. */ -export type HotsiteSortKeys = - /** The hotsite id. */ - | 'ID' - /** The hotsite name. */ - | 'NAME' - /** The hotsite url. */ - | 'URL'; - -export type HotsiteSorting = { - direction?: Maybe; - field?: Maybe; -}; - -export type HotsiteSubtype = - /** Hotsite created from a brand. */ - | 'BRAND' - /** Hotsite created from a buy list (lista de compra). */ - | 'BUY_LIST' - /** Hotsite created from a category. */ - | 'CATEGORY' - /** Hotsite created from a portfolio. */ - | 'PORTFOLIO'; - -/** A connection to a list of items. */ -export type HotsitesConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; -}; - -/** An edge in a connection. */ -export type HotsitesEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -/** Informations about an image of a product. */ -export type Image = { - /** The name of the image file. */ - fileName?: Maybe; - /** Check if the image is used for the product main image. */ - mini: Scalars['Boolean']['output']; - /** Numeric order the image should be displayed. */ - order: Scalars['Int']['output']; - /** Check if the image is used for the product prints only. */ - print: Scalars['Boolean']['output']; - /** The url to retrieve the image */ - url?: Maybe; -}; - -/** The additional information about in-store pickup */ -export type InStorePickupAdditionalInformationInput = { - /** The document */ - document?: InputMaybe; - /** The name */ - name?: InputMaybe; -}; - -/** Information registred to the product. */ -export type Information = { - /** The information id. */ - id: Scalars['Long']['output']; - /** The information title. */ - title?: Maybe; - /** The information type. */ - type?: Maybe; - /** The information value. */ - value?: Maybe; -}; - -export type InformationGroupFieldNode = Node & { - /** The information group field display type. */ - displayType?: Maybe; - /** The information group field name. */ - fieldName?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The information group field order. */ - order: Scalars['Int']['output']; - /** If the information group field is required. */ - required: Scalars['Boolean']['output']; - /** The information group field preset values. */ - values?: Maybe>>; -}; - -export type InformationGroupFieldValueNode = { - /** The information group field value order. */ - order: Scalars['Int']['output']; - /** The information group field value. */ - value?: Maybe; -}; - -export type InformationGroupValueInput = { - /** The information group field unique identifier. */ - id?: InputMaybe; - /** The information group field value. */ - value?: InputMaybe; -}; - -export type Installment = { - /** Wether the installment has discount. */ - discount: Scalars['Boolean']['output']; - /** Wether the installment has fees. */ - fees: Scalars['Boolean']['output']; - /** The number of installments. */ - number: Scalars['Int']['output']; - /** The value of the installment. */ - value: Scalars['Decimal']['output']; -}; - -export type InstallmentPlan = { - /** The custom display name of this installment plan. */ - displayName?: Maybe; - /** List of the installments. */ - installments?: Maybe>>; - /** The name of this installment plan. */ - name?: Maybe; -}; - -/** The user login origin. */ -export type LoginOrigin = - | 'SIMPLE' - | 'SOCIAL'; - -/** The user login type. */ -export type LoginType = - | 'AUTHENTICATED' - | 'NEW' - | 'SIMPLE'; - -/** Informations about menu items. */ -export type Menu = Node & { - /** Menu css class to apply. */ - cssClass?: Maybe; - /** The full image URL. */ - fullImageUrl?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** Menu image url address. */ - imageUrl?: Maybe; - /** Menu hierarchy level. */ - level: Scalars['Int']['output']; - /** Menu link address. */ - link?: Maybe; - /** Menu group identifier. */ - menuGroupId: Scalars['Int']['output']; - /** Menu identifier. */ - menuId: Scalars['Int']['output']; - /** Menu name. */ - name: Scalars['String']['output']; - /** Menu hierarchy level. */ - openNewTab: Scalars['Boolean']['output']; - /** Menu position order. */ - order: Scalars['Int']['output']; - /** Parent menu identifier. */ - parentMenuId?: Maybe; - /** Menu extra text. */ - text?: Maybe; -}; - - -/** Informations about menu items. */ -export type MenuFullImageUrlArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Informations about menu groups. */ -export type MenuGroup = Node & { - /** The full image URL. */ - fullImageUrl?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** Menu group image url. */ - imageUrl?: Maybe; - /** Menu group identifier. */ - menuGroupId: Scalars['Int']['output']; - /** List of menus associated with the current group */ - menus?: Maybe>>; - /** Menu group name. */ - name?: Maybe; - /** Menu group partner id. */ - partnerId?: Maybe; - /** Menu group position. */ - position?: Maybe; -}; - - -/** Informations about menu groups. */ -export type MenuGroupFullImageUrlArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Some products can have metadata, like diferent types of custom information. A basic key value pair. */ -export type Metadata = { - /** Metadata key. */ - key?: Maybe; - /** Metadata value. */ - value?: Maybe; -}; - -export type Mutation = { - /** Add coupon to checkout */ - checkoutAddCoupon?: Maybe; - /** Add metadata to checkout */ - checkoutAddMetadata?: Maybe; - /** Add metadata to a checkout product */ - checkoutAddMetadataForProductVariant?: Maybe; - /** Add products to an existing checkout */ - checkoutAddProduct?: Maybe; - /** Associate the address with a checkout. */ - checkoutAddressAssociate?: Maybe; - /** Clones a cart by the given checkout ID, returns the newly created checkout ID */ - checkoutClone?: Maybe; - /** Completes a checkout */ - checkoutComplete?: Maybe; - /** Associate the customer with a checkout. */ - checkoutCustomerAssociate?: Maybe; - /** Delete a suggested card */ - checkoutDeleteSuggestedCard?: Maybe; - /** Selects the variant of a gift product */ - checkoutGiftVariantSelection?: Maybe; - /** Associate the partner with a checkout. */ - checkoutPartnerAssociate?: Maybe; - /** Disassociates the checkout from the partner and returns a new checkout. */ - checkoutPartnerDisassociate?: Maybe; - /** Remove coupon to checkout */ - checkoutRemoveCoupon?: Maybe; - /** Removes metadata keys from a checkout */ - checkoutRemoveMetadata?: Maybe; - /** Remove products from an existing checkout */ - checkoutRemoveProduct?: Maybe; - /** Remove Customization to Checkout */ - checkoutRemoveProductCustomization?: Maybe; - /** Remove Subscription to Checkout */ - checkoutRemoveProductSubscription?: Maybe; - /** Resets a specific area of a checkout */ - checkoutReset?: Maybe; - /** Select installment. */ - checkoutSelectInstallment?: Maybe; - /** Select payment method. */ - checkoutSelectPaymentMethod?: Maybe; - /** Select shipping quote */ - checkoutSelectShippingQuote?: Maybe; - /** Update a product of an existing checkout */ - checkoutUpdateProduct?: Maybe; - /** Use balance checking account checkout */ - checkoutUseCheckingAccount?: Maybe; - /** Create a new checkout */ - createCheckout?: Maybe; - /** Register an email in the newsletter. */ - createNewsletterRegister?: Maybe; - /** Adds a review to a product variant. */ - createProductReview?: Maybe; - /** Record a searched term for admin reports */ - createSearchTermRecord?: Maybe; - /** - * Creates a new customer access token with an expiration time. - * @deprecated Use the CustomerAuthenticatedLogin mutation. - */ - customerAccessTokenCreate?: Maybe; - /** Renews the expiration time of a customer access token. The token must not be expired. */ - customerAccessTokenRenew?: Maybe; - /** Create an address. */ - customerAddressCreate?: Maybe; - /** Delete an existing address, if it is not the only registered address */ - customerAddressRemove?: Maybe; - /** Change an existing address */ - customerAddressUpdate?: Maybe; - /** Creates a new customer access token with an expiration time. */ - customerAuthenticatedLogin?: Maybe; - /** Allows the user to complete the required information for a partial registration. */ - customerCompletePartialRegistration?: Maybe; - /** Creates a new customer register. */ - customerCreate?: Maybe; - /** Changes user email. */ - customerEmailChange?: Maybe; - /** Impersonates a customer, generating an access token with expiration time. */ - customerImpersonate?: Maybe; - /** Changes user password. */ - customerPasswordChange?: Maybe; - /** Change user password by recovery. */ - customerPasswordChangeByRecovery?: Maybe; - /** Sends a password recovery email to the user. */ - customerPasswordRecovery?: Maybe; - /** Returns the user associated with a simple login (CPF or Email) if exists, else return a New user. */ - customerSimpleLoginStart?: Maybe; - /** Verify if the answer to a simple login question is correct, returns a new question if the answer is incorrect */ - customerSimpleLoginVerifyAnwser?: Maybe; - /** Returns the user associated with a Facebook account if exists, else return a New user. */ - customerSocialLoginFacebook?: Maybe; - /** Returns the user associated with a Google account if exists, else return a New user. */ - customerSocialLoginGoogle?: Maybe; - /** Allows a customer to change the delivery address for an existing subscription. */ - customerSubscriptionAddressChange?: Maybe; - /** Add products to an existing subscription */ - customerSubscriptionProductAdd?: Maybe; - /** Remove products to an existing subscription */ - customerSubscriptionProductRemove?: Maybe; - /** Allows a customer to change an existing subscription status. */ - customerSubscriptionUpdateStatus?: Maybe; - /** Updates a customer register. */ - customerUpdate?: Maybe; - /** Adds products to the event list. */ - eventListAddProduct?: Maybe; - /** Creates a new closed scope partner access token with an expiration time. */ - partnerAccessTokenCreate?: Maybe; - /** Submits a counteroffer for a product. */ - productCounterOfferSubmit?: Maybe; - /** Mutation for recommend a product to a friend */ - productFriendRecommend?: Maybe; - /** Add a price alert. */ - productPriceAlert?: Maybe; - /** Creates an alert to notify when the product is back in stock. */ - productRestockAlert?: Maybe; - /** Send a generic form. */ - sendGenericForm?: Maybe; - /** - * Change an existing address - * @deprecated Use the CustomerAddressUpdate mutation. - */ - updateAddress?: Maybe; - /** Adds a product to the customer's wishlist. */ - wishlistAddProduct?: Maybe>>; - /** Removes a product from the customer's wishlist. */ - wishlistRemoveProduct?: Maybe>>; -}; - - -export type MutationCheckoutAddCouponArgs = { - checkoutId: Scalars['Uuid']['input']; - coupon: Scalars['String']['input']; - customerAccessToken?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCheckoutAddMetadataArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - metadata: Array>; -}; - - -export type MutationCheckoutAddMetadataForProductVariantArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - metadata: Array>; - productVariantId: Scalars['Long']['input']; -}; - - -export type MutationCheckoutAddProductArgs = { - customerAccessToken?: InputMaybe; - input: CheckoutProductInput; -}; - - -export type MutationCheckoutAddressAssociateArgs = { - addressId: Scalars['ID']['input']; - checkoutId: Scalars['Uuid']['input']; - customerAccessToken: Scalars['String']['input']; -}; - - -export type MutationCheckoutCloneArgs = { - checkoutId: Scalars['Uuid']['input']; - copyUser?: Scalars['Boolean']['input']; - customerAccessToken?: InputMaybe; -}; - - -export type MutationCheckoutCompleteArgs = { - checkoutId: Scalars['Uuid']['input']; - comments?: InputMaybe; - customerAccessToken?: InputMaybe; - paymentData: Scalars['String']['input']; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCheckoutCustomerAssociateArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken: Scalars['String']['input']; -}; - - -export type MutationCheckoutDeleteSuggestedCardArgs = { - cardKey: Scalars['String']['input']; - checkoutId: Scalars['Uuid']['input']; - customerAccessToken: Scalars['String']['input']; - paymentMethodId: Scalars['ID']['input']; -}; - - -export type MutationCheckoutGiftVariantSelectionArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - productVariantId: Scalars['Long']['input']; -}; - - -export type MutationCheckoutPartnerAssociateArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - partnerAccessToken: Scalars['String']['input']; -}; - - -export type MutationCheckoutPartnerDisassociateArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; -}; - - -export type MutationCheckoutRemoveCouponArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; -}; - - -export type MutationCheckoutRemoveMetadataArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - keys: Array>; -}; - - -export type MutationCheckoutRemoveProductArgs = { - customerAccessToken?: InputMaybe; - input: CheckoutProductInput; -}; - - -export type MutationCheckoutRemoveProductCustomizationArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - customizationId: Scalars['ID']['input']; - productVariantId: Scalars['Long']['input']; -}; - - -export type MutationCheckoutRemoveProductSubscriptionArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - productVariantId: Scalars['Long']['input']; -}; - - -export type MutationCheckoutResetArgs = { - checkoutId: Scalars['Uuid']['input']; - types: Array; -}; - - -export type MutationCheckoutSelectInstallmentArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - installmentNumber: Scalars['Int']['input']; - selectedPaymentMethodId: Scalars['Uuid']['input']; -}; - - -export type MutationCheckoutSelectPaymentMethodArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - paymentMethodId: Scalars['ID']['input']; -}; - - -export type MutationCheckoutSelectShippingQuoteArgs = { - additionalInformation?: InputMaybe; - checkoutId: Scalars['Uuid']['input']; - customerAccessToken?: InputMaybe; - deliveryScheduleInput?: InputMaybe; - distributionCenterId?: InputMaybe; - shippingQuoteId: Scalars['Uuid']['input']; -}; - - -export type MutationCheckoutUpdateProductArgs = { - customerAccessToken?: InputMaybe; - input: CheckoutProductUpdateInput; -}; - - -export type MutationCheckoutUseCheckingAccountArgs = { - checkoutId: Scalars['Uuid']['input']; - customerAccessToken: Scalars['String']['input']; - useBalance: Scalars['Boolean']['input']; -}; - - -export type MutationCreateCheckoutArgs = { - products?: InputMaybe>>; -}; - - -export type MutationCreateNewsletterRegisterArgs = { - input: NewsletterInput; -}; - - -export type MutationCreateProductReviewArgs = { - input: ReviewCreateInput; -}; - - -export type MutationCreateSearchTermRecordArgs = { - input: SearchRecordInput; -}; - - -export type MutationCustomerAccessTokenCreateArgs = { - input: CustomerAccessTokenInput; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerAccessTokenRenewArgs = { - customerAccessToken: Scalars['String']['input']; -}; - - -export type MutationCustomerAddressCreateArgs = { - address: CreateCustomerAddressInput; - customerAccessToken: Scalars['String']['input']; -}; - - -export type MutationCustomerAddressRemoveArgs = { - customerAccessToken: Scalars['String']['input']; - id: Scalars['ID']['input']; -}; - - -export type MutationCustomerAddressUpdateArgs = { - address: UpdateCustomerAddressInput; - customerAccessToken: Scalars['String']['input']; - id: Scalars['ID']['input']; -}; - - -export type MutationCustomerAuthenticatedLoginArgs = { - input: CustomerAuthenticateInput; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerCompletePartialRegistrationArgs = { - customerAccessToken: Scalars['String']['input']; - input?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerCreateArgs = { - input?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerEmailChangeArgs = { - customerAccessToken: Scalars['String']['input']; - input?: InputMaybe; -}; - - -export type MutationCustomerImpersonateArgs = { - customerAccessToken: Scalars['String']['input']; - input: Scalars['String']['input']; -}; - - -export type MutationCustomerPasswordChangeArgs = { - customerAccessToken: Scalars['String']['input']; - input?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerPasswordChangeByRecoveryArgs = { - input?: InputMaybe; -}; - - -export type MutationCustomerPasswordRecoveryArgs = { - input: Scalars['String']['input']; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerSimpleLoginStartArgs = { - input?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerSimpleLoginVerifyAnwserArgs = { - answerId: Scalars['Uuid']['input']; - input?: InputMaybe; - questionId: Scalars['Uuid']['input']; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerSocialLoginFacebookArgs = { - facebookAccessToken?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationCustomerSocialLoginGoogleArgs = { - clientId?: InputMaybe; - recaptchaToken?: InputMaybe; - userCredential?: InputMaybe; -}; - - -export type MutationCustomerSubscriptionAddressChangeArgs = { - addressId: Scalars['ID']['input']; - customerAccessToken: Scalars['String']['input']; - subscriptionId: Scalars['Long']['input']; -}; - - -export type MutationCustomerSubscriptionProductAddArgs = { - customerAccessToken: Scalars['String']['input']; - products: Array>; - subscriptionId: Scalars['Long']['input']; -}; - - -export type MutationCustomerSubscriptionProductRemoveArgs = { - customerAccessToken: Scalars['String']['input']; - subscriptionId: Scalars['Long']['input']; - subscriptionProducts: Array>; -}; - - -export type MutationCustomerSubscriptionUpdateStatusArgs = { - customerAccessToken: Scalars['String']['input']; - status: Status; - subscriptionId: Scalars['Long']['input']; -}; - - -export type MutationCustomerUpdateArgs = { - customerAccessToken: Scalars['String']['input']; - input: CustomerUpdateInput; -}; - - -export type MutationEventListAddProductArgs = { - eventListToken: Scalars['String']['input']; - products: Array>; -}; - - -export type MutationPartnerAccessTokenCreateArgs = { - input: PartnerAccessTokenInput; -}; - - -export type MutationProductCounterOfferSubmitArgs = { - input: CounterOfferInput; -}; - - -export type MutationProductFriendRecommendArgs = { - input: FriendRecommendInput; -}; - - -export type MutationProductPriceAlertArgs = { - input: AddPriceAlertInput; -}; - - -export type MutationProductRestockAlertArgs = { - input: RestockAlertInput; - partnerAccessToken?: InputMaybe; -}; - - -export type MutationSendGenericFormArgs = { - body?: InputMaybe; - file?: InputMaybe; - recaptchaToken?: InputMaybe; -}; - - -export type MutationUpdateAddressArgs = { - address: UpdateCustomerAddressInput; - customerAccessToken: Scalars['String']['input']; - id: Scalars['ID']['input']; -}; - - -export type MutationWishlistAddProductArgs = { - customerAccessToken: Scalars['String']['input']; - productId: Scalars['Long']['input']; -}; - - -export type MutationWishlistRemoveProductArgs = { - customerAccessToken: Scalars['String']['input']; - productId: Scalars['Long']['input']; -}; - -export type NewsletterInput = { - email: Scalars['String']['input']; - informationGroupValues?: InputMaybe>>; - name: Scalars['String']['input']; - recaptchaToken?: InputMaybe; -}; - -export type NewsletterNode = { - /** Newsletter creation date. */ - createDate: Scalars['DateTime']['output']; - /** The newsletter receiver email. */ - email?: Maybe; - /** The newsletter receiver name. */ - name?: Maybe; - /** Newsletter update date. */ - updateDate?: Maybe; -}; - -export type Node = { - id?: Maybe; -}; - -/** Types of operations to perform between query terms. */ -export type Operation = - /** Performs AND operation between query terms. */ - | 'AND' - /** Performs OR operation between query terms. */ - | 'OR'; - -/** Result of the operation. */ -export type OperationResult = { - /** If the operation is a success. */ - isSuccess: Scalars['Boolean']['output']; -}; - -export type OrderAdjustNode = { - /** The adjust name. */ - name?: Maybe; - /** Note about the adjust. */ - note?: Maybe; - /** Type of adjust. */ - type?: Maybe; - /** Amount to be adjusted. */ - value: Scalars['Decimal']['output']; -}; - -export type OrderAttributeNode = { - /** The attribute name. */ - name?: Maybe; - /** The attribute value. */ - value?: Maybe; -}; - -export type OrderCustomizationNode = { - /** The customization cost. */ - cost?: Maybe; - /** The customization name. */ - name?: Maybe; - /** The customization value. */ - value?: Maybe; -}; - -export type OrderDeliveryAddressNode = { - /** The street number of the address. */ - addressNumber?: Maybe; - /** The ZIP code of the address. */ - cep?: Maybe; - /** The city of the address. */ - city?: Maybe; - /** The additional address information. */ - complement?: Maybe; - /** The country of the address. */ - country?: Maybe; - /** The neighborhood of the address. */ - neighboorhood?: Maybe; - /** The receiver's name. */ - receiverName?: Maybe; - /** The reference point for the address. */ - referencePoint?: Maybe; - /** The state of the address, abbreviated. */ - state?: Maybe; - /** The street name of the address. */ - street?: Maybe; -}; - -export type OrderInvoiceNode = { - /** The invoice access key. */ - accessKey?: Maybe; - /** The invoice identifier code. */ - invoiceCode?: Maybe; - /** The invoice serial digit. */ - serialDigit?: Maybe; - /** The invoice URL. */ - url?: Maybe; -}; - -export type OrderNoteNode = { - /** Date the note was added to the order. */ - date?: Maybe; - /** The note added to the order. */ - note?: Maybe; - /** The user who added the note to the order. */ - user?: Maybe; -}; - -export type OrderPackagingNode = { - /** The packaging cost. */ - cost: Scalars['Decimal']['output']; - /** The packaging description. */ - description?: Maybe; - /** The message added to the packaging. */ - message?: Maybe; - /** The packaging name. */ - name?: Maybe; -}; - -export type OrderPaymentAdditionalInfoNode = { - /** Additional information key. */ - key?: Maybe; - /** Additional information value. */ - value?: Maybe; -}; - -export type OrderPaymentBoletoNode = { - /** The digitable line. */ - digitableLine?: Maybe; - /** The payment link. */ - paymentLink?: Maybe; -}; - -export type OrderPaymentCardNode = { - /** The brand of the card. */ - brand?: Maybe; - /** The masked credit card number with only the last 4 digits displayed. */ - maskedNumber?: Maybe; -}; - -export type OrderPaymentNode = { - /** Additional information for the payment. */ - additionalInfo?: Maybe>>; - /** The boleto information. */ - boleto?: Maybe; - /** The card information. */ - card?: Maybe; - /** Order discounted value. */ - discount?: Maybe; - /** Order additional fees value. */ - fees?: Maybe; - /** Value per installment. */ - installmentValue?: Maybe; - /** Number of installments. */ - installments?: Maybe; - /** Message about payment transaction. */ - message?: Maybe; - /** The chosen payment option for the order. */ - paymentOption?: Maybe; - /** The pix information. */ - pix?: Maybe; - /** Current payment status. */ - status?: Maybe; - /** Order total value. */ - total?: Maybe; -}; - -export type OrderPaymentPixNode = { - /** The QR code. */ - qrCode?: Maybe; - /** The expiration date of the QR code. */ - qrCodeExpirationDate?: Maybe; - /** The image URL of the QR code. */ - qrCodeUrl?: Maybe; -}; - -export type OrderProductNode = { - /** List of adjusts on the product price, if any. */ - adjusts?: Maybe>>; - /** The product attributes. */ - attributes?: Maybe>>; - /** The cost of the customizations, if any. */ - customizationPrice: Scalars['Decimal']['output']; - /** List of customizations for the product. */ - customizations?: Maybe>>; - /** Amount of discount in the product price, if any. */ - discount: Scalars['Decimal']['output']; - /** If the product is a gift. */ - gift?: Maybe; - /** The product image. */ - image?: Maybe; - /** The product list price. */ - listPrice: Scalars['Decimal']['output']; - /** The product name. */ - name?: Maybe; - /** The cost of the packagings, if any. */ - packagingPrice: Scalars['Decimal']['output']; - /** List of packagings for the product. */ - packagings?: Maybe>>; - /** The product price. */ - price: Scalars['Decimal']['output']; - /** Information about the product seller. */ - productSeller?: Maybe; - /** Variant unique identifier. */ - productVariantId: Scalars['Long']['output']; - /** Quantity of the given product in the order. */ - quantity: Scalars['Long']['output']; - /** The product sale price. */ - salePrice: Scalars['Decimal']['output']; - /** The product SKU. */ - sku?: Maybe; - /** List of trackings for the order. */ - trackings?: Maybe>>; - /** Value of an unit of the product. */ - unitaryValue: Scalars['Decimal']['output']; -}; - -export type OrderSellerNode = { - /** The seller's name. */ - name?: Maybe; -}; - -export type OrderShippingNode = { - /** Limit date of delivery, in days. */ - deadline?: Maybe; - /** Limit date of delivery, in hours. */ - deadlineInHours?: Maybe; - /** Deadline text message. */ - deadlineText?: Maybe; - /** Distribution center unique identifier. */ - distributionCenterId?: Maybe; - /** The order pick up unique identifier. */ - pickUpId?: Maybe; - /** The products belonging to the order. */ - products?: Maybe>>; - /** Amount discounted from shipping costs, if any. */ - promotion?: Maybe; - /** Shipping company connector identifier code. */ - refConnector?: Maybe; - /** Start date of shipping schedule. */ - scheduleFrom?: Maybe; - /** Limit date of shipping schedule. */ - scheduleUntil?: Maybe; - /** Shipping fee value. */ - shippingFee?: Maybe; - /** The shipping name. */ - shippingName?: Maybe; - /** Shipping rate table unique identifier. */ - shippingTableId?: Maybe; - /** The total value. */ - total?: Maybe; - /** Order package size. */ - volume?: Maybe; - /** The order weight, in grams. */ - weight?: Maybe; -}; - -export type OrderShippingProductNode = { - /** Distribution center unique identifier. */ - distributionCenterId?: Maybe; - /** The product price. */ - price?: Maybe; - /** Variant unique identifier. */ - productVariantId?: Maybe; - /** Quantity of the given product. */ - quantity: Scalars['Int']['output']; -}; - -/** Define the sort orientation of the result set. */ -export type OrderSortDirection = - /** The results will be sorted in an ascending order. */ - | 'ASC' - /** The results will be sorted in an descending order. */ - | 'DESC'; - -/** Represents the status of an order. */ -export type OrderStatus = - /** Order has been approved in analysis. */ - | 'APPROVED_ANALYSIS' - /** Order has been authorized. */ - | 'AUTHORIZED' - /** Order is awaiting payment. */ - | 'AWAITING_PAYMENT' - /** Order is awaiting change of payment method. */ - | 'AWAITING_PAYMENT_CHANGE' - /** Order has been cancelled. */ - | 'CANCELLED' - /** Order has been cancelled - Card Denied. */ - | 'CANCELLED_DENIED_CARD' - /** Order has been cancelled - Fraud. */ - | 'CANCELLED_FRAUD' - /** Order has been cancelled. */ - | 'CANCELLED_ORDER_CANCELLED' - /** Order has been cancelled - Suspected Fraud. */ - | 'CANCELLED_SUSPECT_FRAUD' - /** Order has been cancelled - Card Temporarily Denied. */ - | 'CANCELLED_TEMPORARILY_DENIED_CARD' - /** Order has been checked. */ - | 'CHECKED_ORDER' - /** Order has been credited. */ - | 'CREDITED' - /** Order has been delivered. */ - | 'DELIVERED' - /** Payment denied, but the order has not been cancelled. */ - | 'DENIED_PAYMENT' - /** Documents needed for purchase. */ - | 'DOCUMENTS_FOR_PURCHASE' - /** Order has been placed. */ - | 'ORDERED' - /** Order has been paid. */ - | 'PAID' - /** Available for pick-up in store. */ - | 'PICK_UP_IN_STORE' - /** Order has been received - Gift Card. */ - | 'RECEIVED_GIFT_CARD' - /** Order has been returned. */ - | 'RETURNED' - /** Order has been sent. */ - | 'SENT' - /** Order has been sent - Invoiced. */ - | 'SENT_INVOICED' - /** Order has been separated. */ - | 'SEPARATED'; - -export type OrderStatusNode = { - /** The date when status has changed. */ - changeDate?: Maybe; - /** Order status. */ - status?: Maybe; - /** Status unique identifier. */ - statusId: Scalars['Long']['output']; -}; - -export type OrderSubscriptionNode = { - /** The length of the order signature period. */ - recurringDays?: Maybe; - /** The order subscription period type. */ - recurringName?: Maybe; - /** The order signing group identifier. */ - subscriptionGroupId?: Maybe; - /** subscription unique identifier. */ - subscriptionId?: Maybe; - /** The subscription's order identifier. */ - subscriptionOrderId?: Maybe; - /** The subscription fee for the order. */ - value?: Maybe; -}; - -export type OrderTrackingNode = { - /** The tracking code. */ - code?: Maybe; - /** The URL for tracking. */ - url?: Maybe; -}; - -/** Information about pagination in a connection. */ -export type PageInfo = { - /** When paginating forwards, the cursor to continue. */ - endCursor?: Maybe; - /** Indicates whether more edges exist following the set defined by the clients arguments. */ - hasNextPage: Scalars['Boolean']['output']; - /** Indicates whether more edges exist prior the set defined by the clients arguments. */ - hasPreviousPage: Scalars['Boolean']['output']; - /** When paginating backwards, the cursor to continue. */ - startCursor?: Maybe; -}; - -/** Partners are used to assign specific products or price tables depending on its scope. */ -export type Partner = Node & { - /** The partner alias. */ - alias?: Maybe; - /** The partner is valid until this date. */ - endDate: Scalars['DateTime']['output']; - /** The full partner logo URL. */ - fullUrlLogo?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The partner logo's URL. */ - logoUrl?: Maybe; - /** The partner's name. */ - name?: Maybe; - /** The partner's origin. */ - origin?: Maybe; - /** The partner's access token. */ - partnerAccessToken?: Maybe; - /** Partner unique identifier. */ - partnerId: Scalars['Long']['output']; - /** Portfolio identifier assigned to this partner. */ - portfolioId: Scalars['Int']['output']; - /** Price table identifier assigned to this partner. */ - priceTableId: Scalars['Int']['output']; - /** The partner is valid from this date. */ - startDate: Scalars['DateTime']['output']; - /** The type of scoped the partner is used. */ - type?: Maybe; -}; - - -/** Partners are used to assign specific products or price tables depending on its scope. */ -export type PartnerFullUrlLogoArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -export type PartnerAccessToken = { - token?: Maybe; - validUntil?: Maybe; -}; - -/** The input to authenticate closed scope partners. */ -export type PartnerAccessTokenInput = { - password: Scalars['String']['input']; - username: Scalars['String']['input']; -}; - -/** Input for partners. */ -export type PartnerByRegionInput = { - /** CEP to get the regional partners. */ - cep?: InputMaybe; - /** Region ID to get the regional partners. */ - regionId?: InputMaybe; -}; - -/** Define the partner attribute which the result set will be sorted on. */ -export type PartnerSortKeys = - /** The partner unique identifier. */ - | 'ID' - /** The partner name. */ - | 'NAME'; - -export type PartnerSubtype = - /** Partner 'client' subtype. */ - | 'CLIENT' - /** Partner 'closed' subtype. */ - | 'CLOSED' - /** Partner 'open' subtype. */ - | 'OPEN'; - -/** A connection to a list of items. */ -export type PartnersConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; -}; - -/** An edge in a connection. */ -export type PartnersEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -/** Informations about the physical store. */ -export type PhysicalStore = { - /** Additional text. */ - additionalText?: Maybe; - /** Physical store address. */ - address?: Maybe; - /** Physical store address details. */ - addressDetails?: Maybe; - /** Physical store address number. */ - addressNumber?: Maybe; - /** Physical store address city. */ - city?: Maybe; - /** Physical store country. */ - country?: Maybe; - /** Physical store DDD. */ - ddd: Scalars['Int']['output']; - /** Delivery deadline. */ - deliveryDeadline: Scalars['Int']['output']; - /** Physical store email. */ - email?: Maybe; - /** Physical store latitude. */ - latitude?: Maybe; - /** Physical store longitude. */ - longitude?: Maybe; - /** Physical store name. */ - name?: Maybe; - /** Physical store address neighborhood. */ - neighborhood?: Maybe; - /** Physical store phone number. */ - phoneNumber?: Maybe; - /** Physical store ID. */ - physicalStoreId: Scalars['Int']['output']; - /** If the physical store allows pickup. */ - pickup: Scalars['Boolean']['output']; - /** Pickup deadline. */ - pickupDeadline: Scalars['Int']['output']; - /** Physical store state. */ - state?: Maybe; - /** Physical store zip code. */ - zipCode?: Maybe; -}; - -/** Range of prices for this product. */ -export type PriceRange = { - /** The quantity of products in this range. */ - quantity: Scalars['Int']['output']; - /** The price range. */ - range?: Maybe; -}; - -export type PriceTable = { - /** The amount of discount in percentage. */ - discountPercentage: Scalars['Decimal']['output']; - /** The id of this price table. */ - id: Scalars['Long']['output']; - /** The listed regular price of this table. */ - listPrice?: Maybe; - /** The current working price of this table. */ - price: Scalars['Decimal']['output']; -}; - -/** The prices of the product. */ -export type Prices = { - /** The best installment option available. */ - bestInstallment?: Maybe; - /** The amount of discount in percentage. */ - discountPercentage: Scalars['Decimal']['output']; - /** Wether the current price is discounted. */ - discounted: Scalars['Boolean']['output']; - /** List of the possibles installment plans. */ - installmentPlans?: Maybe>>; - /** The listed regular price of the product. */ - listPrice?: Maybe; - /** The multiplication factor used for items that are sold by quantity. */ - multiplicationFactor: Scalars['Float']['output']; - /** The current working price. */ - price: Scalars['Decimal']['output']; - /** - * List of the product different price tables. - * - * Only returned when using the partnerAccessToken or public price tables. - */ - priceTables?: Maybe>>; - /** Lists the different price options when buying the item over the given quantity. */ - wholesalePrices?: Maybe>>; -}; - -/** Input to specify the range of prices to return. */ -export type PricesInput = { - /** The product discount must be greater than or equal to. */ - discount_gte?: InputMaybe; - /** The product discount must be lesser than or equal to. */ - discount_lte?: InputMaybe; - /** Return only products where the listed price is more than the price. */ - discounted?: InputMaybe; - /** The product price must be greater than or equal to. */ - price_gte?: InputMaybe; - /** The product price must be lesser than or equal to. */ - price_lte?: InputMaybe; -}; - -/** A product represents an item for sale in the store. */ -export type Product = Node & { - /** Check if the product can be added to cart directly from spot. */ - addToCartFromSpot?: Maybe; - /** The product url alias. */ - alias?: Maybe; - /** List of the product attributes. */ - attributes?: Maybe>>; - /** The product author. */ - author?: Maybe; - /** Field to check if the product is available in stock. */ - available?: Maybe; - /** The product average rating. From 0 to 5. */ - averageRating?: Maybe; - /** BuyBox informations. */ - buyBox?: Maybe; - /** The product collection. */ - collection?: Maybe; - /** The product condition. */ - condition?: Maybe; - /** The product creation date. */ - createdAt?: Maybe; - /** The product delivery deadline. */ - deadline?: Maybe; - /** Check if the product should be displayed. */ - display?: Maybe; - /** Check if the product should be displayed only for partners. */ - displayOnlyPartner?: Maybe; - /** Check if the product should be displayed on search. */ - displaySearch?: Maybe; - /** The product's unique EAN. */ - ean?: Maybe; - /** Check if the product offers free shipping. */ - freeShipping?: Maybe; - /** The product gender. */ - gender?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** List of the product images. */ - images?: Maybe>>; - /** List of the product insformations. */ - informations?: Maybe>>; - /** Check if its the main variant. */ - mainVariant?: Maybe; - /** The product maximum quantity for an order. */ - maximumOrderQuantity?: Maybe; - /** The product minimum quantity for an order. */ - minimumOrderQuantity?: Maybe; - /** Check if the product is a new release. */ - newRelease?: Maybe; - /** The number of votes that the average rating consists of. */ - numberOfVotes?: Maybe; - /** Parent product unique identifier. */ - parentId?: Maybe; - /** The product prices. */ - prices?: Maybe; - /** Summarized informations about the brand of the product. */ - productBrand?: Maybe; - /** Summarized informations about the categories of the product. */ - productCategories?: Maybe>>; - /** Product unique identifier. */ - productId?: Maybe; - /** The product name. */ - productName?: Maybe; - /** - * Summarized informations about the subscription of the product. - * @deprecated Use subscriptionGroups to get subscription information. - */ - productSubscription?: Maybe; - /** Variant unique identifier. */ - productVariantId?: Maybe; - /** List of promotions this product belongs to. */ - promotions?: Maybe>>; - /** The product publisher */ - publisher?: Maybe; - /** The product seller. */ - seller?: Maybe; - /** List of similar products. */ - similarProducts?: Maybe>>; - /** The product's unique SKU. */ - sku?: Maybe; - /** The values of the spot attribute. */ - spotAttributes?: Maybe>>; - /** The product spot information. */ - spotInformation?: Maybe; - /** Check if the product is on spotlight. */ - spotlight?: Maybe; - /** The available aggregated product stock (all variants) at the default distribution center. */ - stock?: Maybe; - /** List of the product stocks on different distribution centers. */ - stocks?: Maybe>>; - /** List of subscription groups this product belongs to. */ - subscriptionGroups?: Maybe>>; - /** Check if the product is a telesale. */ - telesales?: Maybe; - /** The product last update date. */ - updatedAt?: Maybe; - /** The product video url. */ - urlVideo?: Maybe; - /** The variant name. */ - variantName?: Maybe; - /** The available aggregated variant stock at the default distribution center. */ - variantStock?: Maybe; -}; - - -/** A product represents an item for sale in the store. */ -export type ProductImagesArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -export type ProductAggregations = { - /** List of product filters which can be used to filter subsequent queries. */ - filters?: Maybe>>; - /** Minimum price of the products. */ - maximumPrice: Scalars['Decimal']['output']; - /** Maximum price of the products. */ - minimumPrice: Scalars['Decimal']['output']; - /** List of price ranges for the selected products. */ - priceRanges?: Maybe>>; -}; - - -export type ProductAggregationsFiltersArgs = { - position?: InputMaybe; -}; - -/** The attributes of the product. */ -export type ProductAttribute = Node & { - /** The id of the attribute. */ - attributeId: Scalars['Long']['output']; - /** The display type of the attribute. */ - displayType?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The name of the attribute. */ - name?: Maybe; - /** The type of the attribute. */ - type?: Maybe; - /** The value of the attribute. */ - value?: Maybe; -}; - -export type ProductBrand = { - /** The hotsite url alias fot this brand. */ - alias?: Maybe; - /** The full brand logo URL. */ - fullUrlLogo?: Maybe; - /** The brand id. */ - id: Scalars['Long']['output']; - /** The url that contains the brand logo image. */ - logoUrl?: Maybe; - /** The name of the brand. */ - name?: Maybe; -}; - - -export type ProductBrandFullUrlLogoArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Information about the category of a product. */ -export type ProductCategory = { - /** Wether the category is currently active. */ - active: Scalars['Boolean']['output']; - /** The categories in google format. */ - googleCategories?: Maybe; - /** The category hierarchy. */ - hierarchy?: Maybe; - /** The id of the category. */ - id: Scalars['Int']['output']; - /** Wether this category is the main category for this product. */ - main: Scalars['Boolean']['output']; - /** The category name. */ - name?: Maybe; - /** The category hotsite url alias. */ - url?: Maybe; -}; - -export type ProductCollectionSegment = { - items?: Maybe>>; - page: Scalars['Int']['output']; - pageSize: Scalars['Int']['output']; - totalCount: Scalars['Int']['output']; -}; - -/** Filter product results based on giving attributes. */ -export type ProductExplicitFiltersInput = { - /** The set of attributes do filter. */ - attributes?: InputMaybe; - /** Choose if you want to retrieve only the available products in stock. */ - available?: InputMaybe; - /** The set of brand IDs which the result item brand ID must be included in. */ - brandId?: InputMaybe>; - /** The set of category IDs which the result item category ID must be included in. */ - categoryId?: InputMaybe>; - /** The set of EANs which the result item EAN must be included. */ - ean?: InputMaybe>>; - /** An external parent ID or a list of IDs to search for products with the external parent ID. */ - externalParentId?: InputMaybe>>; - /** Retrieve the product variant only if it contains images. */ - hasImages?: InputMaybe; - /** Ignores the display rules when searching for products. */ - ignoreDisplayRules?: InputMaybe; - /** Retrieve the product variant only if it is the main product variant. */ - mainVariant?: InputMaybe; - /** A parent ID or a list of IDs to search for products with the parent ID. */ - parentId?: InputMaybe>; - /** The set of prices to filter. */ - prices?: InputMaybe; - /** The product unique identifier (you may provide a list of IDs if needed). */ - productId?: InputMaybe>; - /** The product variant unique identifier (you may provide a list of IDs if needed). */ - productVariantId?: InputMaybe>; - /** A product ID or a list of IDs to search for other products with the same parent ID. */ - sameParentAs?: InputMaybe>; - /** The set of SKUs which the result item SKU must be included. */ - sku?: InputMaybe>>; - /** Show products with a quantity of available products in stock greater than or equal to the given number. */ - stock_gte?: InputMaybe; - /** Show products with a quantity of available products in stock less than or equal to the given number. */ - stock_lte?: InputMaybe; - /** The set of stocks to filter. */ - stocks?: InputMaybe; - /** Retrieve products which the last update date is greater than or equal to the given date. */ - updatedAt_gte?: InputMaybe; - /** Retrieve products which the last update date is less than or equal to the given date. */ - updatedAt_lte?: InputMaybe; -}; - -/** Custom attribute defined on store's admin may also be used as a filter. */ -export type ProductFilterInput = { - /** The attribute name. */ - field: Scalars['String']['input']; - /** The set of values which the result filter item value must be included in. */ - values: Array>; -}; - -/** Options available for the given product. */ -export type ProductOption = Node & { - /** A list of attributes available for the given product and its variants. */ - attributes?: Maybe>>; - /** A list of customizations available for the given products. */ - customizations?: Maybe>>; - /** The node unique identifier. */ - id?: Maybe; -}; - - -/** Options available for the given product. */ -export type ProductOptionAttributesArgs = { - filter?: InputMaybe>>; -}; - -/** A product price alert. */ -export type ProductPriceAlert = { - /** The alerted's email. */ - email?: Maybe; - /** The alerted's name. */ - name?: Maybe; - /** The price alert ID. */ - priceAlertId: Scalars['Long']['output']; - /** The product variant ID. */ - productVariantId: Scalars['Long']['output']; - /** The request date. */ - requestDate: Scalars['DateTime']['output']; - /** The target price. */ - targetPrice: Scalars['Decimal']['output']; -}; - -export type ProductRecommendationAlgorithm = - | 'DEFAULT'; - -/** Define the product attribute which the result set will be sorted on. */ -export type ProductSearchSortKeys = - /** The applied discount to the product variant price. */ - | 'DISCOUNT' - /** The product name. */ - | 'NAME' - /** The product variant price. */ - | 'PRICE' - /** Sort in a random way. */ - | 'RANDOM' - /** The date the product was released. */ - | 'RELEASE_DATE' - /** The relevance that the search engine gave to the possible result item based on own criteria. */ - | 'RELEVANCE' - /** The sales number on a period of time. */ - | 'SALES' - /** The quantity in stock of the product variant. */ - | 'STOCK'; - -/** Define the product attribute which the result set will be sorted on. */ -export type ProductSortKeys = - /** The applied discount to the product variant price. */ - | 'DISCOUNT' - /** The product name. */ - | 'NAME' - /** The product variant price. */ - | 'PRICE' - /** Sort in a random way. */ - | 'RANDOM' - /** The date the product was released. */ - | 'RELEASE_DATE' - /** The sales number on a period of time. */ - | 'SALES' - /** The quantity in stock of the product variant. */ - | 'STOCK'; - -export type ProductSubscription = { - /** The amount of discount if this product is sold as a subscription. */ - discount: Scalars['Decimal']['output']; - /** The price of the product when sold as a subscription. */ - price?: Maybe; - /** Wether this product is sold only as a subscrition. */ - subscriptionOnly: Scalars['Boolean']['output']; -}; - -/** Product variants that have the attribute. */ -export type ProductVariant = Node & { - /** The available stock at the default distribution center. */ - aggregatedStock?: Maybe; - /** The product alias. */ - alias?: Maybe; - /** List of the selected variant attributes. */ - attributes?: Maybe>>; - /** Field to check if the product is available in stock. */ - available?: Maybe; - /** The product's EAN. */ - ean?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** The product's images. */ - images?: Maybe>>; - /** The seller's product offers. */ - offers?: Maybe>>; - /** The product prices. */ - prices?: Maybe; - /** Product unique identifier. */ - productId?: Maybe; - /** Variant unique identifier. */ - productVariantId?: Maybe; - /** Product variant name. */ - productVariantName?: Maybe; - /** List of promotions this product variant belongs to. */ - promotions?: Maybe>>; - /** The product's unique SKU. */ - sku?: Maybe; - /** The available stock at the default distribution center. */ - stock?: Maybe; -}; - - -/** Product variants that have the attribute. */ -export type ProductVariantImagesArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** A connection to a list of items. */ -export type ProductsConnection = { - /** A list of edges. */ - edges?: Maybe>; - /** A flattened list of the nodes. */ - nodes?: Maybe>>; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - totalCount: Scalars['Int']['output']; -}; - -/** An edge in a connection. */ -export type ProductsEdge = { - /** A cursor for use in pagination. */ - cursor: Scalars['String']['output']; - /** The item at the end of the edge. */ - node?: Maybe; -}; - -/** Information about promotions of a product. */ -export type Promotion = { - /** The promotion html content. */ - content?: Maybe; - /** Where the promotion is shown (spot, product page, etc..). */ - disclosureType?: Maybe; - /** The end date for the promotion. */ - endDate: Scalars['DateTime']['output']; - /** The stamp URL of the promotion. */ - fullStampUrl?: Maybe; - /** The promotion id. */ - id: Scalars['Long']['output']; - /** The stamp of the promotion. */ - stamp?: Maybe; - /** The promotion title. */ - title?: Maybe; -}; - - -/** Information about promotions of a product. */ -export type PromotionFullStampUrlArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -export type QueryRoot = { - /** Get informations about an address. */ - address?: Maybe; - /** Get query completion suggestion. */ - autocomplete?: Maybe; - /** List of banners. */ - banners?: Maybe; - /** List of brands */ - brands?: Maybe; - /** Retrieve a buylist by the given id. */ - buyList?: Maybe; - /** Prices informations */ - calculatePrices?: Maybe; - /** List of categories. */ - categories?: Maybe; - /** Get info from the checkout cart corresponding to the given ID. */ - checkout?: Maybe; - /** Retrieve essential checkout details for a specific cart. */ - checkoutLite?: Maybe; - /** List of contents. */ - contents?: Maybe; - /** Get informations about a customer from the store. */ - customer?: Maybe; - /** Get informations about a customer access token. */ - customerAccessTokenDetails?: Maybe; - /** Retrieve an event list by the token. */ - eventList?: Maybe; - /** Retrieves event types */ - eventListType?: Maybe>>; - /** Retrieves a list of store events. */ - eventLists?: Maybe>>; - /** Retrieve a single hotsite. A hotsite consists of products, banners and contents. */ - hotsite?: Maybe; - /** List of the shop's hotsites. A hotsite consists of products, banners and contents. */ - hotsites?: Maybe; - /** Get information group fields. */ - informationGroupFields?: Maybe>>; - /** List of menu groups. */ - menuGroups?: Maybe>>; - /** - * Get newsletter information group fields. - * @deprecated Use the informationGroupFields - */ - newsletterInformationGroupFields?: Maybe>>; - node?: Maybe; - nodes?: Maybe>>; - /** Get single partner. */ - partner?: Maybe; - /** Get partner by region. */ - partnerByRegion?: Maybe; - /** List of partners. */ - partners?: Maybe; - /** Returns the available payment methods for a given cart ID */ - paymentMethods?: Maybe>>; - /** Retrieve a product by the given id. */ - product?: Maybe; - /** - * Options available for the given product. - * @deprecated Use the product query. - */ - productOptions?: Maybe; - /** Retrieve a list of recommended products by product id. */ - productRecommendations?: Maybe>>; - /** Retrieve a list of products by specific filters. */ - products?: Maybe; - /** Retrieve a list of scripts. */ - scripts?: Maybe>>; - /** Search products with cursor pagination. */ - search?: Maybe; - /** Get the shipping quote groups by providing CEP and checkout or products. */ - shippingQuoteGroups?: Maybe>>; - /** Get the shipping quotes by providing CEP and checkout or product identifier. */ - shippingQuotes?: Maybe>>; - /** Store informations */ - shop?: Maybe; - /** Returns a single store setting */ - shopSetting?: Maybe; - /** Store settings */ - shopSettings?: Maybe>>; - /** Get the URI kind. */ - uri?: Maybe; -}; - - -export type QueryRootAddressArgs = { - cep?: InputMaybe; -}; - - -export type QueryRootAutocompleteArgs = { - limit?: InputMaybe; - partnerAccessToken?: InputMaybe; - query?: InputMaybe; -}; - - -export type QueryRootBannersArgs = { - after?: InputMaybe; - bannerIds?: InputMaybe>; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: BannerSortKeys; -}; - - -export type QueryRootBrandsArgs = { - after?: InputMaybe; - before?: InputMaybe; - brandInput?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: BrandSortKeys; -}; - - -export type QueryRootBuyListArgs = { - id: Scalars['Long']['input']; - partnerAccessToken?: InputMaybe; -}; - - -export type QueryRootCalculatePricesArgs = { - partnerAccessToken?: InputMaybe; - products: Array>; -}; - - -export type QueryRootCategoriesArgs = { - after?: InputMaybe; - before?: InputMaybe; - categoryIds?: InputMaybe>; - first?: InputMaybe; - last?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: CategorySortKeys; - urls?: InputMaybe>>; -}; - - -export type QueryRootCheckoutArgs = { - checkoutId: Scalars['String']['input']; - customerAccessToken?: InputMaybe; -}; - - -export type QueryRootCheckoutLiteArgs = { - checkoutId: Scalars['Uuid']['input']; -}; - - -export type QueryRootContentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - contentIds?: InputMaybe>; - first?: InputMaybe; - last?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: ContentSortKeys; -}; - - -export type QueryRootCustomerArgs = { - customerAccessToken?: InputMaybe; -}; - - -export type QueryRootCustomerAccessTokenDetailsArgs = { - customerAccessToken?: InputMaybe; -}; - - -export type QueryRootEventListArgs = { - eventListToken?: InputMaybe; -}; - - -export type QueryRootEventListsArgs = { - eventDate?: InputMaybe; - eventName?: InputMaybe; - eventType?: InputMaybe; -}; - - -export type QueryRootHotsiteArgs = { - hotsiteId?: InputMaybe; - partnerAccessToken?: InputMaybe; - url?: InputMaybe; -}; - - -export type QueryRootHotsitesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - hotsiteIds?: InputMaybe>; - last?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: HotsiteSortKeys; -}; - - -export type QueryRootInformationGroupFieldsArgs = { - type: EnumInformationGroup; -}; - - -export type QueryRootMenuGroupsArgs = { - partnerAccessToken?: InputMaybe; - position?: InputMaybe; - url: Scalars['String']['input']; -}; - - -export type QueryRootNodeArgs = { - id: Scalars['ID']['input']; -}; - - -export type QueryRootNodesArgs = { - ids: Array; -}; - - -export type QueryRootPartnerArgs = { - partnerAccessToken: Scalars['String']['input']; -}; - - -export type QueryRootPartnerByRegionArgs = { - input: PartnerByRegionInput; -}; - - -export type QueryRootPartnersArgs = { - after?: InputMaybe; - alias?: InputMaybe>>; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - names?: InputMaybe>>; - priceTableIds?: InputMaybe>; - sortDirection?: SortDirection; - sortKey?: PartnerSortKeys; -}; - - -export type QueryRootPaymentMethodsArgs = { - checkoutId: Scalars['Uuid']['input']; -}; - - -export type QueryRootProductArgs = { - partnerAccessToken?: InputMaybe; - productId: Scalars['Long']['input']; -}; - - -export type QueryRootProductOptionsArgs = { - productId: Scalars['Long']['input']; -}; - - -export type QueryRootProductRecommendationsArgs = { - algorithm?: ProductRecommendationAlgorithm; - partnerAccessToken?: InputMaybe; - productId: Scalars['Long']['input']; - quantity?: Scalars['Int']['input']; -}; - - -export type QueryRootProductsArgs = { - after?: InputMaybe; - before?: InputMaybe; - filters: ProductExplicitFiltersInput; - first?: InputMaybe; - last?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: SortDirection; - sortKey?: ProductSortKeys; -}; - - -export type QueryRootScriptsArgs = { - name?: InputMaybe; - pageType?: InputMaybe>; - position?: InputMaybe; - url?: InputMaybe; -}; - - -export type QueryRootSearchArgs = { - autoSecondSearch?: Scalars['Boolean']['input']; - operation?: Operation; - partnerAccessToken?: InputMaybe; - query?: InputMaybe; -}; - - -export type QueryRootShippingQuoteGroupsArgs = { - cep?: InputMaybe; - checkoutId: Scalars['Uuid']['input']; - useSelectedAddress?: InputMaybe; -}; - - -export type QueryRootShippingQuotesArgs = { - cep?: InputMaybe; - checkoutId?: InputMaybe; - productVariantId?: InputMaybe; - products?: InputMaybe>>; - quantity?: InputMaybe; - useSelectedAddress?: InputMaybe; -}; - - -export type QueryRootShopSettingArgs = { - settingName?: InputMaybe; -}; - - -export type QueryRootShopSettingsArgs = { - settingNames?: InputMaybe>>; -}; - - -export type QueryRootUriArgs = { - partnerAccessToken?: InputMaybe; - url: Scalars['String']['input']; -}; - -export type Question = { - answers?: Maybe>>; - question?: Maybe; - questionId?: Maybe; -}; - -/** Represents the product to be removed from the subscription. */ -export type RemoveSubscriptionProductInput = { - /** The Id of the product within the subscription to be removed. */ - subscriptionProductId: Scalars['Long']['input']; -}; - -/** Back in stock registration input parameters. */ -export type RestockAlertInput = { - /** Email to be notified. */ - email: Scalars['String']['input']; - /** Name of the person to be notified. */ - name?: InputMaybe; - /** The product variant id of the product to be notified. */ - productVariantId: Scalars['Long']['input']; -}; - -export type RestockAlertNode = { - /** Email to be notified. */ - email?: Maybe; - /** Name of the person to be notified. */ - name?: Maybe; - /** The product variant id. */ - productVariantId: Scalars['Long']['output']; - /** Date the alert was requested. */ - requestDate: Scalars['DateTime']['output']; -}; - -/** A product review written by a customer. */ -export type Review = { - /** The reviewer name. */ - customer?: Maybe; - /** The reviewer e-mail. */ - email?: Maybe; - /** The review rating. */ - rating: Scalars['Int']['output']; - /** The review content. */ - review?: Maybe; - /** The review date. */ - reviewDate: Scalars['DateTime']['output']; -}; - -/** Review input parameters. */ -export type ReviewCreateInput = { - /** The reviewer's email. */ - email: Scalars['String']['input']; - /** The reviewer's name. */ - name: Scalars['String']['input']; - /** The product variant id to add the review to. */ - productVariantId: Scalars['Long']['input']; - /** The review rating. */ - rating: Scalars['Int']['input']; - /** The google recaptcha token. */ - recaptchaToken?: InputMaybe; - /** The review content. */ - review: Scalars['String']['input']; -}; - -/** Entity SEO information. */ -export type Seo = { - /** Content of SEO. */ - content?: Maybe; - /** Equivalent SEO type for HTTP. */ - httpEquiv?: Maybe; - /** Name of SEO. */ - name?: Maybe; - /** Scheme for SEO. */ - scheme?: Maybe; - /** Type of SEO. */ - type?: Maybe; -}; - -/** Returns the scripts registered in the script manager. */ -export type Script = { - /** The script content. */ - content?: Maybe; - /** The script name. */ - name?: Maybe; - /** The script page type. */ - pageType: ScriptPageType; - /** The script position. */ - position: ScriptPosition; - /** The script priority. */ - priority: Scalars['Int']['output']; -}; - -export type ScriptPageType = - | 'ALL' - | 'BRAND' - | 'CATEGORY' - | 'HOME' - | 'PRODUCT' - | 'SEARCH'; - -export type ScriptPosition = - | 'BODY_END' - | 'BODY_START' - | 'FOOTER_END' - | 'FOOTER_START' - | 'HEADER_END' - | 'HEADER_START'; - -/** Search for relevant products to the searched term. */ -export type Search = { - /** Aggregations from the products. */ - aggregations?: Maybe; - /** A list of banners displayed in search pages. */ - banners?: Maybe>>; - /** List of search breadcrumbs. */ - breadcrumbs?: Maybe>>; - /** A list of contents displayed in search pages. */ - contents?: Maybe>>; - /** Information about forbidden term. */ - forbiddenTerm?: Maybe; - /** The quantity of products displayed per page. */ - pageSize: Scalars['Int']['output']; - /** A cursor based paginated list of products from the search. */ - products?: Maybe; - /** An offset based paginated list of products from the search. */ - productsByOffset?: Maybe; - /** Redirection url in case a term in the search triggers a redirect. */ - redirectUrl?: Maybe; - /** Time taken to perform the search. */ - searchTime?: Maybe; -}; - - -/** Search for relevant products to the searched term. */ -export type SearchProductsArgs = { - after?: InputMaybe; - before?: InputMaybe; - filters?: InputMaybe>>; - first?: InputMaybe; - last?: InputMaybe; - maximumPrice?: InputMaybe; - minimumPrice?: InputMaybe; - onlyMainVariant?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}; - - -/** Search for relevant products to the searched term. */ -export type SearchProductsByOffsetArgs = { - filters?: InputMaybe>>; - limit?: InputMaybe; - maximumPrice?: InputMaybe; - minimumPrice?: InputMaybe; - offset?: InputMaybe; - onlyMainVariant?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}; - -/** Aggregated filters of a list of products. */ -export type SearchFilter = { - /** The name of the field. */ - field?: Maybe; - /** The origin of the field. */ - origin?: Maybe; - /** List of the values of the field. */ - values?: Maybe>>; -}; - -/** Details of a filter value. */ -export type SearchFilterItem = { - /** The name of the value. */ - name?: Maybe; - /** The quantity of product with this value. */ - quantity: Scalars['Int']['output']; -}; - -/** The response data */ -export type SearchRecord = { - /** The date time of the processed request */ - date: Scalars['DateTime']['output']; - /** If the record was successful */ - isSuccess: Scalars['Boolean']['output']; - /** The searched query */ - query?: Maybe; -}; - -/** The information to be saved for reports. */ -export type SearchRecordInput = { - /** The search operation (And, Or) */ - operation?: InputMaybe; - /** The current page */ - page: Scalars['Int']['input']; - /** How many products show in page */ - pageSize: Scalars['Int']['input']; - /** The client search page url */ - pageUrl?: InputMaybe; - /** The user search query */ - query?: InputMaybe; - /** How many products the search returned */ - totalResults: Scalars['Int']['input']; -}; - -/** The selected payment method details. */ -export type SelectedPaymentMethod = { - /** The payment html. */ - html?: Maybe; - /** The unique identifier for the selected payment method. */ - id: Scalars['Uuid']['output']; - /** The list of installments associated with the selected payment method. */ - installments?: Maybe>>; - /** The payment Method Id. */ - paymentMethodId?: Maybe; - /** Payment related scripts. */ - scripts?: Maybe>>; - /** The selected installment. */ - selectedInstallment?: Maybe; - /** The suggested cards. */ - suggestedCards?: Maybe>>; -}; - -/** Details of an installment of the selected payment method. */ -export type SelectedPaymentMethodInstallment = { - /** The adjustment value applied to the installment. */ - adjustment: Scalars['Float']['output']; - /** The installment number. */ - number: Scalars['Int']['output']; - /** The total value of the installment. */ - total: Scalars['Float']['output']; - /** The individual value of each installment. */ - value: Scalars['Float']['output']; -}; - -/** Seller informations. */ -export type Seller = { - /** Seller name */ - name?: Maybe; -}; - -export type SellerInstallment = { - /** Wether the installment has discount. */ - discount: Scalars['Boolean']['output']; - /** Wether the installment has fees. */ - fees: Scalars['Boolean']['output']; - /** The number of installments. */ - number: Scalars['Int']['output']; - /** The value of the installment. */ - value: Scalars['Decimal']['output']; -}; - -export type SellerInstallmentPlan = { - /** The custom display name of this installment plan. */ - displayName?: Maybe; - /** List of the installments. */ - installments?: Maybe>>; -}; - -/** The seller's product offer */ -export type SellerOffer = { - name?: Maybe; - /** The product prices. */ - prices?: Maybe; - /** Variant unique identifier. */ - productVariantId?: Maybe; -}; - -/** The prices of the product. */ -export type SellerPrices = { - /** List of the possibles installment plans. */ - installmentPlans?: Maybe>>; - /** The listed regular price of the product. */ - listPrice?: Maybe; - /** The current working price. */ - price?: Maybe; -}; - -export type ShippingNode = { - /** The shipping deadline. */ - deadline: Scalars['Int']['output']; - /** The shipping deadline in hours. */ - deadlineInHours?: Maybe; - /** The delivery schedule detail. */ - deliverySchedule?: Maybe; - /** The shipping name. */ - name?: Maybe; - /** The shipping quote unique identifier. */ - shippingQuoteId: Scalars['Uuid']['output']; - /** The shipping type. */ - type?: Maybe; - /** The shipping value. */ - value: Scalars['Float']['output']; -}; - -/** The product informations related to the shipping. */ -export type ShippingProduct = { - /** The product unique identifier. */ - productVariantId: Scalars['Int']['output']; - /** The shipping value related to the product. */ - value: Scalars['Float']['output']; -}; - -/** A shipping quote. */ -export type ShippingQuote = Node & { - /** The shipping deadline. */ - deadline: Scalars['Int']['output']; - /** The shipping deadline in hours. */ - deadlineInHours?: Maybe; - /** The available time slots for scheduling the delivery of the shipping quote. */ - deliverySchedules?: Maybe>>; - /** The node unique identifier. */ - id?: Maybe; - /** The shipping name. */ - name?: Maybe; - /** The products related to the shipping. */ - products?: Maybe>>; - /** The shipping quote unique identifier. */ - shippingQuoteId: Scalars['Uuid']['output']; - /** The shipping type. */ - type?: Maybe; - /** The shipping value. */ - value: Scalars['Float']['output']; -}; - -/** A shipping quote group. */ -export type ShippingQuoteGroup = { - /** The distribution center. */ - distributionCenter?: Maybe; - /** The products related to the shipping quote group. */ - products?: Maybe>>; - /** Shipping quotes to group. */ - shippingQuotes?: Maybe>>; -}; - -/** The product informations related to the shipping. */ -export type ShippingQuoteGroupProduct = { - /** The product unique identifier. */ - productVariantId: Scalars['Int']['output']; -}; - -/** Informations about the store. */ -export type Shop = { - /** Checkout URL */ - checkoutUrl?: Maybe; - /** Store main URL */ - mainUrl?: Maybe; - /** Mobile checkout URL */ - mobileCheckoutUrl?: Maybe; - /** Mobile URL */ - mobileUrl?: Maybe; - /** Store modified name */ - modifiedName?: Maybe; - /** Store name */ - name?: Maybe; - /** Physical stores */ - physicalStores?: Maybe>>; - /** The URL to obtain the SitemapImagens.xml file */ - sitemapImagesUrl?: Maybe; - /** The URL to obtain the Sitemap.xml file */ - sitemapUrl?: Maybe; -}; - -/** Store setting. */ -export type ShopSetting = { - /** Setting name */ - name?: Maybe; - /** Setting value */ - value?: Maybe; -}; - -/** Information about a similar product. */ -export type SimilarProduct = { - /** The url alias of this similar product. */ - alias?: Maybe; - /** The file name of the similar product image. */ - image?: Maybe; - /** The URL of the similar product image. */ - imageUrl?: Maybe; - /** The name of the similar product. */ - name?: Maybe; -}; - - -/** Information about a similar product. */ -export type SimilarProductImageUrlArgs = { - h?: InputMaybe; - w?: InputMaybe; -}; - -export type SimpleLogin = { - /** The customer access token */ - customerAccessToken?: Maybe; - /** The simple login question to answer */ - question?: Maybe; - /** The simple login type */ - type: SimpleLoginType; -}; - -/** The simple login type. */ -export type SimpleLoginType = - | 'NEW' - | 'SIMPLE'; - -/** A hotsite is a group of products used to organize them or to make them easier to browse. */ -export type SingleHotsite = Node & { - /** Aggregations from the products. */ - aggregations?: Maybe; - /** A list of banners associated with the hotsite. */ - banners?: Maybe>>; - /** A list of breadcrumbs for the hotsite. */ - breadcrumbs?: Maybe>>; - /** A list of contents associated with the hotsite. */ - contents?: Maybe>>; - /** The hotsite will be displayed until this date. */ - endDate?: Maybe; - /** Expression used to associate products to the hotsite. */ - expression?: Maybe; - /** Hotsite unique identifier. */ - hotsiteId: Scalars['Long']['output']; - /** The node unique identifier. */ - id?: Maybe; - /** The hotsite's name. */ - name?: Maybe; - /** Set the quantity of products displayed per page. */ - pageSize: Scalars['Int']['output']; - /** A list of products associated with the hotsite. Cursor pagination. */ - products?: Maybe; - /** A list of products associated with the hotsite. Offset pagination. */ - productsByOffset?: Maybe; - /** A list of SEO contents associated with the hotsite. */ - seo?: Maybe>>; - /** Sorting information to be used by default on the hotsite. */ - sorting?: Maybe; - /** The hotsite will be displayed from this date. */ - startDate?: Maybe; - /** The subtype of the hotsite. */ - subtype?: Maybe; - /** The template used for the hotsite. */ - template?: Maybe; - /** The hotsite's URL. */ - url?: Maybe; -}; - - -/** A hotsite is a group of products used to organize them or to make them easier to browse. */ -export type SingleHotsiteProductsArgs = { - after?: InputMaybe; - before?: InputMaybe; - filters?: InputMaybe>>; - first?: InputMaybe; - last?: InputMaybe; - maximumPrice?: InputMaybe; - minimumPrice?: InputMaybe; - onlyMainVariant?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}; - - -/** A hotsite is a group of products used to organize them or to make them easier to browse. */ -export type SingleHotsiteProductsByOffsetArgs = { - filters?: InputMaybe>>; - limit?: InputMaybe; - maximumPrice?: InputMaybe; - minimumPrice?: InputMaybe; - offset?: InputMaybe; - onlyMainVariant?: InputMaybe; - partnerAccessToken?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}; - -/** A product represents an item for sale in the store. */ -export type SingleProduct = Node & { - /** Check if the product can be added to cart directly from spot. */ - addToCartFromSpot?: Maybe; - /** The product url alias. */ - alias?: Maybe; - /** Information about the possible selection attributes. */ - attributeSelections?: Maybe; - /** List of the product attributes. */ - attributes?: Maybe>>; - /** The product author. */ - author?: Maybe; - /** Field to check if the product is available in stock. */ - available?: Maybe; - /** The product average rating. From 0 to 5. */ - averageRating?: Maybe; - /** List of product breadcrumbs. */ - breadcrumbs?: Maybe>>; - /** BuyBox informations. */ - buyBox?: Maybe; - /** Buy together products. */ - buyTogether?: Maybe>>; - /** Buy together groups products. */ - buyTogetherGroups?: Maybe>>; - /** The product collection. */ - collection?: Maybe; - /** The product condition. */ - condition?: Maybe; - /** The product creation date. */ - createdAt?: Maybe; - /** A list of customizations available for the given products. */ - customizations?: Maybe>>; - /** The product delivery deadline. */ - deadline?: Maybe; - /** Product deadline alert informations. */ - deadlineAlert?: Maybe; - /** Check if the product should be displayed. */ - display?: Maybe; - /** Check if the product should be displayed only for partners. */ - displayOnlyPartner?: Maybe; - /** Check if the product should be displayed on search. */ - displaySearch?: Maybe; - /** The product's unique EAN. */ - ean?: Maybe; - /** Check if the product offers free shipping. */ - freeShipping?: Maybe; - /** The product gender. */ - gender?: Maybe; - /** The node unique identifier. */ - id?: Maybe; - /** List of the product images. */ - images?: Maybe>>; - /** List of the product insformations. */ - informations?: Maybe>>; - /** Check if its the main variant. */ - mainVariant?: Maybe; - /** The product maximum quantity for an order. */ - maximumOrderQuantity?: Maybe; - /** The product minimum quantity for an order. */ - minimumOrderQuantity?: Maybe; - /** Check if the product is a new release. */ - newRelease?: Maybe; - /** The number of votes that the average rating consists of. */ - numberOfVotes?: Maybe; - /** Product parallel options information. */ - parallelOptions?: Maybe>>; - /** Parent product unique identifier. */ - parentId?: Maybe; - /** The product prices. */ - prices?: Maybe; - /** Summarized informations about the brand of the product. */ - productBrand?: Maybe; - /** Summarized informations about the categories of the product. */ - productCategories?: Maybe>>; - /** Product unique identifier. */ - productId?: Maybe; - /** The product name. */ - productName?: Maybe; - /** - * Summarized informations about the subscription of the product. - * @deprecated Use subscriptionGroups to get subscription information. - */ - productSubscription?: Maybe; - /** Variant unique identifier. */ - productVariantId?: Maybe; - /** List of promotions this product belongs to. */ - promotions?: Maybe>>; - /** The product publisher */ - publisher?: Maybe; - /** List of customer reviews for this product. */ - reviews?: Maybe>>; - /** The product seller. */ - seller?: Maybe; - /** Product SEO informations. */ - seo?: Maybe>>; - /** List of similar products. */ - similarProducts?: Maybe>>; - /** The product's unique SKU. */ - sku?: Maybe; - /** The values of the spot attribute. */ - spotAttributes?: Maybe>>; - /** The product spot information. */ - spotInformation?: Maybe; - /** Check if the product is on spotlight. */ - spotlight?: Maybe; - /** The available aggregated product stock (all variants) at the default distribution center. */ - stock?: Maybe; - /** List of the product stocks on different distribution centers. */ - stocks?: Maybe>>; - /** List of subscription groups this product belongs to. */ - subscriptionGroups?: Maybe>>; - /** Check if the product is a telesale. */ - telesales?: Maybe; - /** The product last update date. */ - updatedAt?: Maybe; - /** The product video url. */ - urlVideo?: Maybe; - /** The variant name. */ - variantName?: Maybe; - /** The available aggregated variant stock at the default distribution center. */ - variantStock?: Maybe; -}; - - -/** A product represents an item for sale in the store. */ -export type SingleProductAttributeSelectionsArgs = { - selected?: InputMaybe>>; -}; - - -/** A product represents an item for sale in the store. */ -export type SingleProductImagesArgs = { - height?: InputMaybe; - width?: InputMaybe; -}; - -/** Define the sort orientation of the result set. */ -export type SortDirection = - /** The results will be sorted in an ascending order. */ - | 'ASC' - /** The results will be sorted in an descending order. */ - | 'DESC'; - -/** The subscription status to update. */ -export type Status = - | 'ACTIVE' - | 'CANCELED' - | 'PAUSED'; - -/** Information about a product stock in a particular distribution center. */ -export type Stock = { - /** The id of the distribution center. */ - id: Scalars['Long']['output']; - /** The number of physical items in stock at this DC. */ - items: Scalars['Long']['output']; - /** The name of the distribution center. */ - name?: Maybe; -}; - -/** Input to specify the range of stocks, distribution center ID, and distribution center name to return. */ -export type StocksInput = { - /** The distribution center Ids to match. */ - dcId?: InputMaybe>; - /** The distribution center names to match. */ - dcName?: InputMaybe>>; - /** The product stock must be greater than or equal to. */ - stock_gte?: InputMaybe; - /** The product stock must be lesser than or equal to. */ - stock_lte?: InputMaybe; -}; - -export type SubscriptionGroup = { - /** The recurring types for this subscription group. */ - recurringTypes?: Maybe>>; - /** The status name of the group. */ - status?: Maybe; - /** The status id of the group. */ - statusId: Scalars['Int']['output']; - /** The subscription group id. */ - subscriptionGroupId: Scalars['Long']['output']; - /** Wether the product is only avaible for subscription. */ - subscriptionOnly: Scalars['Boolean']['output']; -}; - -/** Represents the product to be applied to the subscription. */ -export type SubscriptionProductsInput = { - /** The variant Id of the product. */ - productVariantId: Scalars['Long']['input']; - /** The quantity of the product. */ - quantity: Scalars['Int']['input']; -}; - -export type SubscriptionRecurringType = { - /** The number of days of the recurring type. */ - days: Scalars['Int']['output']; - /** The recurring type display name. */ - name?: Maybe; - /** The recurring type id. */ - recurringTypeId: Scalars['Long']['output']; -}; - -export type SuggestedCard = { - /** Credit card brand. */ - brand?: Maybe; - /** Credit card key. */ - key?: Maybe; - /** Customer name on credit card. */ - name?: Maybe; - /** Credit card number. */ - number?: Maybe; -}; - -/** Represents the Type of Customer's Checking Account. */ -export type TypeCheckingAccount = - /** Credit */ - | 'Credit' - /** Debit */ - | 'Debit'; - -export type UpdateCustomerAddressInput = { - address?: InputMaybe; - address2?: InputMaybe; - addressDetails?: InputMaybe; - addressNumber?: InputMaybe; - cep?: InputMaybe; - city?: InputMaybe; - country?: InputMaybe; - email?: InputMaybe; - name?: InputMaybe; - neighborhood?: InputMaybe; - phone?: InputMaybe; - referencePoint?: InputMaybe; - state?: InputMaybe; - street?: InputMaybe; -}; - -/** Node of URI Kind. */ -export type Uri = { - /** The origin of the hotsite. */ - hotsiteSubtype?: Maybe; - /** Path kind. */ - kind: UriKind; - /** The partner subtype. */ - partnerSubtype?: Maybe; - /** Product alias. */ - productAlias?: Maybe; - /** Product categories IDs. */ - productCategoriesIds?: Maybe>; - /** Redirect status code. */ - redirectCode?: Maybe; - /** Url to redirect. */ - redirectUrl?: Maybe; -}; - -export type UriKind = - | 'BUY_LIST' - | 'HOTSITE' - | 'NOT_FOUND' - | 'PARTNER' - | 'PRODUCT' - | 'REDIRECT'; - -export type WholesalePrices = { - /** The wholesale price. */ - price: Scalars['Decimal']['output']; - /** The minimum quantity required for the wholesale price to be applied */ - quantity: Scalars['Int']['output']; -}; - -/** A representation of available time slots for scheduling a delivery. */ -export type DeliverySchedule = { - /** The date of the delivery schedule. */ - date: Scalars['DateTime']['output']; - /** The list of time periods available for scheduling a delivery. */ - periods?: Maybe>>; -}; - -/** Informations about a forbidden search term. */ -export type ForbiddenTerm = { - /** The suggested search term instead. */ - suggested?: Maybe; - /** The text to display about the term. */ - text?: Maybe; -}; - -export type Order = { - /** Checking account value used for the order. */ - checkingAccount: Scalars['Decimal']['output']; - /** The coupon for discounts. */ - coupon?: Maybe; - /** The date when te order was placed. */ - date: Scalars['DateTime']['output']; - /** The address where the order will be delivered. */ - deliveryAddress?: Maybe; - /** Order discount amount, if any. */ - discount: Scalars['Decimal']['output']; - /** Order interest fee, if any. */ - interestFee: Scalars['Decimal']['output']; - /** Information about order invoices. */ - invoices?: Maybe>>; - /** Information about order notes. */ - notes?: Maybe>>; - /** Order unique identifier. */ - orderId: Scalars['Long']['output']; - /** The date when the order was payed. */ - paymentDate?: Maybe; - /** Information about payments. */ - payments?: Maybe>>; - /** Products belonging to the order. */ - products?: Maybe>>; - /** List of promotions applied to the order. */ - promotions?: Maybe>; - /** The shipping fee. */ - shippingFee: Scalars['Decimal']['output']; - /** Information about order shippings. */ - shippings?: Maybe>>; - /** The order current status. */ - status?: Maybe; - /** List of the order status history. */ - statusHistory?: Maybe>>; - /** List of order subscriptions. */ - subscriptions?: Maybe>>; - /** Order subtotal value. */ - subtotal: Scalars['Decimal']['output']; - /** Order total value. */ - total: Scalars['Decimal']['output']; - /** Information about order trackings. */ - trackings?: Maybe>>; -}; - -export type PaymentMethod = Node & { - /** The node unique identifier. */ - id?: Maybe; - /** The url link that displays for the payment. */ - imageUrl?: Maybe; - /** The name of the payment method. */ - name?: Maybe; -}; - -/** Represents a time period available for scheduling a delivery. */ -export type Period = { - /** The end time of the time period. */ - end?: Maybe; - /** The unique identifier of the time period. */ - id: Scalars['Long']['output']; - /** The start time of the time period. */ - start?: Maybe; -}; - -/** The list of products to quote shipping. */ -export type ProductsInput = { - productVariantId: Scalars['Long']['input']; - quantity: Scalars['Int']['input']; -}; - -export type Wishlist = { - /** Wishlist products. */ - products?: Maybe>>; -}; - -export type CheckoutFragment = { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null }; - -export type ProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; - -export type ProductVariantFragment = { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; - -export type SingleProductPartFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; - -export type SingleProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, buyTogether?: Array<{ productId?: any | null } | null> | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; - -export type RestockAlertNodeFragment = { email?: string | null, name?: string | null, productVariantId: any, requestDate: any }; - -export type NewsletterNodeFragment = { email?: string | null, name?: string | null, createDate: any, updateDate?: any | null }; - -export type ShippingQuoteFragment = { id?: string | null, type?: string | null, name?: string | null, value: number, deadline: number, shippingQuoteId: any, deliverySchedules?: Array<{ date: any, periods?: Array<{ end?: string | null, id: any, start?: string | null } | null> | null } | null> | null, products?: Array<{ productVariantId: number, value: number } | null> | null }; - -export type CustomerFragment = { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null }; - -export type WishlistReducedProductFragment = { productId?: any | null, productName?: string | null }; - -export type GetProductQueryVariables = Exact<{ - productId: Scalars['Long']['input']; -}>; - - -export type GetProductQuery = { product?: { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, buyTogether?: Array<{ productId?: any | null } | null> | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null }; - -export type GetCartQueryVariables = Exact<{ - checkoutId: Scalars['String']['input']; -}>; - - -export type GetCartQuery = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; - -export type CreateCartMutationVariables = Exact<{ [key: string]: never; }>; - - -export type CreateCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; - -export type GetProductsQueryVariables = Exact<{ - filters: ProductExplicitFiltersInput; - first: Scalars['Int']['input']; - sortDirection: SortDirection; - sortKey?: InputMaybe; - after?: InputMaybe; -}>; - - -export type GetProductsQuery = { products?: { totalCount: number, nodes?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null, pageInfo: { hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null } } | null }; - -export type SearchQueryVariables = Exact<{ - operation: Operation; - query?: InputMaybe; - onlyMainVariant?: InputMaybe; - minimumPrice?: InputMaybe; - maximumPrice?: InputMaybe; - limit?: InputMaybe; - offset?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; - filters?: InputMaybe> | InputMaybe>; -}>; - - -export type SearchQuery = { result?: { pageSize: number, redirectUrl?: string | null, searchTime?: string | null, aggregations?: { maximumPrice: any, minimumPrice: any, priceRanges?: Array<{ quantity: number, range?: string | null } | null> | null, filters?: Array<{ field?: string | null, origin?: string | null, values?: Array<{ quantity: number, name?: string | null } | null> | null } | null> | null } | null, breadcrumbs?: Array<{ link?: string | null, text?: string | null } | null> | null, forbiddenTerm?: { text?: string | null, suggested?: string | null } | null, productsByOffset?: { page: number, pageSize: number, totalCount: number, items?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null } | null }; - -export type AddCouponMutationVariables = Exact<{ - checkoutId: Scalars['Uuid']['input']; - coupon: Scalars['String']['input']; -}>; - - -export type AddCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; - -export type AddItemToCartMutationVariables = Exact<{ - input: CheckoutProductInput; -}>; - - -export type AddItemToCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; - -export type RemoveCouponMutationVariables = Exact<{ - checkoutId: Scalars['Uuid']['input']; -}>; - - -export type RemoveCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; - -export type RemoveItemFromCartMutationVariables = Exact<{ - input: CheckoutProductInput; -}>; - - -export type RemoveItemFromCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null } | null> | null } | null }; - -export type ProductRestockAlertMutationVariables = Exact<{ - input: RestockAlertInput; -}>; - - -export type ProductRestockAlertMutation = { productRestockAlert?: { email?: string | null, name?: string | null, productVariantId: any, requestDate: any } | null }; - -export type WishlistAddProductMutationVariables = Exact<{ - customerAccessToken: Scalars['String']['input']; - productId: Scalars['Long']['input']; -}>; - - -export type WishlistAddProductMutation = { wishlistAddProduct?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null }; - -export type WishlistRemoveProductMutationVariables = Exact<{ - customerAccessToken: Scalars['String']['input']; - productId: Scalars['Long']['input']; -}>; - - -export type WishlistRemoveProductMutation = { wishlistRemoveProduct?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null }; - -export type CreateNewsletterRegisterMutationVariables = Exact<{ - input: NewsletterInput; -}>; - - -export type CreateNewsletterRegisterMutation = { createNewsletterRegister?: { email?: string | null, name?: string | null, createDate: any, updateDate?: any | null } | null }; - -export type AutocompleteQueryVariables = Exact<{ - limit?: InputMaybe; - query?: InputMaybe; - partnerAccessToken?: InputMaybe; -}>; - - -export type AutocompleteQuery = { autocomplete?: { suggestions?: Array | null, products?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null }; - -export type ProductRecommendationsQueryVariables = Exact<{ - productId: Scalars['Long']['input']; - algorithm: ProductRecommendationAlgorithm; - partnerAccessToken?: InputMaybe; - quantity: Scalars['Int']['input']; -}>; - - -export type ProductRecommendationsQuery = { productRecommendations?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null }; - -export type ShippingQuotesQueryVariables = Exact<{ - cep?: InputMaybe; - checkoutId?: InputMaybe; - productVariantId?: InputMaybe; - quantity?: InputMaybe; - useSelectedAddress?: InputMaybe; -}>; - - -export type ShippingQuotesQuery = { shippingQuotes?: Array<{ id?: string | null, type?: string | null, name?: string | null, value: number, deadline: number, shippingQuoteId: any, deliverySchedules?: Array<{ date: any, periods?: Array<{ end?: string | null, id: any, start?: string | null } | null> | null } | null> | null, products?: Array<{ productVariantId: number, value: number } | null> | null } | null> | null }; - -export type GetUserQueryVariables = Exact<{ - customerAccessToken?: InputMaybe; -}>; - - -export type GetUserQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; - -export type GetWislistQueryVariables = Exact<{ - customerAccessToken?: InputMaybe; -}>; - - -export type GetWislistQuery = { customer?: { wishlist?: { products?: Array<{ productId?: any | null, productName?: string | null } | null> | null } | null } | null }; - -export type GetUrlQueryVariables = Exact<{ - url: Scalars['String']['input']; -}>; - - -export type GetUrlQuery = { uri?: { hotsiteSubtype?: HotsiteSubtype | null, kind: UriKind, partnerSubtype?: PartnerSubtype | null, productAlias?: string | null, productCategoriesIds?: Array | null, redirectCode?: string | null, redirectUrl?: string | null } | null }; - -export type CreateProductReviewMutationVariables = Exact<{ - email: Scalars['String']['input']; - name: Scalars['String']['input']; - productVariantId: Scalars['Long']['input']; - rating: Scalars['Int']['input']; - review: Scalars['String']['input']; -}>; - - -export type CreateProductReviewMutation = { createProductReview?: { customer?: string | null, email?: string | null, rating: number, review?: string | null, reviewDate: any } | null }; - -export type SendGenericFormMutationVariables = Exact<{ - body?: InputMaybe; - file?: InputMaybe; - recaptchaToken?: InputMaybe; -}>; - - -export type SendGenericFormMutation = { sendGenericForm?: { isSuccess: boolean } | null }; - -export type HotsiteQueryVariables = Exact<{ - url?: InputMaybe; - filters?: InputMaybe> | InputMaybe>; - limit?: InputMaybe; - maximumPrice?: InputMaybe; - minimumPrice?: InputMaybe; - onlyMainVariant?: InputMaybe; - offset?: InputMaybe; - sortDirection?: InputMaybe; - sortKey?: InputMaybe; -}>; - - -export type HotsiteQuery = { result?: { endDate?: any | null, expression?: string | null, id?: string | null, name?: string | null, pageSize: number, startDate?: any | null, subtype?: HotsiteSubtype | null, template?: string | null, url?: string | null, hotsiteId: any, aggregations?: { maximumPrice: any, minimumPrice: any, filters?: Array<{ field?: string | null, origin?: string | null, values?: Array<{ name?: string | null, quantity: number } | null> | null } | null> | null, priceRanges?: Array<{ quantity: number, range?: string | null } | null> | null } | null, productsByOffset?: { page: number, pageSize: number, totalCount: number, items?: Array<{ mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null, breadcrumbs?: Array<{ link?: string | null, text?: string | null } | null> | null, seo?: Array<{ content?: string | null, httpEquiv?: string | null, name?: string | null, scheme?: string | null, type?: string | null } | null> | null, sorting?: { direction?: SortDirection | null, field?: ProductSortKeys | null } | null } | null }; - -export type ProductOptionsQueryVariables = Exact<{ - productId: Scalars['Long']['input']; -}>; - - -export type ProductOptionsQuery = { productOptions?: { id?: string | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, values?: Array<{ value?: string | null, productVariants?: Array<{ aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null> | null } | null> | null } | null> | null } | null }; - -export type ShopQueryVariables = Exact<{ [key: string]: never; }>; - - -export type ShopQuery = { shop?: { checkoutUrl?: string | null, mainUrl?: string | null, mobileCheckoutUrl?: string | null, mobileUrl?: string | null, modifiedName?: string | null, name?: string | null } | null }; - -export type CustomerCreateMutationVariables = Exact<{ - input?: InputMaybe; -}>; - - -export type CustomerCreateMutation = { customerCreate?: { customerId: any, customerName?: string | null, customerType?: string | null } | null }; - -export type CustomerAuthenticatedLoginMutationVariables = Exact<{ - input: Scalars['String']['input']; - pass: Scalars['String']['input']; -}>; - - -export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, type?: LoginType | null, validUntil: any } | null }; - -export type CustomerAddressCreateMutationVariables = Exact<{ - customerAccessToken: Scalars['String']['input']; - address: CreateCustomerAddressInput; -}>; - - -export type CustomerAddressCreateMutation = { customerAddressCreate?: { addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, state?: string | null, street?: string | null, referencePoint?: string | null } | null }; - -export type CustomerAddressRemoveMutationVariables = Exact<{ - customerAccessToken: Scalars['String']['input']; - id: Scalars['ID']['input']; -}>; - - -export type CustomerAddressRemoveMutation = { customerAddressRemove?: { isSuccess: boolean } | null }; - -export type CustomerAddressUpdateMutationVariables = Exact<{ - id: Scalars['ID']['input']; - customerAccessToken: Scalars['String']['input']; - address: UpdateCustomerAddressInput; -}>; - - -export type CustomerAddressUpdateMutation = { customerAddressUpdate?: { addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, state?: string | null, street?: string | null, referencePoint?: string | null } | null }; - -export type GetUserAddressQueryVariables = Exact<{ - customerAccessToken?: InputMaybe; -}>; - - -export type GetUserAddressQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; - -export type CreateCheckoutMutationVariables = Exact<{ - products: Array> | InputMaybe; -}>; - - -export type CreateCheckoutMutation = { createCheckout?: { checkoutId: any } | null }; diff --git a/checkout/graphql/storefront.graphql.json b/checkout/graphql/storefront.graphql.json deleted file mode 100644 index 345399d05..000000000 --- a/checkout/graphql/storefront.graphql.json +++ /dev/null @@ -1,27810 +0,0 @@ -{ - "data": { - "__schema": { - "queryType": { - "name": "QueryRoot" - }, - "mutationType": { - "name": "Mutation" - }, - "subscriptionType": null, - "types": [ - { - "kind": "OBJECT", - "name": "__Directive", - "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", - "fields": [ - { - "name": "args", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isRepeatable", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "locations", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "__DirectiveLocation", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "onField", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use `locations`." - }, - { - "name": "onFragment", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use `locations`." - }, - { - "name": "onOperation", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use `locations`." - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "__DirectiveLocation", - "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "QUERY", - "description": "Location adjacent to a query operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MUTATION", - "description": "Location adjacent to a mutation operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SUBSCRIPTION", - "description": "Location adjacent to a subscription operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FIELD", - "description": "Location adjacent to a field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FRAGMENT_DEFINITION", - "description": "Location adjacent to a fragment definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FRAGMENT_SPREAD", - "description": "Location adjacent to a fragment spread.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INLINE_FRAGMENT", - "description": "Location adjacent to an inline fragment.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "VARIABLE_DEFINITION", - "description": "Location adjacent to a variable definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SCHEMA", - "description": "Location adjacent to a schema definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SCALAR", - "description": "Location adjacent to a scalar definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OBJECT", - "description": "Location adjacent to an object type definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FIELD_DEFINITION", - "description": "Location adjacent to a field definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ARGUMENT_DEFINITION", - "description": "Location adjacent to an argument definition", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INTERFACE", - "description": "Location adjacent to an interface definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "UNION", - "description": "Location adjacent to a union definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM", - "description": "Location adjacent to an enum definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM_VALUE", - "description": "Location adjacent to an enum value definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_OBJECT", - "description": "Location adjacent to an input object type definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_FIELD_DEFINITION", - "description": "Location adjacent to an input object field definition.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__EnumValue", - "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", - "fields": [ - { - "name": "deprecationReason", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isDeprecated", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Field", - "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", - "fields": [ - { - "name": "args", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deprecationReason", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isDeprecated", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__InputValue", - "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", - "fields": [ - { - "name": "defaultValue", - "description": "A GraphQL-formatted string representing the default value for this input value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Schema", - "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", - "fields": [ - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "directives", - "description": "A list of all directives supported by this server.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Directive", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mutationType", - "description": "If this server supports mutation, the type that mutation operations will be rooted at.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "queryType", - "description": "The type that query operations will be rooted at.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionType", - "description": "If this server support subscription, the type that subscription operations will be rooted at.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "types", - "description": "A list of all types supported by this server.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Type", - "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", - "fields": [ - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "enumValues", - "description": null, - "args": [ - { - "name": "includeDeprecated", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__EnumValue", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fields", - "description": null, - "args": [ - { - "name": "includeDeprecated", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Field", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "inputFields", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "interfaces", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "kind", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "__TypeKind", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ofType", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "possibleTypes", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "specifiedByURL", - "description": "`specifiedByURL` may return a String (in the form of a URL) for custom scalars, otherwise it will return `null`.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "__TypeKind", - "description": "An enum describing what kind of type a given `__Type` is.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "SCALAR", - "description": "Indicates this type is a scalar.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OBJECT", - "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INTERFACE", - "description": "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "UNION", - "description": "Indicates this type is a union. `possibleTypes` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM", - "description": "Indicates this type is an enum. `enumValues` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_OBJECT", - "description": "Indicates this type is an input object. `inputFields` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "LIST", - "description": "Indicates this type is a list. `ofType` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NON_NULL", - "description": "Indicates this type is a non-null. `ofType` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Uuid", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutCustomer", - "description": "Represents a customer node in the checkout.", - "fields": [ - { - "name": "checkingAccountBalance", - "description": "Customer's checking account balance.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cnpj", - "description": "Taxpayer identification number for businesses.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cpf", - "description": "Brazilian individual taxpayer registry identification.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerId", - "description": "Customer's unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerName", - "description": "Customer's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "The email address of the customer.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "phoneNumber", - "description": "Customer's phone number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Checkout", - "description": null, - "fields": [ - { - "name": "cep", - "description": "The CEP.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkingAccountActive", - "description": "Indicates if the checking account is being used.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkingAccountValue", - "description": "Total used from checking account.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutId", - "description": "The checkout unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "completed", - "description": "Indicates if the checkout is completed.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "coupon", - "description": "The coupon for discounts.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "couponDiscount", - "description": "The total coupon discount applied at checkout.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customer", - "description": "The customer associated with the checkout.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutCustomer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizationValue", - "description": "The total value of customizations added to the products.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discount", - "description": "The discount applied at checkout excluding any coupons.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "login", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "metadata", - "description": "The metadata related to this checkout.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Metadata", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orders", - "description": "The checkout orders informations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutOrder", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentFees", - "description": "The additional fees applied based on the payment method.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "A list of products associated with the checkout.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutProductNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedAddress", - "description": "The selected delivery address for the checkout.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutAddress", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedPaymentMethod", - "description": "The selected payment method", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SelectedPaymentMethod", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedShipping", - "description": "Selected Shipping.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ShippingNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedShippingGroups", - "description": "Selected shipping quote groups.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutShippingQuoteGroupNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingFee", - "description": "The shipping fee.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subtotal", - "description": "The subtotal value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": "The total value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalDiscount", - "description": "The total discount applied at checkout.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateDate", - "description": "The last update date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "Url for the current checkout id.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrder", - "description": "Represents a node in the checkout order.", - "fields": [ - { - "name": "adjustments", - "description": "The list of adjustments applied to the order.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutOrderAdjustment", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "date", - "description": "The date of the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "delivery", - "description": "Details of the delivery or store pickup.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutOrderDelivery", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discountValue", - "description": "The discount value of the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dispatchTimeText", - "description": "The dispatch time text from the shop settings.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "interestValue", - "description": "The interest value of the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orderId", - "description": "The ID of the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orderStatus", - "description": "The order status.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "OrderStatus", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "payment", - "description": "The payment information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutOrderPayment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "The list of products in the order.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutOrderProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingValue", - "description": "The shipping value of the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalValue", - "description": "The total value of the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ShippingNode", - "description": null, - "fields": [ - { - "name": "deadline", - "description": "The shipping deadline.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineInHours", - "description": "The shipping deadline in hours.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliverySchedule", - "description": "The delivery schedule detail.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "DeliveryScheduleDetail", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The shipping name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingQuoteId", - "description": "The shipping quote unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The shipping type.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The shipping value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ShippingQuoteGroup", - "description": "A shipping quote group.", - "fields": [ - { - "name": "distributionCenter", - "description": "The distribution center.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "DistributionCenter", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "The products related to the shipping quote group.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ShippingQuoteGroupProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingQuotes", - "description": "Shipping quotes to group.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "GroupShippingQuote", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Customer", - "description": "A customer from the store.", - "fields": [ - { - "name": "address", - "description": "A specific customer's address.", - "args": [ - { - "name": "addressId", - "description": "An address unique identifier to be searched.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addresses", - "description": "Customer's addresses.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "birthDate", - "description": "Customer's birth date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "businessPhoneNumber", - "description": "Customer's business phone number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkingAccountBalance", - "description": "Customer's checking account balance.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkingAccountHistory", - "description": "Customer's checking account History.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CustomerCheckingAccountHistoryNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cnpj", - "description": "Taxpayer identification number for businesses.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "companyName", - "description": "Entities legal name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cpf", - "description": "Brazilian individual taxpayer registry identification.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "creationDate", - "description": "Creation Date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerId", - "description": "Customer's unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerName", - "description": "Customer's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerType", - "description": "Indicates if it is a natural person or company profile.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliveryAddress", - "description": "Customer's delivery address.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "Customer's email address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gender", - "description": "Customer's gender.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "informationGroups", - "description": "Customer information groups.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CustomerInformationGroupNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mobilePhoneNumber", - "description": "Customer's mobile phone number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "A specific order placed by the customer.", - "args": [ - { - "name": "orderId", - "description": "An order unique identifier to be searched.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": "0" - } - ], - "type": { - "kind": "OBJECT", - "name": "order", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orders", - "description": "List of orders placed by the customer.", - "args": [ - { - "name": "offset", - "description": "The offset used to paginate.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "0" - }, - { - "name": "sortDirection", - "description": "Define the sort orientation of the result set.", - "type": { - "kind": "ENUM", - "name": "OrderSortDirection", - "ofType": null - }, - "defaultValue": "DESC" - }, - { - "name": "sortKey", - "description": "Define the order attribute which the result set will be sorted on.", - "type": { - "kind": "ENUM", - "name": "CustomerOrderSortKeys", - "ofType": null - }, - "defaultValue": "DATE" - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerOrderCollectionSegment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ordersStatistics", - "description": "Statistics about the orders the customer made in a specific timeframe.", - "args": [ - { - "name": "dateGte", - "description": "Filter que customer orders by date greater than or equal the specified date.", - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "dateLt", - "description": "Filter que customer orders by date lesser than the specified date.", - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "onlyPaidOrders", - "description": "Toggle to apply the statistics only on orders with paid status.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": "true" - }, - { - "name": "partnerId", - "description": "The partner id which the order was made with.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerOrdersStatistics", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partners", - "description": "Get info about the associated partners.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Partner", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "phoneNumber", - "description": "Customer's phone number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "residentialAddress", - "description": "Customer's residential address.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "responsibleName", - "description": "Responsible's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "rg", - "description": "Registration number Id.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stateRegistration", - "description": "State registration number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptions", - "description": "Customer's subscriptions.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CustomerSubscription", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateDate", - "description": "Date of the last update.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "wishlist", - "description": "Customer wishlist.", - "args": [ - { - "name": "productsIds", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "wishlist", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerSubscription", - "description": null, - "fields": [ - { - "name": "billingAddress", - "description": "Subscription billing address.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cancellationDate", - "description": "The date when the subscription was cancelled.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "coupon", - "description": "The coupon code applied to the subscription.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "date", - "description": "The date of the subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliveryAddress", - "description": "Subscription delivery address.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "intercalatedRecurrenceDate", - "description": "The date of intercalated recurring payments.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nextRecurrenceDate", - "description": "The date of the next recurring payment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orders", - "description": "Subscription orders.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "order", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pauseDate", - "description": "The date when the subscription was paused.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "payment", - "description": "The payment details for the subscription.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerSubscriptionPayment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "The list of products associated with the subscription.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CustomerSubscriptionProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "recurring", - "description": "The details of the recurring subscription.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerSubscriptionRecurring", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": "The subscription status.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroupId", - "description": "The subscription group id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionId", - "description": "Subscription unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Hotsite", - "description": "A hotsite is a group of products used to organize them or to make them easier to browse.", - "fields": [ - { - "name": "banners", - "description": "A list of banners associated with the hotsite.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Banner", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contents", - "description": "A list of contents associated with the hotsite.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Content", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endDate", - "description": "The hotsite will be displayed until this date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "expression", - "description": "Expression used to associate products to the hotsite.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hotsiteId", - "description": "Hotsite unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The hotsite's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageSize", - "description": "Set the quantity of products displayed per page.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "A list of products associated with the hotsite.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sorting", - "description": "Sorting information to be used by default on the hotsite.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "HotsiteSorting", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startDate", - "description": "The hotsite will be displayed from this date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subtype", - "description": "The subtype of the hotsite.", - "args": [], - "type": { - "kind": "ENUM", - "name": "HotsiteSubtype", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "template", - "description": "The template used for the hotsite.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The hotsite's URL.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SingleHotsite", - "description": "A hotsite is a group of products used to organize them or to make them easier to browse.", - "fields": [ - { - "name": "aggregations", - "description": "Aggregations from the products.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductAggregations", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "banners", - "description": "A list of banners associated with the hotsite.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Banner", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "breadcrumbs", - "description": "A list of breadcrumbs for the hotsite.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Breadcrumb", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contents", - "description": "A list of contents associated with the hotsite.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Content", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endDate", - "description": "The hotsite will be displayed until this date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "expression", - "description": "Expression used to associate products to the hotsite.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hotsiteId", - "description": "Hotsite unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The hotsite's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageSize", - "description": "Set the quantity of products displayed per page.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "A list of products associated with the hotsite. Cursor pagination.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "filters", - "description": "List of filters. Check filters result for available inputs.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProductFilterInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "maximumPrice", - "description": "Maximum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "minimumPrice", - "description": "Minimum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "onlyMainVariant", - "description": "Toggle the return of only main variants.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "true" - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productsByOffset", - "description": "A list of products associated with the hotsite. Offset pagination.", - "args": [ - { - "name": "filters", - "description": "List of filters. Check filters result for available inputs.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProductFilterInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "limit", - "description": "The number of products to return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "maximumPrice", - "description": "Maximum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "minimumPrice", - "description": "Minimum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "offset", - "description": "The offset used to paginate.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "0" - }, - { - "name": "onlyMainVariant", - "description": "Toggle the return of only main variants.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "true" - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductCollectionSegment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seo", - "description": "A list of SEO contents associated with the hotsite.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SEO", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sorting", - "description": "Sorting information to be used by default on the hotsite.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "HotsiteSorting", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startDate", - "description": "The hotsite will be displayed from this date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subtype", - "description": "The subtype of the hotsite.", - "args": [], - "type": { - "kind": "ENUM", - "name": "HotsiteSubtype", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "template", - "description": "The template used for the hotsite.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The hotsite's URL.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductCollectionSegment", - "description": null, - "fields": [ - { - "name": "items", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "page", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageSize", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerOrderCollectionSegment", - "description": null, - "fields": [ - { - "name": "items", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "order", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "page", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageSize", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Search", - "description": "Search for relevant products to the searched term.", - "fields": [ - { - "name": "aggregations", - "description": "Aggregations from the products.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductAggregations", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "banners", - "description": "A list of banners displayed in search pages.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Banner", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "breadcrumbs", - "description": "List of search breadcrumbs.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Breadcrumb", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contents", - "description": "A list of contents displayed in search pages.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Content", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forbiddenTerm", - "description": "Information about forbidden term.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "forbiddenTerm", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageSize", - "description": "The quantity of products displayed per page.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "A cursor based paginated list of products from the search.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "filters", - "description": "List of filters. Check filters result for available inputs.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProductFilterInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "maximumPrice", - "description": "Maximum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "minimumPrice", - "description": "Minimum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "onlyMainVariant", - "description": "Toggle the return of only main variants.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "true" - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "ENUM", - "name": "ProductSearchSortKeys", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productsByOffset", - "description": "An offset based paginated list of products from the search.", - "args": [ - { - "name": "filters", - "description": "List of filters. Check filters result for available inputs.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProductFilterInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "limit", - "description": "The number of products to return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "10" - }, - { - "name": "maximumPrice", - "description": "Maximum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "minimumPrice", - "description": "Minimum price filter.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "offset", - "description": "The offset used to paginate.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "0" - }, - { - "name": "onlyMainVariant", - "description": "Toggle the return of only main variants.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "true" - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "ENUM", - "name": "ProductSearchSortKeys", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductCollectionSegment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "redirectUrl", - "description": "Redirection url in case a term in the search triggers a redirect.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "searchTime", - "description": "Time taken to perform the search.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Brand", - "description": "Informations about brands and its products.", - "fields": [ - { - "name": "active", - "description": "If the brand is active at the platform.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alias", - "description": "The alias for the brand's hotsite.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "brandId", - "description": "Brand unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date the brand was created in the database.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullUrlLogo", - "description": "The full brand logo URL.", - "args": [ - { - "name": "height", - "description": "The height of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The brand's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "A list of products from the brand.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - } - }, - "defaultValue": "NAME" - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The last update date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlCarrossel", - "description": "A web address to be redirected.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlLink", - "description": "A web address linked to the brand.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlLogo", - "description": "The url of the brand's logo.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductOption", - "description": "Options available for the given product.", - "fields": [ - { - "name": "attributes", - "description": "A list of attributes available for the given product and its variants.", - "args": [ - { - "name": "filter", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AttributeFilterInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Attribute", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizations", - "description": "A list of customizations available for the given products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Customization", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ProductFilterInput", - "description": "Custom attribute defined on store's admin may also be used as a filter.", - "fields": null, - "inputFields": [ - { - "name": "field", - "description": "The attribute name.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "values", - "description": "The set of values which the result filter item value must be included in.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Category", - "description": "Categories are used to arrange your products into different sections by similarity.", - "fields": [ - { - "name": "categoryId", - "description": "Category unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "children", - "description": "A list of child categories, if it exists.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Category", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description to the category.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayMenu", - "description": "Field to check if the category is displayed in the store's menu.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hotsiteAlias", - "description": "The hotsite alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hotsiteUrl", - "description": "The URL path for the category.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "The url to access the image linked to the category.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrlLink", - "description": "The web address to access the image linked to the category.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The category's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parent", - "description": "The parent category, if it exists.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Category", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentCategoryId", - "description": "The parent category unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "position", - "description": "The position the category will be displayed.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "A list of products associated with the category.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - } - }, - "defaultValue": "NAME" - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlLink", - "description": "A web address linked to the category.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Customization", - "description": "Some products can have customizations, such as writing your name on it or other predefined options.", - "fields": [ - { - "name": "cost", - "description": "Cost of customization.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizationId", - "description": "Customization unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "groupName", - "description": "Customization group's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maxLength", - "description": "Maximum allowed size of the field.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The customization's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "Priority order of customization.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Type of customization.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "Value of customization.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SingleProduct", - "description": "A product represents an item for sale in the store.", - "fields": [ - { - "name": "addToCartFromSpot", - "description": "Check if the product can be added to cart directly from spot.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alias", - "description": "The product url alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributeSelections", - "description": "Information about the possible selection attributes.", - "args": [ - { - "name": "selected", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AttributeFilterInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "AttributeSelection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributes", - "description": "List of the product attributes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductAttribute", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": "The product author.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "available", - "description": "Field to check if the product is available in stock.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "averageRating", - "description": "The product average rating. From 0 to 5.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "breadcrumbs", - "description": "List of product breadcrumbs.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Breadcrumb", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyBox", - "description": "BuyBox informations.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "BuyBox", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyTogether", - "description": "Buy together products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SingleProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyTogetherGroups", - "description": "Buy together groups products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BuyTogetherGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "collection", - "description": "The product collection.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "condition", - "description": "The product condition.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The product creation date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizations", - "description": "A list of customizations available for the given products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Customization", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadline", - "description": "The product delivery deadline.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineAlert", - "description": "Product deadline alert informations.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "DeadlineAlert", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "display", - "description": "Check if the product should be displayed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnlyPartner", - "description": "Check if the product should be displayed only for partners.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displaySearch", - "description": "Check if the product should be displayed on search.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ean", - "description": "The product's unique EAN.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "freeShipping", - "description": "Check if the product offers free shipping.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gender", - "description": "The product gender.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "images", - "description": "List of the product images.", - "args": [ - { - "name": "height", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Image", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "informations", - "description": "List of the product insformations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Information", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mainVariant", - "description": "Check if its the main variant.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maximumOrderQuantity", - "description": "The product maximum quantity for an order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "minimumOrderQuantity", - "description": "The product minimum quantity for an order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newRelease", - "description": "Check if the product is a new release.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "numberOfVotes", - "description": "The number of votes that the average rating consists of.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parallelOptions", - "description": "Product parallel options information.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentId", - "description": "Parent product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "prices", - "description": "The product prices.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Prices", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productBrand", - "description": "Summarized informations about the brand of the product.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductBrand", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productCategories", - "description": "Summarized informations about the categories of the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductCategory", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productId", - "description": "Product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productName", - "description": "The product name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productSubscription", - "description": "Summarized informations about the subscription of the product.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductSubscription", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use subscriptionGroups to get subscription information." - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promotions", - "description": "List of promotions this product belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Promotion", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisher", - "description": "The product publisher", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "reviews", - "description": "List of customer reviews for this product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Review", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seller", - "description": "The product seller.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Seller", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seo", - "description": "Product SEO informations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SEO", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "similarProducts", - "description": "List of similar products. ", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimilarProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sku", - "description": "The product's unique SKU.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotAttributes", - "description": "The values of the spot attribute.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotInformation", - "description": "The product spot information.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotlight", - "description": "Check if the product is on spotlight.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stock", - "description": "The available aggregated product stock (all variants) at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stocks", - "description": "List of the product stocks on different distribution centers.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Stock", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroups", - "description": "List of subscription groups this product belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubscriptionGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "telesales", - "description": "Check if the product is a telesale.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The product last update date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlVideo", - "description": "The product video url.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variantName", - "description": "The variant name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variantStock", - "description": "The available aggregated variant stock at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BuyList", - "description": "A buy list represents a list of items for sale in the store.", - "fields": [ - { - "name": "addToCartFromSpot", - "description": "Check if the product can be added to cart directly from spot.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alias", - "description": "The product url alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributeSelections", - "description": "Information about the possible selection attributes.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "AttributeSelection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributes", - "description": "List of the product attributes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductAttribute", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": "The product author.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "available", - "description": "Field to check if the product is available in stock.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "averageRating", - "description": "The product average rating. From 0 to 5.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "breadcrumbs", - "description": "List of product breadcrumbs.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Breadcrumb", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyBox", - "description": "BuyBox informations.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "BuyBox", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyListId", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyListProducts", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BuyListProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyTogether", - "description": "Buy together products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SingleProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyTogetherGroups", - "description": "Buy together groups products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BuyTogetherGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "collection", - "description": "The product collection.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "condition", - "description": "The product condition.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The product creation date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizations", - "description": "A list of customizations available for the given products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Customization", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadline", - "description": "The product delivery deadline.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineAlert", - "description": "Product deadline alert informations.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "DeadlineAlert", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "display", - "description": "Check if the product should be displayed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnlyPartner", - "description": "Check if the product should be displayed only for partners.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displaySearch", - "description": "Check if the product should be displayed on search.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ean", - "description": "The product's unique EAN.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "freeShipping", - "description": "Check if the product offers free shipping.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gender", - "description": "The product gender.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "images", - "description": "List of the product images.", - "args": [ - { - "name": "height", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Image", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "informations", - "description": "List of the product insformations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Information", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mainVariant", - "description": "Check if its the main variant.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maximumOrderQuantity", - "description": "The product maximum quantity for an order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "minimumOrderQuantity", - "description": "The product minimum quantity for an order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newRelease", - "description": "Check if the product is a new release.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "numberOfVotes", - "description": "The number of votes that the average rating consists of.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parallelOptions", - "description": "Product parallel options information.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentId", - "description": "Parent product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "prices", - "description": "The product prices.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Prices", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productBrand", - "description": "Summarized informations about the brand of the product.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductBrand", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productCategories", - "description": "Summarized informations about the categories of the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductCategory", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productId", - "description": "Product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productName", - "description": "The product name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productSubscription", - "description": "Summarized informations about the subscription of the product.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductSubscription", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use subscriptionGroups to get subscription information." - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promotions", - "description": "List of promotions this product belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Promotion", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisher", - "description": "The product publisher", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "reviews", - "description": "List of customer reviews for this product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Review", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seller", - "description": "The product seller.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Seller", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seo", - "description": "Product SEO informations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SEO", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "similarProducts", - "description": "List of similar products. ", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimilarProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sku", - "description": "The product's unique SKU.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotAttributes", - "description": "The values of the spot attribute.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotInformation", - "description": "The product spot information.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotlight", - "description": "Check if the product is on spotlight.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stock", - "description": "The available aggregated product stock (all variants) at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stocks", - "description": "List of the product stocks on different distribution centers.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Stock", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroups", - "description": "List of subscription groups this product belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubscriptionGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "telesales", - "description": "Check if the product is a telesale.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The product last update date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlVideo", - "description": "The product video url.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variantName", - "description": "The variant name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variantStock", - "description": "The available aggregated variant stock at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductVariant", - "description": "Product variants that have the attribute.", - "fields": [ - { - "name": "aggregatedStock", - "description": "The available stock at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alias", - "description": "The product alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributes", - "description": "List of the selected variant attributes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductAttribute", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "available", - "description": "Field to check if the product is available in stock.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ean", - "description": "The product's EAN.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "images", - "description": "The product's images.", - "args": [ - { - "name": "height", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Image", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "offers", - "description": "The seller's product offers.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SellerOffer", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "prices", - "description": "The product prices.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Prices", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productId", - "description": "Product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantName", - "description": "Product variant name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promotions", - "description": "List of promotions this product variant belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Promotion", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sku", - "description": "The product's unique SKU.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stock", - "description": "The available stock at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Shop", - "description": "Informations about the store.", - "fields": [ - { - "name": "checkoutUrl", - "description": "Checkout URL", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mainUrl", - "description": "Store main URL", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mobileCheckoutUrl", - "description": "Mobile checkout URL", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mobileUrl", - "description": "Mobile URL", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "modifiedName", - "description": "Store modified name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Store name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "physicalStores", - "description": "Physical stores", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PhysicalStore", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sitemapImagesUrl", - "description": "The URL to obtain the SitemapImagens.xml file", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sitemapUrl", - "description": "The URL to obtain the Sitemap.xml file", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Any", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Upload", - "description": "The `Upload` scalar type represents a file upload.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MenuGroup", - "description": "Informations about menu groups.", - "fields": [ - { - "name": "fullImageUrl", - "description": "The full image URL.", - "args": [ - { - "name": "height", - "description": "The height of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "Menu group image url.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "menuGroupId", - "description": "Menu group identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "menus", - "description": "List of menus associated with the current group", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Menu", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Menu group name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partnerId", - "description": "Menu group partner id.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "position", - "description": "Menu group position.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderProductNode", - "description": null, - "fields": [ - { - "name": "adjusts", - "description": "List of adjusts on the product price, if any.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderAdjustNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributes", - "description": "The product attributes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderAttributeNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizationPrice", - "description": "The cost of the customizations, if any.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customizations", - "description": "List of customizations for the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderCustomizationNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discount", - "description": "Amount of discount in the product price, if any.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gift", - "description": "If the product is a gift.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": "The product image.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "listPrice", - "description": "The product list price.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The product name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "packagingPrice", - "description": "The cost of the packagings, if any.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "packagings", - "description": "List of packagings for the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderPackagingNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The product price.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productSeller", - "description": "Information about the product seller.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "OrderSellerNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "Quantity of the given product in the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "salePrice", - "description": "The product sale price.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sku", - "description": "The product SKU.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "trackings", - "description": "List of trackings for the order.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderTrackingNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "unitaryValue", - "description": "Value of an unit of the product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductNode", - "description": null, - "fields": [ - { - "name": "adjustments", - "description": "The product adjustment information", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutProductAdjustmentNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ajustedPrice", - "description": "The price adjusted with promotions and other price changes", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributeSelections", - "description": "Information about the possible selection attributes.", - "args": [ - { - "name": "selected", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AttributeFilterInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "AttributeSelection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "brand", - "description": "The product brand", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "category", - "description": "The product category", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customization", - "description": "The product customization.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutProductCustomizationNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gift", - "description": "If the product is a gift", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "googleCategory", - "description": "The product Google category", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "The product URL image", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "informations", - "description": "The product informations", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installmentFee", - "description": "The product installment fee", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installmentValue", - "description": "The product installment value", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "listPrice", - "description": "The product list price", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "metadata", - "description": "The metadata related to this checkout.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Metadata", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The product name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "numberOfInstallments", - "description": "The product number of installments", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The product price", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productAttributes", - "description": "The product attributes", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutProductAttributeNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productId", - "description": "The product unique identifier", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "The product variant unique identifier", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "The product quantity", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seller", - "description": "The product seller.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutProductSellerNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingDeadline", - "description": "The product shipping deadline", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutShippingDeadlineNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sku", - "description": "The product SKU", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscription", - "description": "The product subscription information", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutProductSubscription", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalAdjustedPrice", - "description": "The total price adjusted with promotions and other price changes", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalListPrice", - "description": "The total list price", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The product URL", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "String", - "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Boolean", - "description": "The `Boolean` scalar type represents `true` or `false`.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Int", - "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ApplyPolicy", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "BEFORE_RESOLVER", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "AFTER_RESOLVER", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "ID", - "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Long", - "description": "The `Long` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "CustomerOrderSortKeys", - "description": "Define the order attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The order ID.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DATE", - "description": "The date the order was placed.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "STATUS", - "description": "The order current status.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "AMOUNT", - "description": "The total order value.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "OrderSortDirection", - "description": "Define the sort orientation of the result set.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "DESC", - "description": "The results will be sorted in an descending order.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ASC", - "description": "The results will be sorted in an ascending order.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductsConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductsEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProductSortKeys", - "description": "Define the product attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "NAME", - "description": "The product name.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SALES", - "description": "The sales number on a period of time.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PRICE", - "description": "The product variant price.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DISCOUNT", - "description": "The applied discount to the product variant price.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RANDOM", - "description": "Sort in a random way.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RELEASE_DATE", - "description": "The date the product was released.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "STOCK", - "description": "The quantity in stock of the product variant.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SortDirection", - "description": "Define the sort orientation of the result set.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ASC", - "description": "The results will be sorted in an ascending order.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DESC", - "description": "The results will be sorted in an descending order.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Decimal", - "description": "The built-in `Decimal` scalar type.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProductSearchSortKeys", - "description": "Define the product attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "RELEVANCE", - "description": "The relevance that the search engine gave to the possible result item based on own criteria.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NAME", - "description": "The product name.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SALES", - "description": "The sales number on a period of time.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PRICE", - "description": "The product variant price.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DISCOUNT", - "description": "The applied discount to the product variant price.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RANDOM", - "description": "Sort in a random way.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RELEASE_DATE", - "description": "The date the product was released.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "STOCK", - "description": "The quantity in stock of the product variant.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "AttributeFilterInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "attributeId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "value", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PageInfo", - "description": "Information about pagination in a connection.", - "fields": [ - { - "name": "endCursor", - "description": "When paginating forwards, the cursor to continue.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hasNextPage", - "description": "Indicates whether more edges exist following the set defined by the clients arguments.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hasPreviousPage", - "description": "Indicates whether more edges exist prior the set defined by the clients arguments.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startCursor", - "description": "When paginating backwards, the cursor to continue.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Product", - "description": "A product represents an item for sale in the store.", - "fields": [ - { - "name": "addToCartFromSpot", - "description": "Check if the product can be added to cart directly from spot.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alias", - "description": "The product url alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributes", - "description": "List of the product attributes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductAttribute", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": "The product author.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "available", - "description": "Field to check if the product is available in stock.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "averageRating", - "description": "The product average rating. From 0 to 5.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyBox", - "description": "BuyBox informations.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "BuyBox", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "collection", - "description": "The product collection.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "condition", - "description": "The product condition.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The product creation date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadline", - "description": "The product delivery deadline.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "display", - "description": "Check if the product should be displayed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnlyPartner", - "description": "Check if the product should be displayed only for partners.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displaySearch", - "description": "Check if the product should be displayed on search.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ean", - "description": "The product's unique EAN.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "freeShipping", - "description": "Check if the product offers free shipping.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gender", - "description": "The product gender.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "images", - "description": "List of the product images.", - "args": [ - { - "name": "height", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Image", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "informations", - "description": "List of the product insformations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Information", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mainVariant", - "description": "Check if its the main variant.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maximumOrderQuantity", - "description": "The product maximum quantity for an order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "minimumOrderQuantity", - "description": "The product minimum quantity for an order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newRelease", - "description": "Check if the product is a new release.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "numberOfVotes", - "description": "The number of votes that the average rating consists of.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentId", - "description": "Parent product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "prices", - "description": "The product prices.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Prices", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productBrand", - "description": "Summarized informations about the brand of the product.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductBrand", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productCategories", - "description": "Summarized informations about the categories of the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductCategory", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productId", - "description": "Product unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productName", - "description": "The product name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productSubscription", - "description": "Summarized informations about the subscription of the product.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductSubscription", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use subscriptionGroups to get subscription information." - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promotions", - "description": "List of promotions this product belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Promotion", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisher", - "description": "The product publisher", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "seller", - "description": "The product seller.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Seller", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "similarProducts", - "description": "List of similar products. ", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimilarProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sku", - "description": "The product's unique SKU.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotAttributes", - "description": "The values of the spot attribute.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotInformation", - "description": "The product spot information.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spotlight", - "description": "Check if the product is on spotlight.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stock", - "description": "The available aggregated product stock (all variants) at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stocks", - "description": "List of the product stocks on different distribution centers.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Stock", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroups", - "description": "List of subscription groups this product belongs to.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubscriptionGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "telesales", - "description": "Check if the product is a telesale.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The product last update date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlVideo", - "description": "The product video url.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variantName", - "description": "The variant name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variantStock", - "description": "The available aggregated variant stock at the default distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductsEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "QueryRoot", - "description": null, - "fields": [ - { - "name": "address", - "description": "Get informations about an address.", - "args": [ - { - "name": "cep", - "description": "The address zip code.", - "type": { - "kind": "SCALAR", - "name": "CEP", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "AddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "autocomplete", - "description": "Get query completion suggestion.", - "args": [ - { - "name": "limit", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "query", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Autocomplete", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "banners", - "description": "List of banners.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "bannerIds", - "description": "Filter the list by specific banner ids.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "BannerSortKeys", - "ofType": null - } - }, - "defaultValue": "ID" - } - ], - "type": { - "kind": "OBJECT", - "name": "BannersConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "brands", - "description": "List of brands", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "brandInput", - "description": "Brand input", - "type": { - "kind": "INPUT_OBJECT", - "name": "BrandFilterInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "BrandSortKeys", - "ofType": null - } - }, - "defaultValue": "ID" - } - ], - "type": { - "kind": "OBJECT", - "name": "BrandsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "buyList", - "description": "Retrieve a buylist by the given id.", - "args": [ - { - "name": "id", - "description": "The list ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "BuyList", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "calculatePrices", - "description": "Prices informations", - "args": [ - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "products", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CalculatePricesProductsInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Prices", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "categories", - "description": "List of categories.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "categoryIds", - "description": "Filter the list by specific category ids.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "CategorySortKeys", - "ofType": null - } - }, - "defaultValue": "ID" - }, - { - "name": "urls", - "description": "Filter the list by specific urls", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CategoriesConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkout", - "description": "Get info from the checkout cart corresponding to the given ID.", - "args": [ - { - "name": "checkoutId", - "description": "The cart ID used for checkout operations.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutLite", - "description": "Retrieve essential checkout details for a specific cart.", - "args": [ - { - "name": "checkoutId", - "description": "The cart ID", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CheckoutLite", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contents", - "description": "List of contents.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "contentIds", - "description": "Filter the list by specific content ids.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ContentSortKeys", - "ofType": null - } - }, - "defaultValue": "ID" - } - ], - "type": { - "kind": "OBJECT", - "name": "ContentsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customer", - "description": "Get informations about a customer from the store.", - "args": [ - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerAccessTokenDetails", - "description": "Get informations about a customer access token.", - "args": [ - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessTokenDetails", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "eventList", - "description": "Retrieve an event list by the token.", - "args": [ - { - "name": "eventListToken", - "description": "The event list token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "EventList", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "eventListType", - "description": "Retrieves event types", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "EventListType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "eventLists", - "description": "Retrieves a list of store events.", - "args": [ - { - "name": "eventDate", - "description": "The event date.", - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "eventName", - "description": "The event name.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "eventType", - "description": "The event type name.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "EventListStore", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hotsite", - "description": "Retrieve a single hotsite. A hotsite consists of products, banners and contents.", - "args": [ - { - "name": "hotsiteId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "SingleHotsite", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hotsites", - "description": "List of the shop's hotsites. A hotsite consists of products, banners and contents.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "hotsiteIds", - "description": "Filter the list by specific hotsite ids.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "HotsiteSortKeys", - "ofType": null - } - }, - "defaultValue": "ID" - } - ], - "type": { - "kind": "OBJECT", - "name": "HotsitesConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "informationGroupFields", - "description": "Get information group fields.", - "args": [ - { - "name": "type", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EnumInformationGroup", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "InformationGroupFieldNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "menuGroups", - "description": "List of menu groups.", - "args": [ - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "position", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MenuGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newsletterInformationGroupFields", - "description": "Get newsletter information group fields.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "InformationGroupFieldNode", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use the informationGroupFields" - }, - { - "name": "node", - "description": null, - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": null, - "args": [ - { - "name": "ids", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partner", - "description": "Get single partner.", - "args": [ - { - "name": "partnerAccessToken", - "description": "Filter the partner by access token.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Partner", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partnerByRegion", - "description": "Get partner by region.", - "args": [ - { - "name": "input", - "description": "Filter the partner by cep or region ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "PartnerByRegionInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Partner", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partners", - "description": "List of partners.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "alias", - "description": "Filter the list by specific alias.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "names", - "description": "Filter the list by specific names.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "priceTableIds", - "description": "Filter the list by specific price table ids.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "PartnerSortKeys", - "ofType": null - } - }, - "defaultValue": "ID" - } - ], - "type": { - "kind": "OBJECT", - "name": "PartnersConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentMethods", - "description": "Returns the available payment methods for a given cart ID", - "args": [ - { - "name": "checkoutId", - "description": "The cart ID used for checking available payment methods.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "paymentMethod", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "product", - "description": "Retrieve a product by the given id.", - "args": [ - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productId", - "description": "The product ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "SingleProduct", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productOptions", - "description": "Options available for the given product.", - "args": [ - { - "name": "productId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductOption", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use the product query." - }, - { - "name": "productRecommendations", - "description": "Retrieve a list of recommended products by product id.", - "args": [ - { - "name": "algorithm", - "description": "Algorithm type.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProductRecommendationAlgorithm", - "ofType": null - } - }, - "defaultValue": "DEFAULT" - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productId", - "description": "The product identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": "The number of product recommendations.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": "5" - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "Retrieve a list of products by specific filters.", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "filters", - "description": "The product filters to apply.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProductExplicitFiltersInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "defaultValue": "ASC" - }, - { - "name": "sortKey", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - } - }, - "defaultValue": "NAME" - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductsConnection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scripts", - "description": "Retrieve a list of scripts.", - "args": [ - { - "name": "name", - "description": "The script name.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "pageType", - "description": "The script page type list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ScriptPageType", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "position", - "description": "The script position.", - "type": { - "kind": "ENUM", - "name": "ScriptPosition", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": "Url for available scripts.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Script", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "search", - "description": "Search products with cursor pagination.", - "args": [ - { - "name": "autoSecondSearch", - "description": "Toggle to perform second search automatically when the primary search returns no products.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": "false" - }, - { - "name": "operation", - "description": "The operation to perform between query terms.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "Operation", - "ofType": null - } - }, - "defaultValue": "AND" - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "query", - "description": "The search query.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Search", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingQuoteGroups", - "description": "Get the shipping quote groups by providing CEP and checkout or products.", - "args": [ - { - "name": "cep", - "description": "CEP to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "CEP", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "checkoutId", - "description": "Checkout identifier to get the shipping quotes.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "useSelectedAddress", - "description": "Use the selected address to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ShippingQuoteGroup", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingQuotes", - "description": "Get the shipping quotes by providing CEP and checkout or product identifier.", - "args": [ - { - "name": "cep", - "description": "CEP to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "CEP", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "checkoutId", - "description": "Checkout identifier to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "Product identifier to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "products", - "description": "List of Products to get the shipping quotes.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "productsInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": "Quantity of the product to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "useSelectedAddress", - "description": "Use the selected address to get the shipping quotes.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ShippingQuote", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shop", - "description": "Store informations", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Shop", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shopSetting", - "description": "Returns a single store setting", - "args": [ - { - "name": "settingName", - "description": "Setting name", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ShopSetting", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shopSettings", - "description": "Store settings", - "args": [ - { - "name": "settingNames", - "description": "Setting names", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ShopSetting", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "uri", - "description": "Get the URI kind.", - "args": [ - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Uri", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Mutation", - "description": null, - "fields": [ - { - "name": "checkoutAddCoupon", - "description": "Add coupon to checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "coupon", - "description": "The coupon.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "A customer's access token", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutAddMetadata", - "description": "Add metadata to checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "A customer's access token", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "metadata", - "description": "The list of metadata to add", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutMetadataInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutAddMetadataForProductVariant", - "description": "Add metadata to a checkout product", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "A customer's access token", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "metadata", - "description": "The list of metadata to add", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutMetadataInput", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The product to be modifed", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutAddProduct", - "description": "Add products to an existing checkout", - "args": [ - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "input", - "description": "Params to add products to an existing checkout", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutAddressAssociate", - "description": "Associate the address with a checkout.", - "args": [ - { - "name": "addressId", - "description": "The address ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutClone", - "description": "Clones a cart by the given checkout ID, returns the newly created checkout ID", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "copyUser", - "description": "Flag indicating whether to copy the existing Customer information to the new Checkout. Default is false", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": "false" - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutComplete", - "description": "Completes a checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "comments", - "description": "Order comments.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "paymentData", - "description": "Payment data.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutCustomerAssociate", - "description": "Associate the customer with a checkout.", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutDeleteSuggestedCard", - "description": "Delete a suggested card", - "args": [ - { - "name": "cardKey", - "description": "The card key", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "paymentMethodId", - "description": "The payment method ID", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutGiftVariantSelection", - "description": "Selects the variant of a gift product", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The variant id to select.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutPartnerAssociate", - "description": "Associate the partner with a checkout.", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": "The partner access token.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutPartnerDisassociate", - "description": "Disassociates the checkout from the partner and returns a new checkout.", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutRemoveCoupon", - "description": "Remove coupon to checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutRemoveMetadata", - "description": "Removes metadata keys from a checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "A customer's access token", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "keys", - "description": "The list of metadata keys to remove", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutRemoveProduct", - "description": "Remove products from an existing checkout", - "args": [ - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "input", - "description": "Params to remove products from an existing checkout", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutRemoveProductCustomization", - "description": "Remove Customization to Checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "customizationId", - "description": "The product customization unique identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The ID of the variant to be removed.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutRemoveProductSubscription", - "description": "Remove Subscription to Checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The ID of the variant to be removed.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutReset", - "description": "Resets a specific area of a checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "types", - "description": "The reset types to apply", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "CheckoutResetType", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutSelectInstallment", - "description": "Select installment.", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "installmentNumber", - "description": "The number of installments.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "selectedPaymentMethodId", - "description": "The selected payment method ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutSelectPaymentMethod", - "description": "Select payment method.", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "paymentMethodId", - "description": "The payment method ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutSelectShippingQuote", - "description": "Select shipping quote", - "args": [ - { - "name": "additionalInformation", - "description": "The additional information for in-store pickup.", - "type": { - "kind": "INPUT_OBJECT", - "name": "InStorePickupAdditionalInformationInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "deliveryScheduleInput", - "description": "The delivery schedule.", - "type": { - "kind": "INPUT_OBJECT", - "name": "DeliveryScheduleInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "distributionCenterId", - "description": "The distribution center ID.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "shippingQuoteId", - "description": "The shipping quote unique identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutUpdateProduct", - "description": "Update a product of an existing checkout", - "args": [ - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "input", - "description": "Params of the updated product of the existing checkout", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductUpdateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "checkoutUseCheckingAccount", - "description": "Use balance checking account checkout", - "args": [ - { - "name": "checkoutId", - "description": "The checkout ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "useBalance", - "description": "Use checking account balance", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createCheckout", - "description": "Create a new checkout", - "args": [ - { - "name": "products", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductItemInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createNewsletterRegister", - "description": "Register an email in the newsletter.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "NewsletterInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "NewsletterNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createProductReview", - "description": "Adds a review to a product variant.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ReviewCreateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Review", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createSearchTermRecord", - "description": "Record a searched term for admin reports", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SearchRecordInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "SearchRecord", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerAccessTokenCreate", - "description": "Creates a new customer access token with an expiration time.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CustomerAccessTokenInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use the CustomerAuthenticatedLogin mutation." - }, - { - "name": "customerAccessTokenRenew", - "description": "Renews the expiration time of a customer access token. The token must not be expired.", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerAddressCreate", - "description": "Create an address.", - "args": [ - { - "name": "address", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CreateCustomerAddressInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerAddressRemove", - "description": "Delete an existing address, if it is not the only registered address", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "id", - "description": "The customer address unique identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerAddressUpdate", - "description": "Change an existing address", - "args": [ - { - "name": "address", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateCustomerAddressInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "id", - "description": "The customer address unique identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerAuthenticatedLogin", - "description": "Creates a new customer access token with an expiration time.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CustomerAuthenticateInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerCompletePartialRegistration", - "description": "Allows the user to complete the required information for a partial registration.", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "input", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CustomerSimpleCreateInputGraphInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerCreate", - "description": "Creates a new customer register.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CustomerCreateInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerEmailChange", - "description": "Changes user email.", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "input", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CustomerEmailChangeInput", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerImpersonate", - "description": "Impersonates a customer, generating an access token with expiration time.", - "args": [ - { - "name": "customerAccessToken", - "description": "The customer access token.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "input", - "description": "The e-mail input.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerPasswordChange", - "description": "Changes user password.", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "input", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CustomerPasswordChangeInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerPasswordChangeByRecovery", - "description": "Change user password by recovery.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CustomerPasswordChangeByRecoveryInput", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerPasswordRecovery", - "description": "Sends a password recovery email to the user.", - "args": [ - { - "name": "input", - "description": "The input used to login. Can be either an email or a CPF/CNPJ, if the option is enabled on store settings.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSimpleLoginStart", - "description": "Returns the user associated with a simple login (CPF or Email) if exists, else return a New user.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "SimpleLogin", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSimpleLoginVerifyAnwser", - "description": "Verify if the answer to a simple login question is correct, returns a new question if the answer is incorrect", - "args": [ - { - "name": "answerId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "input", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "questionId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "SimpleLogin", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSocialLoginFacebook", - "description": "Returns the user associated with a Facebook account if exists, else return a New user.", - "args": [ - { - "name": "facebookAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSocialLoginGoogle", - "description": "Returns the user associated with a Google account if exists, else return a New user.", - "args": [ - { - "name": "clientId", - "description": "[Deprecated: Google no longer sends this information in the authentication process] The client Id returned from the google credential object.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "userCredential", - "description": "The user credential after authorizing through the google popup window.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSubscriptionAddressChange", - "description": "Allows a customer to change the delivery address for an existing subscription.", - "args": [ - { - "name": "addressId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscriptionId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSubscriptionProductAdd", - "description": "Add products to an existing subscription", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "products", - "description": "Products to be added to an existing subscription.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SubscriptionProductsInput", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "subscriptionId", - "description": "Subscription identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSubscriptionProductRemove", - "description": "Remove products to an existing subscription", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscriptionId", - "description": "Subscription identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscriptionProducts", - "description": "Products to be removed from an existing subscription.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "RemoveSubscriptionProductInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerSubscriptionUpdateStatus", - "description": "Allows a customer to change an existing subscription status.", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "status", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "Status", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscriptionId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerUpdate", - "description": "Updates a customer register.", - "args": [ - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CustomerUpdateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "eventListAddProduct", - "description": "Adds products to the event list.", - "args": [ - { - "name": "eventListToken", - "description": "The event list token", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "products", - "description": "Products to be added", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "EventListAddProductInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partnerAccessTokenCreate", - "description": "Creates a new closed scope partner access token with an expiration time.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "PartnerAccessTokenInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "PartnerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productCounterOfferSubmit", - "description": "Submits a counteroffer for a product.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CounterOfferInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productFriendRecommend", - "description": "Mutation for recommend a product to a friend", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "FriendRecommendInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productPriceAlert", - "description": "Add a price alert.", - "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AddPriceAlertInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ProductPriceAlert", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productRestockAlert", - "description": "Creates an alert to notify when the product is back in stock.", - "args": [ - { - "name": "input", - "description": "Params to create an alert for product back in stock.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "RestockAlertInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "partnerAccessToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "RestockAlertNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sendGenericForm", - "description": "Send a generic form.", - "args": [ - { - "name": "body", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Any", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "file", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "OperationResult", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateAddress", - "description": "Change an existing address", - "args": [ - { - "name": "address", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateCustomerAddressInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customerAccessToken", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "id", - "description": "The customer address unique identifier.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use the CustomerAddressUpdate mutation." - }, - { - "name": "wishlistAddProduct", - "description": "Adds a product to the customer's wishlist.", - "args": [ - { - "name": "customerAccessToken", - "description": "A customer's access token", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productId", - "description": "ID of the product to be added to the customer's wishlist", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "wishlistRemoveProduct", - "description": "Removes a product from the customer's wishlist.", - "args": [ - { - "name": "customerAccessToken", - "description": "A customer's access token", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productId", - "description": "ID of the product to be removed from the customer's wishlist", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INTERFACE", - "name": "Node", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Checkout", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Customer", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Hotsite", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "SingleHotsite", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Brand", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "ProductOption", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Category", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Customization", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "SingleProduct", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "BuyList", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "ProductVariant", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "MenuGroup", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Product", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Partner", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Banner", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Content", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Attribute", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "ProductAttribute", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Menu", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "ShippingQuote", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "paymentMethod", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "InformationGroupFieldNode", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "CheckoutShippingQuoteGroupNode", - "description": null, - "fields": [ - { - "name": "distributionCenter", - "description": "The distribution center.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "DistributionCenter", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "The products related to the shipping quote group.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ShippingQuoteGroupProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedShipping", - "description": "Selected Shipping.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ShippingNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SelectedPaymentMethod", - "description": "The selected payment method details.", - "fields": [ - { - "name": "html", - "description": "The payment html.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The unique identifier for the selected payment method.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installments", - "description": "The list of installments associated with the selected payment method.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SelectedPaymentMethodInstallment", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentMethodId", - "description": "The payment Method Id.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scripts", - "description": "Payment related scripts.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedInstallment", - "description": "The selected installment.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SelectedPaymentMethodInstallment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "suggestedCards", - "description": "The suggested cards.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SuggestedCard", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutAddress", - "description": "Represents an address node in the checkout.", - "fields": [ - { - "name": "addressNumber", - "description": "The street number of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cep", - "description": "The ZIP code of the address.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "city", - "description": "The city of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "complement", - "description": "The additional address information.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "neighborhood", - "description": "The neighborhood of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "referencePoint", - "description": "The reference point for the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "The state of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "street", - "description": "The street name of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Metadata", - "description": "Some products can have metadata, like diferent types of custom information. A basic key value pair.", - "fields": [ - { - "name": "key", - "description": "Metadata key.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "Metadata value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "DateTime", - "description": "The `DateTime` scalar represents an ISO-8601 compliant date time type.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderDelivery", - "description": "The delivery or store pickup details.", - "fields": [ - { - "name": "address", - "description": "The delivery or store pickup address.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutOrderAddress", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cost", - "description": "The cost of delivery or pickup.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliveryTime", - "description": "The estimated delivery or pickup time, in days.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliveryTimeInHours", - "description": "The estimated delivery or pickup time, in hours.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the recipient.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderPayment", - "description": "The checkout order payment.", - "fields": [ - { - "name": "card", - "description": "The card payment information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutOrderCardPayment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "invoice", - "description": "The bank invoice payment information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutOrderInvoicePayment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the payment method.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pix", - "description": "The Pix payment information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutOrderPixPayment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "OrderStatus", - "description": "Represents the status of an order.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "PAID", - "description": "Order has been paid.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "AWAITING_PAYMENT", - "description": "Order is awaiting payment.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELLED_TEMPORARILY_DENIED_CARD", - "description": "Order has been cancelled - Card Temporarily Denied.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELLED_DENIED_CARD", - "description": "Order has been cancelled - Card Denied.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELLED_FRAUD", - "description": "Order has been cancelled - Fraud.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELLED_SUSPECT_FRAUD", - "description": "Order has been cancelled - Suspected Fraud.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELLED_ORDER_CANCELLED", - "description": "Order has been cancelled.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELLED", - "description": "Order has been cancelled.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SENT", - "description": "Order has been sent.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "AUTHORIZED", - "description": "Order has been authorized.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SENT_INVOICED", - "description": "Order has been sent - Invoiced.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RETURNED", - "description": "Order has been returned.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DOCUMENTS_FOR_PURCHASE", - "description": "Documents needed for purchase.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "APPROVED_ANALYSIS", - "description": "Order has been approved in analysis.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RECEIVED_GIFT_CARD", - "description": "Order has been received - Gift Card.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SEPARATED", - "description": "Order has been separated.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ORDERED", - "description": "Order has been placed.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DELIVERED", - "description": "Order has been delivered.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "AWAITING_PAYMENT_CHANGE", - "description": "Order is awaiting change of payment method.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CHECKED_ORDER", - "description": "Order has been checked.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PICK_UP_IN_STORE", - "description": "Available for pick-up in store.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DENIED_PAYMENT", - "description": "Payment denied, but the order has not been cancelled.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CREDITED", - "description": "Order has been credited.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderProduct", - "description": "Represents a node in the checkout order products.", - "fields": [ - { - "name": "adjustments", - "description": "The list of adjustments applied to the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutOrderProductAdjustment", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "attributes", - "description": "The list of attributes of the product.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutOrderProductAttribute", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "The image URL of the product.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the product.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "The ID of the product variant.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "The quantity of the product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "unitValue", - "description": "The unit value of the product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderAdjustment", - "description": "Represents an adjustment applied to checkout.", - "fields": [ - { - "name": "name", - "description": "The name of the adjustment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of the adjustment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the adjustment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DeliveryScheduleDetail", - "description": "The delivery schedule detail.", - "fields": [ - { - "name": "date", - "description": "The date of the delivery schedule.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endDateTime", - "description": "The end date and time of the delivery schedule.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endTime", - "description": "The end time of the delivery schedule.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startDateTime", - "description": "The start date and time of the delivery schedule.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startTime", - "description": "The start time of the delivery schedule.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Float", - "description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point).", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DistributionCenter", - "description": "A distribution center.", - "fields": [ - { - "name": "id", - "description": "The distribution center unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sellerName", - "description": "The distribution center seller name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ShippingQuoteGroupProduct", - "description": "The product informations related to the shipping.", - "fields": [ - { - "name": "productVariantId", - "description": "The product unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "GroupShippingQuote", - "description": "The shipping quotes for group.", - "fields": [ - { - "name": "deadline", - "description": "The shipping deadline.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineInHours", - "description": "The shipping deadline, in hours.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The shipping name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingQuoteId", - "description": "The shipping quote unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The shipping type.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The shipping value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerAddressNode", - "description": null, - "fields": [ - { - "name": "address", - "description": "Address street.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "address2", - "description": "Address street 2.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressDetails", - "description": "Address details.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressNumber", - "description": "Address number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cep", - "description": "zip code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "city", - "description": "address city.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "country", - "description": "Country.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "The email of the customer address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the customer address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "neighborhood", - "description": "Address neighborhood.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "phone", - "description": "The phone of the customer address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "referencePoint", - "description": "Address reference point.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "State.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "street", - "description": "Address street.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": true, - "deprecationReason": "Use the 'address' field to get the address." - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Partner", - "description": "Partners are used to assign specific products or price tables depending on its scope.", - "fields": [ - { - "name": "alias", - "description": "The partner alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endDate", - "description": "The partner is valid until this date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullUrlLogo", - "description": "The full partner logo URL.", - "args": [ - { - "name": "height", - "description": "The height of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logoUrl", - "description": "The partner logo's URL.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The partner's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "origin", - "description": "The partner's origin.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partnerAccessToken", - "description": "The partner's access token.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partnerId", - "description": "Partner unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "portfolioId", - "description": "Portfolio identifier assigned to this partner.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "priceTableId", - "description": "Price table identifier assigned to this partner.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startDate", - "description": "The partner is valid from this date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of scoped the partner is used.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "wishlist", - "description": null, - "fields": [ - { - "name": "products", - "description": "Wishlist products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerInformationGroupNode", - "description": null, - "fields": [ - { - "name": "exibitionName", - "description": "The group exibition name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fields", - "description": "The group fields.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CustomerInformationGroupFieldNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The group name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerCheckingAccountHistoryNode", - "description": null, - "fields": [ - { - "name": "date", - "description": "Customer's checking account history date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "historic", - "description": "Description of the customer's checking account history.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Type of customer's checking account history.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "TypeCheckingAccount", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "Value of customer's checking account history.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "order", - "description": null, - "fields": [ - { - "name": "checkingAccount", - "description": "Checking account value used for the order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "coupon", - "description": "The coupon for discounts.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "date", - "description": "The date when te order was placed.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliveryAddress", - "description": "The address where the order will be delivered.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "OrderDeliveryAddressNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discount", - "description": "Order discount amount, if any.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "interestFee", - "description": "Order interest fee, if any.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "invoices", - "description": "Information about order invoices.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderInvoiceNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notes", - "description": "Information about order notes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderNoteNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orderId", - "description": "Order unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentDate", - "description": "The date when the order was payed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "payments", - "description": "Information about payments.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderPaymentNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "Products belonging to the order.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderProductNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promotions", - "description": "List of promotions applied to the order.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingFee", - "description": "The shipping fee.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippings", - "description": "Information about order shippings.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderShippingNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": "The order current status.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "OrderStatusNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "statusHistory", - "description": "List of the order status history.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderStatusNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptions", - "description": "List of order subscriptions.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderSubscriptionNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subtotal", - "description": "Order subtotal value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": "Order total value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "trackings", - "description": "Information about order trackings.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderTrackingNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerOrdersStatistics", - "description": null, - "fields": [ - { - "name": "productsQuantity", - "description": "The number of products the customer made from the number of orders.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "The number of orders the customer made.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerSubscriptionPayment", - "description": null, - "fields": [ - { - "name": "card", - "description": "The details of the payment card associated with the subscription.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerSubscriptionPaymentCard", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of payment for the subscription.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerSubscriptionRecurring", - "description": null, - "fields": [ - { - "name": "days", - "description": "The number of days between recurring payments.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "The description of the recurring subscription.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the recurring subscription.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "recurringId", - "description": "The recurring subscription id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removed", - "description": "Indicates whether the recurring subscription is removed.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerSubscriptionProduct", - "description": null, - "fields": [ - { - "name": "productVariantId", - "description": "The id of the product variant associated with the subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "The quantity of the product variant in the subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removed", - "description": "Indicates whether the product variant is removed from the subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionProductId", - "description": "The id of the subscription product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The monetary value of the product variant in the subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "HotsiteSorting", - "description": null, - "fields": [ - { - "name": "direction", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "field", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "ProductSortKeys", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "HotsiteSubtype", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "CATEGORY", - "description": "Hotsite created from a category.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BRAND", - "description": "Hotsite created from a brand.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PORTFOLIO", - "description": "Hotsite created from a portfolio.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BUY_LIST", - "description": "Hotsite created from a buy list (lista de compra).", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Banner", - "description": "A banner is usually an image used to show sales, highlight products, announcements or to redirect to another page or hotsite on click.", - "fields": [ - { - "name": "altText", - "description": "Banner's alternative text.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "bannerId", - "description": "Banner unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "bannerName", - "description": "Banner's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "bannerUrl", - "description": "URL where the banner is stored.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "creationDate", - "description": "The date the banner was created.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnAllPages", - "description": "Field to check if the banner should be displayed on all pages.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnCategories", - "description": "Field to check if the banner should be displayed on category pages.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnSearches", - "description": "Field to check if the banner should be displayed on search pages.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayOnWebsite", - "description": "Field to check if the banner should be displayed on the website.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayToPartners", - "description": "Field to check if the banner should be displayed to partners.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "height", - "description": "The banner's height in px.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "openNewTab", - "description": "Field to check if the banner URL should open in another tab on click.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "The displaying order of the banner.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "position", - "description": "The displaying position of the banner.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "searchTerms", - "description": "A list of terms to display the banner on search.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The banner's title.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlOnClick", - "description": "URL to be redirected on click.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "width", - "description": "The banner's width in px.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Content", - "description": "Contents are used to show things to the user.", - "fields": [ - { - "name": "content", - "description": "The content in html to be displayed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contentId", - "description": "Content unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "creationDate", - "description": "The date the content was created.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "height", - "description": "The content's height in px.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "position", - "description": "The content's position.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "searchTerms", - "description": "A list of terms to display the content on search.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The content's title.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "width", - "description": "The content's width in px.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SEO", - "description": "Entity SEO information.", - "fields": [ - { - "name": "content", - "description": "Content of SEO.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "httpEquiv", - "description": "Equivalent SEO type for HTTP.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Name of SEO.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scheme", - "description": "Scheme for SEO.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Type of SEO.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Breadcrumb", - "description": "Informations about breadcrumb.", - "fields": [ - { - "name": "link", - "description": "Breadcrumb link.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "text", - "description": "Breadcrumb text.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductAggregations", - "description": null, - "fields": [ - { - "name": "filters", - "description": "List of product filters which can be used to filter subsequent queries.", - "args": [ - { - "name": "position", - "description": "The filter position.", - "type": { - "kind": "ENUM", - "name": "FilterPosition", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SearchFilter", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maximumPrice", - "description": "Minimum price of the products.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "minimumPrice", - "description": "Maximum price of the products.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "priceRanges", - "description": "List of price ranges for the selected products.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PriceRange", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "forbiddenTerm", - "description": "Informations about a forbidden search term.", - "fields": [ - { - "name": "suggested", - "description": "The suggested search term instead.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "text", - "description": "The text to display about the term.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Attribute", - "description": "Attributes available for the variant products from the given productId.", - "fields": [ - { - "name": "attributeId", - "description": "The id of the attribute.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayType", - "description": "The display type of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "The values of the attribute.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "AttributeValue", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Review", - "description": "A product review written by a customer.", - "fields": [ - { - "name": "customer", - "description": "The reviewer name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "The reviewer e-mail.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "rating", - "description": "The review rating.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "review", - "description": "The review content.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "reviewDate", - "description": "The review date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BuyTogetherGroup", - "description": "BuyTogetherGroups informations.", - "fields": [ - { - "name": "name", - "description": "BuyTogether name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "BuyTogether products", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SingleProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "BuyTogether type", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "BuyTogetherType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeSelection", - "description": "Attributes available for the variant products from the given productId.", - "fields": [ - { - "name": "canBeMatrix", - "description": "Check if the current product attributes can be rendered as a matrix.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "candidateVariant", - "description": "The candidate variant given the current input filters. Variant may be from brother product Id.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductVariant", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "matrix", - "description": "Informations about the attribute matrix.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "AttributeMatrix", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selectedVariant", - "description": "The selected variant given the current input filters. Variant may be from brother product Id.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ProductVariant", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selections", - "description": "Attributes available for the variant products from the given productId.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "AttributeSelectionOption", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DeadlineAlert", - "description": "Deadline alert informations.", - "fields": [ - { - "name": "deadline", - "description": "Deadline alert time", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "Deadline alert description", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "secondDeadline", - "description": "Second deadline alert time", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "secondDescription", - "description": "Second deadline alert description", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "secondTitle", - "description": "Second deadline alert title", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "Deadline alert title", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Image", - "description": "Informations about an image of a product.", - "fields": [ - { - "name": "fileName", - "description": "The name of the image file.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mini", - "description": "Check if the image is used for the product main image.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "Numeric order the image should be displayed.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "print", - "description": "Check if the image is used for the product prints only.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The url to retrieve the image", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Promotion", - "description": "Information about promotions of a product.", - "fields": [ - { - "name": "content", - "description": "The promotion html content.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "disclosureType", - "description": "Where the promotion is shown (spot, product page, etc..).", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endDate", - "description": "The end date for the promotion.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullStampUrl", - "description": "The stamp URL of the promotion.", - "args": [ - { - "name": "height", - "description": "The height of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The promotion id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stamp", - "description": "The stamp of the promotion.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The promotion title.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductBrand", - "description": null, - "fields": [ - { - "name": "alias", - "description": "The hotsite url alias fot this brand.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullUrlLogo", - "description": "The full brand logo URL.", - "args": [ - { - "name": "height", - "description": "The height of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The brand id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logoUrl", - "description": "The url that contains the brand logo image.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the brand.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Prices", - "description": "The prices of the product.", - "fields": [ - { - "name": "bestInstallment", - "description": "The best installment option available.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "BestInstallment", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discountPercentage", - "description": "The amount of discount in percentage.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discounted", - "description": "Wether the current price is discounted.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installmentPlans", - "description": "List of the possibles installment plans.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "InstallmentPlan", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "listPrice", - "description": "The listed regular price of the product.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "multiplicationFactor", - "description": "The multiplication factor used for items that are sold by quantity.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The current working price.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "priceTables", - "description": "List of the product different price tables. \n\n Only returned when using the partnerAccessToken or public price tables.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PriceTable", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "wholesalePrices", - "description": "Lists the different price options when buying the item over the given quantity.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "WholesalePrices", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductSubscription", - "description": null, - "fields": [ - { - "name": "discount", - "description": "The amount of discount if this product is sold as a subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The price of the product when sold as a subscription.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionOnly", - "description": "Wether this product is sold only as a subscrition.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductAttribute", - "description": "The attributes of the product.", - "fields": [ - { - "name": "attributeId", - "description": "The id of the attribute.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayType", - "description": "The display type of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Stock", - "description": "Information about a product stock in a particular distribution center.", - "fields": [ - { - "name": "id", - "description": "The id of the distribution center.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "items", - "description": "The number of physical items in stock at this DC.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the distribution center.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductCategory", - "description": "Information about the category of a product.", - "fields": [ - { - "name": "active", - "description": "Wether the category is currently active.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "googleCategories", - "description": "The categories in google format.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hierarchy", - "description": "The category hierarchy.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The id of the category.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "main", - "description": "Wether this category is the main category for this product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The category name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The category hotsite url alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Information", - "description": "Information registred to the product.", - "fields": [ - { - "name": "id", - "description": "The information id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The information title.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The information type.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The information value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SubscriptionGroup", - "description": null, - "fields": [ - { - "name": "recurringTypes", - "description": "The recurring types for this subscription group.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubscriptionRecurringType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": "The status name of the group.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "statusId", - "description": "The status id of the group.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroupId", - "description": "The subscription group id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionOnly", - "description": "Wether the product is only avaible for subscription.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SimilarProduct", - "description": "Information about a similar product.", - "fields": [ - { - "name": "alias", - "description": "The url alias of this similar product.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": "The file name of the similar product image.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "The URL of the similar product image.", - "args": [ - { - "name": "h", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "w", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the similar product.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BuyBox", - "description": "BuyBox informations.", - "fields": [ - { - "name": "installmentPlans", - "description": "List of the possibles installment plans.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "InstallmentPlan", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maximumPrice", - "description": "Maximum price among sellers.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "minimumPrice", - "description": "Minimum price among sellers.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantityOffers", - "description": "Quantity of offers.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sellers", - "description": "List of sellers.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Seller", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Seller", - "description": "Seller informations.", - "fields": [ - { - "name": "name", - "description": "Seller name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BuyListProduct", - "description": "Contains the id and quantity of a product in the buy list.", - "fields": [ - { - "name": "productId", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SellerOffer", - "description": "The seller's product offer", - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "prices", - "description": "The product prices.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SellerPrices", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PhysicalStore", - "description": "Informations about the physical store.", - "fields": [ - { - "name": "additionalText", - "description": "Additional text.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "address", - "description": "Physical store address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressDetails", - "description": "Physical store address details.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressNumber", - "description": "Physical store address number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "city", - "description": "Physical store address city.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "country", - "description": "Physical store country.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ddd", - "description": "Physical store DDD.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliveryDeadline", - "description": "Delivery deadline.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "Physical store email.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "latitude", - "description": "Physical store latitude.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "longitude", - "description": "Physical store longitude.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Physical store name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "neighborhood", - "description": "Physical store address neighborhood.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "phoneNumber", - "description": "Physical store phone number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "physicalStoreId", - "description": "Physical store ID.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pickup", - "description": "If the physical store allows pickup.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pickupDeadline", - "description": "Pickup deadline.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "Physical store state.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "zipCode", - "description": "Physical store zip code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Menu", - "description": "Informations about menu items.", - "fields": [ - { - "name": "cssClass", - "description": "Menu css class to apply.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullImageUrl", - "description": "The full image URL.", - "args": [ - { - "name": "height", - "description": "The height of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "Menu image url address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "level", - "description": "Menu hierarchy level.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "link", - "description": "Menu link address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "menuGroupId", - "description": "Menu group identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "menuId", - "description": "Menu identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Menu name.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "openNewTab", - "description": "Menu hierarchy level.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "Menu position order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentMenuId", - "description": "Parent menu identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "text", - "description": "Menu extra text.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderAdjustNode", - "description": null, - "fields": [ - { - "name": "name", - "description": "The adjust name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "note", - "description": "Note about the adjust.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Type of adjust.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "Amount to be adjusted.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderAttributeNode", - "description": null, - "fields": [ - { - "name": "name", - "description": "The attribute name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The attribute value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderPackagingNode", - "description": null, - "fields": [ - { - "name": "cost", - "description": "The packaging cost.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "The packaging description.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "message", - "description": "The message added to the packaging.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The packaging name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderCustomizationNode", - "description": null, - "fields": [ - { - "name": "cost", - "description": "The customization cost.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The customization name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The customization value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderTrackingNode", - "description": null, - "fields": [ - { - "name": "code", - "description": "The tracking code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The URL for tracking.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderSellerNode", - "description": null, - "fields": [ - { - "name": "name", - "description": "The seller's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutShippingDeadlineNode", - "description": null, - "fields": [ - { - "name": "deadline", - "description": "The shipping deadline", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "The shipping description", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "secondDescription", - "description": "The shipping second description", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "secondTitle", - "description": "The shipping second title", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The shipping title", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductAttributeNode", - "description": null, - "fields": [ - { - "name": "name", - "description": "The attribute name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The attribute type", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The attribute value", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductSubscription", - "description": "Information for the subscription of a product in checkout.", - "fields": [ - { - "name": "availableSubscriptions", - "description": "The available subscriptions.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutProductSubscriptionItemNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selected", - "description": "The selected subscription.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CheckoutProductSubscriptionItemNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductAdjustmentNode", - "description": null, - "fields": [ - { - "name": "observation", - "description": "The observation referent adjustment in Product", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type that was applied in product adjustment", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value that was applied to the product adjustment", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductSellerNode", - "description": null, - "fields": [ - { - "name": "distributionCenterId", - "description": "The distribution center ID.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sellerName", - "description": "The seller name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductCustomizationNode", - "description": null, - "fields": [ - { - "name": "availableCustomizations", - "description": "The available product customizations.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Customization", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The product customization unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "The product customization values.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CheckoutProductCustomizationValueNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "CEP", - "description": "Represents a CEP", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BannersConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BannersEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Banner", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BrandsConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BrandsEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Brand", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CategoriesConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CategoriesEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Category", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ContentsConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ContentsEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Content", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "HotsitesConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "HotsitesEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Hotsite", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PartnersConnection", - "description": "A connection to a list of items.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PartnersEdge", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A flattened list of the nodes.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Partner", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BannersEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Banner", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BrandsEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Brand", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CategoriesEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Category", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ContentsEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Content", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "HotsitesEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Hotsite", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PartnersEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "node", - "description": "The item at the end of the edge.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Partner", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderProductAdjustment", - "description": "Represents an adjustment applied to a product in the checkout order.", - "fields": [ - { - "name": "additionalInformation", - "description": "Additional information about the adjustment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the adjustment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of the adjustment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the adjustment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderProductAttribute", - "description": "Represents an attribute of a product.", - "fields": [ - { - "name": "name", - "description": "The name of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderCardPayment", - "description": "This represents a Card payment node in the checkout order.", - "fields": [ - { - "name": "brand", - "description": "The brand card.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cardInterest", - "description": "The interest generated by the card.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installments", - "description": "The installments generated for the card.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The cardholder name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "The final four numbers on the card.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderPixPayment", - "description": "This represents a Pix payment node in the checkout order.", - "fields": [ - { - "name": "qrCode", - "description": "The QR code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "qrCodeExpirationDate", - "description": "The expiration date of the QR code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "qrCodeUrl", - "description": "The image URL of the QR code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderInvoicePayment", - "description": "The invoice payment information.", - "fields": [ - { - "name": "digitableLine", - "description": "The digitable line.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentLink", - "description": "The payment link.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutOrderAddress", - "description": "The delivery or store Pickup Address.", - "fields": [ - { - "name": "address", - "description": "The street address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cep", - "description": "The ZIP code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "city", - "description": "The city.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "complement", - "description": "Additional information or details about the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isPickupStore", - "description": "Indicates whether the order is for store pickup.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "neighborhood", - "description": "The neighborhood.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pickupStoreText", - "description": ".", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SuggestedCard", - "description": null, - "fields": [ - { - "name": "brand", - "description": "Credit card brand.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "key", - "description": "Credit card key.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Customer name on credit card.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "Credit card number.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SelectedPaymentMethodInstallment", - "description": "Details of an installment of the selected payment method.", - "fields": [ - { - "name": "adjustment", - "description": "The adjustment value applied to the installment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "The installment number.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": "The total value of the installment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The individual value of each installment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "RemoveSubscriptionProductInput", - "description": "Represents the product to be removed from the subscription.", - "fields": null, - "inputFields": [ - { - "name": "subscriptionProductId", - "description": "The Id of the product within the subscription to be removed.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "SubscriptionProductsInput", - "description": "Represents the product to be applied to the subscription.", - "fields": null, - "inputFields": [ - { - "name": "productVariantId", - "description": "The variant Id of the product.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": "The quantity of the product.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "Status", - "description": "The subscription status to update.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ACTIVE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PAUSED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "SearchRecordInput", - "description": "The information to be saved for reports.", - "fields": null, - "inputFields": [ - { - "name": "operation", - "description": "The search operation (And, Or)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "page", - "description": "The current page", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "pageSize", - "description": "How many products show in page", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "pageUrl", - "description": "The client search page url", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "query", - "description": "The user search query", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "totalResults", - "description": "How many products the search returned", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SearchRecord", - "description": "The response data", - "fields": [ - { - "name": "date", - "description": "The date time of the processed request", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isSuccess", - "description": "If the record was successful", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "query", - "description": "The searched query", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CounterOfferInput", - "description": "Input data for submitting a counter offer for a product.", - "fields": null, - "inputFields": [ - { - "name": "additionalInfo", - "description": "Any additional information or comments provided by the user regarding the counter offer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "email", - "description": "The email address of the user submitting the counter offer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "price", - "description": "The proposed price by the user for the product.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The unique identifier of the product variant for which the counter offer is made.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "url", - "description": "URL linking to the page or the location where the product is listed.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "FriendRecommendInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "buyListId", - "description": "The buy list id", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "fromEmail", - "description": "Email of who is recommending a product", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "fromName", - "description": "Who is recommending", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "message", - "description": "The message", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productId", - "description": "The Product Id", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "toEmail", - "description": "Email of the person who will receive a product recommendation", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "toName", - "description": "Name of the person who will receive a product recommendation", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "RestockAlertInput", - "description": "Back in stock registration input parameters.", - "fields": null, - "inputFields": [ - { - "name": "email", - "description": "Email to be notified.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "Name of the person to be notified.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The product variant id of the product to be notified.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "RestockAlertNode", - "description": null, - "fields": [ - { - "name": "email", - "description": "Email to be notified.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Name of the person to be notified.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "The product variant id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "requestDate", - "description": "Date the alert was requested.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "AddPriceAlertInput", - "description": "Price alert input parameters.", - "fields": null, - "inputFields": [ - { - "name": "email", - "description": "The alerted's email.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The alerted's name.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The product variant id to create the price alert.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "targetPrice", - "description": "The target price to alert.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProductPriceAlert", - "description": "A product price alert.", - "fields": [ - { - "name": "email", - "description": "The alerted's email.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The alerted's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "priceAlertId", - "description": "The price alert ID.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "The product variant ID.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "requestDate", - "description": "The request date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "targetPrice", - "description": "The target price.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ReviewCreateInput", - "description": "Review input parameters.", - "fields": null, - "inputFields": [ - { - "name": "email", - "description": "The reviewer's email.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The reviewer's name.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The product variant id to add the review to.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "rating", - "description": "The review rating.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": "The google recaptcha token.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "review", - "description": "The review content.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "NewsletterInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "email", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "informationGroupValues", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "InformationGroupValueInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "recaptchaToken", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "NewsletterNode", - "description": null, - "fields": [ - { - "name": "createDate", - "description": "Newsletter creation date.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "The newsletter receiver email.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The newsletter receiver name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateDate", - "description": "Newsletter update date.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerSimpleCreateInputGraphInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "birthDate", - "description": "The date of birth of the customer.", - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cnpj", - "description": "The Brazilian tax identification number for corporations.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "corporateName", - "description": "The legal name of the corporate customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cpf", - "description": "The Brazilian tax identification number for individuals.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "customerType", - "description": "Indicates if it is a natural person or company profile.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EntityType", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "email", - "description": "The email of the customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "fullName", - "description": "The full name of the customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "isStateRegistrationExempt", - "description": "Indicates if the customer is state registration exempt.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "primaryPhoneAreaCode", - "description": "The area code for the customer's primary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "primaryPhoneNumber", - "description": "The customer's primary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "stateRegistration", - "description": "The state registration number for businesses.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SimpleLogin", - "description": null, - "fields": [ - { - "name": "customerAccessToken", - "description": "The customer access token", - "args": [], - "type": { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "question", - "description": "The simple login question to answer", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Question", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The simple login type", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SimpleLoginType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerEmailChangeInput", - "description": "The input to change the user email.", - "fields": null, - "inputFields": [ - { - "name": "newEmail", - "description": "The new email.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerPasswordChangeInput", - "description": "The input to change the user password.", - "fields": null, - "inputFields": [ - { - "name": "currentPassword", - "description": "The current password.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "newPassword", - "description": "The new password.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "newPasswordConfirmation", - "description": "New password confirmation.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerPasswordChangeByRecoveryInput", - "description": "The input to change the user password by recovery.", - "fields": null, - "inputFields": [ - { - "name": "key", - "description": "Key generated for password recovery.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "newPassword", - "description": "The new password.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "newPasswordConfirmation", - "description": "New password confirmation.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerUpdateInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "birthDate", - "description": "The date of birth of the customer.", - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "corporateName", - "description": "The legal name of the corporate customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "fullName", - "description": "The full name of the customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "gender", - "description": "The gender of the customer.", - "type": { - "kind": "ENUM", - "name": "Gender", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "informationGroupValues", - "description": "The customer information group values.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "InformationGroupValueInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "primaryPhoneNumber", - "description": "The customer's primary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "primaryPhoneNumberInternational", - "description": "The customer's primary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "rg", - "description": "The Brazilian register identification number for individuals.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "secondaryPhoneNumber", - "description": "The customer's secondary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "secondaryPhoneNumberInternational", - "description": "The customer's secondary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "stateRegistration", - "description": "The state registration number for businesses.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerCreateInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "address", - "description": "The street address for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "address2", - "description": "The street address for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressComplement", - "description": "Any additional information related to the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressNumber", - "description": "The building number for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "birthDate", - "description": "The date of birth of the customer.", - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cep", - "description": "The CEP for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "city", - "description": "The city for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cnpj", - "description": "The Brazilian tax identification number for corporations.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "corporateName", - "description": "The legal name of the corporate customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "country", - "description": "The country for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cpf", - "description": "The Brazilian tax identification number for individuals.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "customerType", - "description": "Indicates if it is a natural person or company profile.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EntityType", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "email", - "description": "The email of the customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "fullName", - "description": "The full name of the customer.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "gender", - "description": "The gender of the customer.", - "type": { - "kind": "ENUM", - "name": "Gender", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "informationGroupValues", - "description": "The customer information group values.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "InformationGroupValueInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "isStateRegistrationExempt", - "description": "Indicates if the customer is state registration exempt.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "neighborhood", - "description": "The neighborhood for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "newsletter", - "description": "Indicates if the customer has subscribed to the newsletter.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "password", - "description": "The password for the customer's account.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "passwordConfirmation", - "description": "The password confirmation for the customer's account.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "primaryPhoneAreaCode", - "description": "The area code for the customer's primary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "primaryPhoneNumber", - "description": "The customer's primary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "receiverName", - "description": "The name of the receiver for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "reference", - "description": "A reference point or description to help locate the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "reseller", - "description": "Indicates if the customer is a reseller.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "secondaryPhoneAreaCode", - "description": "The area code for the customer's secondary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "secondaryPhoneNumber", - "description": "The customer's secondary phone number.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "state", - "description": "The state for the registered address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "stateRegistration", - "description": "The state registration number for businesses.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "PartnerAccessTokenInput", - "description": "The input to authenticate closed scope partners.", - "fields": null, - "inputFields": [ - { - "name": "password", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "username", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PartnerAccessToken", - "description": null, - "fields": [ - { - "name": "token", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "validUntil", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerAuthenticateInput", - "description": "The input to authenticate a user.", - "fields": null, - "inputFields": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "password", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CustomerAccessTokenInput", - "description": "The input to authenticate a user.", - "fields": null, - "inputFields": [ - { - "name": "email", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "password", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerAccessToken", - "description": null, - "fields": [ - { - "name": "isMaster", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "legacyToken", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "token", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The user login type", - "args": [], - "type": { - "kind": "ENUM", - "name": "LoginType", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "validUntil", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "EventListAddProductInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "productVariantId", - "description": "The unique identifier of the product variant.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": "The quantity of the product to be added.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CreateCustomerAddressInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "address", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "address2", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressDetails", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressNumber", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cep", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "CEP", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "city", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "country", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "CountryCode", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "email", - "description": null, - "type": { - "kind": "SCALAR", - "name": "EmailAddress", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "neighborhood", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "phone", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "referencePoint", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "state", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "street", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "UpdateCustomerAddressInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "address", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "address2", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressDetails", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressNumber", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "cep", - "description": null, - "type": { - "kind": "SCALAR", - "name": "CEP", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "city", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "country", - "description": null, - "type": { - "kind": "SCALAR", - "name": "CountryCode", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "email", - "description": null, - "type": { - "kind": "SCALAR", - "name": "EmailAddress", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "neighborhood", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "phone", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "referencePoint", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "state", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "street", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "CheckoutResetType", - "description": "The checkout areas available to reset", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "PAYMENT", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OperationResult", - "description": "Result of the operation.", - "fields": [ - { - "name": "isSuccess", - "description": "If the operation is a success.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutMetadataInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "key", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "value", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerInformationGroupFieldNode", - "description": null, - "fields": [ - { - "name": "name", - "description": "The field name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "The field order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "required", - "description": "If the field is required.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The field value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "InStorePickupAdditionalInformationInput", - "description": "The additional information about in-store pickup", - "fields": null, - "inputFields": [ - { - "name": "document", - "description": "The document", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The name", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DeliveryScheduleInput", - "description": "Input for delivery scheduling.", - "fields": null, - "inputFields": [ - { - "name": "date", - "description": "The date.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "periodId", - "description": "The period ID.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductUpdateInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "product", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductItemUpdateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "products", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductItemInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductItemInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "customization", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutCustomizationInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customizationId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "metadata", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutMetadataInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscription", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CheckoutSubscriptionInput", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Uri", - "description": "Node of URI Kind.", - "fields": [ - { - "name": "hotsiteSubtype", - "description": "The origin of the hotsite.", - "args": [], - "type": { - "kind": "ENUM", - "name": "HotsiteSubtype", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "kind", - "description": "Path kind.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "UriKind", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "partnerSubtype", - "description": "The partner subtype.", - "args": [], - "type": { - "kind": "ENUM", - "name": "PartnerSubtype", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productAlias", - "description": "Product alias.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productCategoriesIds", - "description": "Product categories IDs.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "redirectCode", - "description": "Redirect status code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "redirectUrl", - "description": "Url to redirect.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ShopSetting", - "description": "Store setting.", - "fields": [ - { - "name": "name", - "description": "Setting name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "Setting value", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "productsInput", - "description": "The list of products to quote shipping.", - "fields": null, - "inputFields": [ - { - "name": "productVariantId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ShippingQuote", - "description": "A shipping quote.", - "fields": [ - { - "name": "deadline", - "description": "The shipping deadline.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineInHours", - "description": "The shipping deadline in hours.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deliverySchedules", - "description": "The available time slots for scheduling the delivery of the shipping quote.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "deliverySchedule", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The shipping name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "The products related to the shipping.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ShippingProduct", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingQuoteId", - "description": "The shipping quote unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Uuid", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The shipping type.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The shipping value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "Operation", - "description": "Types of operations to perform between query terms.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "AND", - "description": "Performs AND operation between query terms.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OR", - "description": "Performs OR operation between query terms.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ScriptPageType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ALL", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "HOME", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SEARCH", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CATEGORY", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BRAND", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PRODUCT", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ScriptPosition", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "HEADER_START", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "HEADER_END", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BODY_START", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BODY_END", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FOOTER_START", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FOOTER_END", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Script", - "description": "Returns the scripts registered in the script manager.", - "fields": [ - { - "name": "content", - "description": "The script content.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The script name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageType", - "description": "The script page type.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ScriptPageType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "position", - "description": "The script position.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ScriptPosition", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "priority", - "description": "The script priority.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CalculatePricesProductsInput", - "description": "The products to calculate prices.", - "fields": null, - "inputFields": [ - { - "name": "productVariantId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "quantity", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProductRecommendationAlgorithm", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "DEFAULT", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ProductExplicitFiltersInput", - "description": "Filter product results based on giving attributes.", - "fields": null, - "inputFields": [ - { - "name": "attributes", - "description": "The set of attributes do filter.", - "type": { - "kind": "INPUT_OBJECT", - "name": "AttributeInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "available", - "description": "Choose if you want to retrieve only the available products in stock.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "brandId", - "description": "The set of brand IDs which the result item brand ID must be included in.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "categoryId", - "description": "The set of category IDs which the result item category ID must be included in.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "ean", - "description": "The set of EANs which the result item EAN must be included.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "externalParentId", - "description": "An external parent ID or a list of IDs to search for products with the external parent ID.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "hasImages", - "description": "Retrieve the product variant only if it contains images.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "ignoreDisplayRules", - "description": "Ignores the display rules when searching for products.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "mainVariant", - "description": "Retrieve the product variant only if it is the main product variant.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "parentId", - "description": "A parent ID or a list of IDs to search for products with the parent ID.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "prices", - "description": "The set of prices to filter.", - "type": { - "kind": "INPUT_OBJECT", - "name": "PricesInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productId", - "description": "The product unique identifier (you may provide a list of IDs if needed).", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": "The product variant unique identifier (you may provide a list of IDs if needed).", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "sameParentAs", - "description": "A product ID or a list of IDs to search for other products with the same parent ID.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "sku", - "description": "The set of SKUs which the result item SKU must be included.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "stock_gte", - "description": "Show products with a quantity of available products in stock greater than or equal to the given number.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "stock_lte", - "description": "Show products with a quantity of available products in stock less than or equal to the given number.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "stocks", - "description": "The set of stocks to filter.", - "type": { - "kind": "INPUT_OBJECT", - "name": "StocksInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedAt_gte", - "description": "Retrieve products which the last update date is greater than or equal to the given date.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedAt_lte", - "description": "Retrieve products which the last update date is less than or equal to the given date.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "paymentMethod", - "description": null, - "fields": [ - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "imageUrl", - "description": "The url link that displays for the payment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the payment method.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "PartnerByRegionInput", - "description": "Input for partners.", - "fields": null, - "inputFields": [ - { - "name": "cep", - "description": "CEP to get the regional partners.", - "type": { - "kind": "SCALAR", - "name": "CEP", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "regionId", - "description": "Region ID to get the regional partners.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "PartnerSortKeys", - "description": "Define the partner attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The partner unique identifier.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NAME", - "description": "The partner name.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EnumInformationGroup", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "PESSOA_FISICA", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PESSOA_JURIDICA", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NEWSLETTER", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "InformationGroupFieldNode", - "description": null, - "fields": [ - { - "name": "displayType", - "description": "The information group field display type.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fieldName", - "description": "The information group field name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The node unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "order", - "description": "The information group field order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "required", - "description": "If the information group field is required.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "The information group field preset values.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "InformationGroupFieldValueNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Node", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "HotsiteSortKeys", - "description": "Define the hotsite attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The hotsite id.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NAME", - "description": "The hotsite name.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "URL", - "description": "The hotsite url.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EventListStore", - "description": "Represents a list of store events.", - "fields": [ - { - "name": "date", - "description": "Date of the event", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "eventType", - "description": "Event type name of the event", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logoUrl", - "description": "URL of the event's logo", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the event.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The URL of the event.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EventListType", - "description": "Represents a list of events types.", - "fields": [ - { - "name": "logoUrl", - "description": "The URL of the event's logo.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the event.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "urlPath", - "description": "The URL path of the event.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EventList", - "description": "Represents a list of events with their details.", - "fields": [ - { - "name": "coverUrl", - "description": "URL of the event's cover image", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "date", - "description": "Date of the event", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "eventType", - "description": "Type of the event", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isOwner", - "description": "Indicates if the token is from the owner of this event list", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logoUrl", - "description": "URL of the event's logo", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerName", - "description": "Name of the event owner", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "Event title", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "URL of the event", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerAccessTokenDetails", - "description": null, - "fields": [ - { - "name": "customerId", - "description": "The customer id", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "identifier", - "description": "The identifier linked to the access token", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isMaster", - "description": "Specifies whether the user is a master user", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "origin", - "description": "The user login origin", - "args": [], - "type": { - "kind": "ENUM", - "name": "LoginOrigin", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The user login type", - "args": [], - "type": { - "kind": "ENUM", - "name": "LoginType", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "validUntil", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ContentSortKeys", - "description": "Define the content attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The content's unique identifier.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CreationDate", - "description": "The content's creation date.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutLite", - "description": null, - "fields": [ - { - "name": "completed", - "description": "Indicates if the checkout is completed.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "customerId", - "description": "The customer ID associated with the checkout.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "CategorySortKeys", - "description": "Define the category attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The category unique identifier.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NAME", - "description": "The category name.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "BrandSortKeys", - "description": "Define the brand attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The brand unique identifier.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NAME", - "description": "The brand name.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "BrandFilterInput", - "description": "Filter brand results based on giving attributes.", - "fields": null, - "inputFields": [ - { - "name": "brandIds", - "description": "Its unique identifier (you may provide a list of IDs if needed).", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "groupIds", - "description": "Its brand group unique identifier (you may provide a list of IDs if needed).", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "groupNames", - "description": "The set of group brand names which the result item name must be included in.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "names", - "description": "The set of brand names which the result item name must be included in.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "BannerSortKeys", - "description": "Define the banner attribute which the result set will be sorted on.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ID", - "description": "The banner's unique identifier.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CREATION_DATE", - "description": "The banner's creation date.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Autocomplete", - "description": "Get query completion suggestion.", - "fields": [ - { - "name": "products", - "description": "Suggested products based on the current query.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Product", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "suggestions", - "description": "List of possible query completions.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AddressNode", - "description": null, - "fields": [ - { - "name": "cep", - "description": "Zip code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "city", - "description": "Address city.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "country", - "description": "Address country.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "neighborhood", - "description": "Address neighborhood.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "Address state.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "street", - "description": "Address street.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "TypeCheckingAccount", - "description": "Represents the Type of Customer's Checking Account.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Credit", - "description": "Credit", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Debit", - "description": "Debit", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderNoteNode", - "description": null, - "fields": [ - { - "name": "date", - "description": "Date the note was added to the order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "note", - "description": "The note added to the order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "user", - "description": "The user who added the note to the order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderDeliveryAddressNode", - "description": null, - "fields": [ - { - "name": "addressNumber", - "description": "The street number of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cep", - "description": "The ZIP code of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "city", - "description": "The city of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "complement", - "description": "The additional address information.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "country", - "description": "The country of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "neighboorhood", - "description": "The neighborhood of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "receiverName", - "description": "The receiver's name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "referencePoint", - "description": "The reference point for the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "The state of the address, abbreviated.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "street", - "description": "The street name of the address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderShippingNode", - "description": null, - "fields": [ - { - "name": "deadline", - "description": "Limit date of delivery, in days.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineInHours", - "description": "Limit date of delivery, in hours.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deadlineText", - "description": "Deadline text message.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "distributionCenterId", - "description": "Distribution center unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pickUpId", - "description": "The order pick up unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "products", - "description": "The products belonging to the order.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderShippingProductNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promotion", - "description": "Amount discounted from shipping costs, if any.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "refConnector", - "description": "Shipping company connector identifier code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scheduleFrom", - "description": "Start date of shipping schedule.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scheduleUntil", - "description": "Limit date of shipping schedule.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingFee", - "description": "Shipping fee value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingName", - "description": "The shipping name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shippingTableId", - "description": "Shipping rate table unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": "The total value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "volume", - "description": "Order package size.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "weight", - "description": "The order weight, in grams.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderInvoiceNode", - "description": null, - "fields": [ - { - "name": "accessKey", - "description": "The invoice access key.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "invoiceCode", - "description": "The invoice identifier code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "serialDigit", - "description": "The invoice serial digit.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The invoice URL.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderPaymentNode", - "description": null, - "fields": [ - { - "name": "additionalInfo", - "description": "Additional information for the payment.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrderPaymentAdditionalInfoNode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "boleto", - "description": "The boleto information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "OrderPaymentBoletoNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "card", - "description": "The card information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "OrderPaymentCardNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discount", - "description": "Order discounted value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fees", - "description": "Order additional fees value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installmentValue", - "description": "Value per installment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installments", - "description": "Number of installments.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "message", - "description": "Message about payment transaction.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentOption", - "description": "The chosen payment option for the order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pix", - "description": "The pix information.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "OrderPaymentPixNode", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": "Current payment status.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": "Order total value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderStatusNode", - "description": null, - "fields": [ - { - "name": "changeDate", - "description": "The date when status has changed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": "Order status.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "statusId", - "description": "Status unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderSubscriptionNode", - "description": null, - "fields": [ - { - "name": "recurringDays", - "description": "The length of the order signature period.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "recurringName", - "description": "The order subscription period type.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroupId", - "description": "The order signing group identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionId", - "description": "subscription unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionOrderId", - "description": "The subscription's order identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The subscription fee for the order.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CustomerSubscriptionPaymentCard", - "description": null, - "fields": [ - { - "name": "brand", - "description": "The brand of the payment card (e.g., Visa, MasterCard).", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "expiration", - "description": "The expiration date of the payment card.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "The masked or truncated number of the payment card.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SearchFilter", - "description": "Aggregated filters of a list of products.", - "fields": [ - { - "name": "field", - "description": "The name of the field.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "origin", - "description": "The origin of the field.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "List of the values of the field.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SearchFilterItem", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "FilterPosition", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "VERTICAL", - "description": "Vertical filter position.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "HORIZONTAL", - "description": "Horizontal filter position.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BOTH", - "description": "Both filter position.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PriceRange", - "description": "Range of prices for this product.", - "fields": [ - { - "name": "quantity", - "description": "The quantity of products in this range.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "range", - "description": "The price range.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeValue", - "description": "Attributes values with variants", - "fields": [ - { - "name": "productVariants", - "description": "Product variants that have the attribute.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProductVariant", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "BuyTogetherType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "PRODUCT", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CAROUSEL", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeSelectionOption", - "description": "Attributes available for the variant products from the given productId.", - "fields": [ - { - "name": "attributeId", - "description": "The id of the attribute.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayType", - "description": "The display type of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "The values of the attribute.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "AttributeSelectionOptionValue", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "varyByParent", - "description": "If the attributes varies by parent.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeMatrix", - "description": null, - "fields": [ - { - "name": "column", - "description": "Information about the column attribute.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "AttributeMatrixInfo", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "data", - "description": "The matrix products data. List of rows.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "AttributeMatrixProduct", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "row", - "description": "Information about the row attribute.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "AttributeMatrixInfo", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BestInstallment", - "description": null, - "fields": [ - { - "name": "discount", - "description": "Wether the installment has discount.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "displayName", - "description": "The custom display name of the best installment plan option.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fees", - "description": "Wether the installment has fees.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the best installment plan option.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "The number of installments.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the installment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "InstallmentPlan", - "description": null, - "fields": [ - { - "name": "displayName", - "description": "The custom display name of this installment plan.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installments", - "description": "List of the installments.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Installment", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of this installment plan.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PriceTable", - "description": null, - "fields": [ - { - "name": "discountPercentage", - "description": "The amount of discount in percentage.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The id of this price table.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "listPrice", - "description": "The listed regular price of this table.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The current working price of this table.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "WholesalePrices", - "description": null, - "fields": [ - { - "name": "price", - "description": "The wholesale price.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "The minimum quantity required for the wholesale price to be applied", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SubscriptionRecurringType", - "description": null, - "fields": [ - { - "name": "days", - "description": "The number of days of the recurring type.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The recurring type display name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "recurringTypeId", - "description": "The recurring type id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SellerPrices", - "description": "The prices of the product.", - "fields": [ - { - "name": "installmentPlans", - "description": "List of the possibles installment plans.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SellerInstallmentPlan", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "listPrice", - "description": "The listed regular price of the product.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The current working price.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductSubscriptionItemNode", - "description": null, - "fields": [ - { - "name": "name", - "description": "Display text.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "recurringDays", - "description": "The number of days of the recurring type.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "recurringTypeId", - "description": "The recurring type id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selected", - "description": "If selected.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroupDiscount", - "description": "Subscription group discount value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionGroupId", - "description": "The subscription group id.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CheckoutProductCustomizationValueNode", - "description": null, - "fields": [ - { - "name": "cost", - "description": "The product customization cost.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The product customization name.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The product customization value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "EmailAddress", - "description": "The EmailAddress scalar type constitutes a valid email address, represented as a UTF-8 character sequence. The scalar follows the specification defined by the HTML Spec https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "CountryCode", - "description": "String representing a country code", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SellerInstallmentPlan", - "description": null, - "fields": [ - { - "name": "displayName", - "description": "The custom display name of this installment plan.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "installments", - "description": "List of the installments.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SellerInstallment", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Installment", - "description": null, - "fields": [ - { - "name": "discount", - "description": "Wether the installment has discount.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fees", - "description": "Wether the installment has fees.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "The number of installments.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the installment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeMatrixProduct", - "description": null, - "fields": [ - { - "name": "available", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stock", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeMatrixInfo", - "description": null, - "fields": [ - { - "name": "displayType", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "AttributeMatrixRowColumnInfoValue", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeSelectionOptionValue", - "description": null, - "fields": [ - { - "name": "alias", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "available", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "printUrl", - "description": null, - "args": [ - { - "name": "height", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "selected", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the attribute.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SearchFilterItem", - "description": "Details of a filter value.", - "fields": [ - { - "name": "name", - "description": "The name of the value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "The quantity of product with this value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderPaymentPixNode", - "description": null, - "fields": [ - { - "name": "qrCode", - "description": "The QR code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "qrCodeExpirationDate", - "description": "The expiration date of the QR code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "qrCodeUrl", - "description": "The image URL of the QR code.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderPaymentBoletoNode", - "description": null, - "fields": [ - { - "name": "digitableLine", - "description": "The digitable line.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentLink", - "description": "The payment link.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderPaymentCardNode", - "description": null, - "fields": [ - { - "name": "brand", - "description": "The brand of the card.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maskedNumber", - "description": "The masked credit card number with only the last 4 digits displayed.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderPaymentAdditionalInfoNode", - "description": null, - "fields": [ - { - "name": "key", - "description": "Additional information key.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "Additional information value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrderShippingProductNode", - "description": null, - "fields": [ - { - "name": "distributionCenterId", - "description": "Distribution center unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "price", - "description": "The product price.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "productVariantId", - "description": "Variant unique identifier.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "quantity", - "description": "Quantity of the given product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "LoginOrigin", - "description": "The user login origin.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "SOCIAL", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SIMPLE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "InformationGroupFieldValueNode", - "description": null, - "fields": [ - { - "name": "order", - "description": "The information group field value order.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The information group field value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "StocksInput", - "description": "Input to specify the range of stocks, distribution center ID, and distribution center name to return.", - "fields": null, - "inputFields": [ - { - "name": "dcId", - "description": "The distribution center Ids to match.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "dcName", - "description": "The distribution center names to match.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "stock_gte", - "description": "The product stock must be greater than or equal to.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "stock_lte", - "description": "The product stock must be lesser than or equal to.", - "type": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "PricesInput", - "description": "Input to specify the range of prices to return.", - "fields": null, - "inputFields": [ - { - "name": "discount_gte", - "description": "The product discount must be greater than or equal to.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "discount_lte", - "description": "The product discount must be lesser than or equal to.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "discounted", - "description": "Return only products where the listed price is more than the price.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "price_gte", - "description": "The product price must be greater than or equal to.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "price_lte", - "description": "The product price must be lesser than or equal to.", - "type": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "AttributeInput", - "description": "Input to specify which attributes to match.", - "fields": null, - "inputFields": [ - { - "name": "id", - "description": "The attribute Ids to match.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The attribute name to match.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The attribute type to match.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "value", - "description": "The attribute value to match", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "deliverySchedule", - "description": "A representation of available time slots for scheduling a delivery.", - "fields": [ - { - "name": "date", - "description": "The date of the delivery schedule.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "DateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "periods", - "description": "The list of time periods available for scheduling a delivery.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "period", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ShippingProduct", - "description": "The product informations related to the shipping.", - "fields": [ - { - "name": "productVariantId", - "description": "The product unique identifier.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The shipping value related to the product.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "PartnerSubtype", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "OPEN", - "description": "Partner 'open' subtype.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CLOSED", - "description": "Partner 'closed' subtype.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CLIENT", - "description": "Partner 'client' subtype.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "UriKind", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "PRODUCT", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "HOTSITE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "REDIRECT", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NOT_FOUND", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PARTNER", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "BUY_LIST", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutSubscriptionInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "recurringTypeId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscriptionGroupId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutCustomizationInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "customizationId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "value", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CheckoutProductItemUpdateInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "customization", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CheckoutCustomizationInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "customizationId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "productVariantId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subscription", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "CheckoutSubscriptionInput", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "LoginType", - "description": "The user login type.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "NEW", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SIMPLE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "AUTHENTICATED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "Gender", - "description": "The customer's gender.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "MALE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FEMALE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Question", - "description": null, - "fields": [ - { - "name": "answers", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Answer", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "question", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "questionId", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SimpleLoginType", - "description": "The simple login type.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "NEW", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SIMPLE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EntityType", - "description": "Define the entity type of the customer registration.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "PERSON", - "description": "An individual person, a physical person.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "COMPANY", - "description": "Legal entity, a company, business, organization.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INTERNATIONAL", - "description": "An international person, a legal international entity.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "InformationGroupValueInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "id", - "description": "The information group field unique identifier.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "value", - "description": "The information group field value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Answer", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "period", - "description": "Represents a time period available for scheduling a delivery.", - "fields": [ - { - "name": "end", - "description": "The end time of the time period.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The unique identifier of the time period.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Long", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "start", - "description": "The start time of the time period.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AttributeMatrixRowColumnInfoValue", - "description": null, - "fields": [ - { - "name": "printUrl", - "description": null, - "args": [ - { - "name": "height", - "description": "The height of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "width", - "description": "The width of the image the url will return.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SellerInstallment", - "description": null, - "fields": [ - { - "name": "discount", - "description": "Wether the installment has discount.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fees", - "description": "Wether the installment has fees.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "number", - "description": "The number of installments.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "value", - "description": "The value of the installment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Decimal", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - } - ], - "directives": [ - { - "name": "skip", - "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", - "locations": [ - "FIELD", - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT" - ], - "args": [ - { - "name": "if", - "description": "Skipped when true.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ] - }, - { - "name": "include", - "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", - "locations": [ - "FIELD", - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT" - ], - "args": [ - { - "name": "if", - "description": "Included when true.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ] - }, - { - "name": "defer", - "description": "The `@defer` directive may be provided for fragment spreads and inline fragments to inform the executor to delay the execution of the current fragment to indicate deprioritization of the current fragment. A query with `@defer` directive will cause the request to potentially return multiple responses, where non-deferred data is delivered in the initial response and data deferred is delivered in a subsequent response. `@include` and `@skip` take precedence over `@defer`.", - "locations": [ - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT" - ], - "args": [ - { - "name": "if", - "description": "Deferred when true.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "label", - "description": "If this argument label has a value other than null, it will be passed on to the result of this defer directive. This label is intended to give client applications a way to identify to which fragment a deferred result belongs to.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ] - }, - { - "name": "stream", - "description": "The `@stream` directive may be provided for a field of `List` type so that the backend can leverage technology such as asynchronous iterators to provide a partial list in the initial response, and additional list items in subsequent responses. `@include` and `@skip` take precedence over `@stream`.", - "locations": [ - "FIELD" - ], - "args": [ - { - "name": "if", - "description": "Streamed when true.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "initialCount", - "description": "The initial elements that shall be send down to the consumer.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": "0" - }, - { - "name": "label", - "description": "If this argument label has a value other than null, it will be passed on to the result of this stream directive. This label is intended to give client applications a way to identify to which fragment a streamed result belongs to.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ] - }, - { - "name": "deprecated", - "description": "The @deprecated directive is used within the type system definition language to indicate deprecated portions of a GraphQL service’s schema,such as deprecated fields on a type or deprecated enum values.", - "locations": [ - "FIELD_DEFINITION", - "ENUM_VALUE" - ], - "args": [ - { - "name": "reason", - "description": "Deprecations include a reason for why it is deprecated, which is formatted using Markdown syntax (as specified by CommonMark).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": "\"No longer supported.\"" - } - ] - }, - { - "name": "authorize", - "description": null, - "locations": [ - "SCHEMA", - "OBJECT", - "FIELD_DEFINITION" - ], - "args": [ - { - "name": "apply", - "description": "Defines when when the resolver shall be executed.By default the resolver is executed after the policy has determined that the current user is allowed to access the field.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ApplyPolicy", - "ofType": null - } - }, - "defaultValue": "BEFORE_RESOLVER" - }, - { - "name": "policy", - "description": "The name of the authorization policy that determines access to the annotated resource.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "roles", - "description": "Roles that are allowed to access the annotated resource.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - } - ] - }, - { - "name": "specifiedBy", - "description": "The `@specifiedBy` directive is used within the type system definition language to provide a URL for specifying the behavior of custom scalar definitions.", - "locations": [ - "SCALAR" - ], - "args": [ - { - "name": "url", - "description": "The specifiedBy URL points to a human-readable specification. This field will only read a result for scalar types.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ] - } - ] - } - } -} diff --git a/checkout/loaders/getUserAddress.ts b/checkout/loaders/getUserAddress.ts deleted file mode 100644 index 3ee6c59b9..000000000 --- a/checkout/loaders/getUserAddress.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import type { - GetUserAddressQuery, - GetUserAddressQueryVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { GetUserAddress } from "../graphql/queries.ts"; -import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; - -// https://wakecommerce.readme.io/docs/storefront-api-customer -export default async function ( - _props: object, - req: Request, - { storefront }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); - - const { customer } = await storefront.query< - GetUserAddressQuery, - GetUserAddressQueryVariables - >( - { - variables: { customerAccessToken: getCustomerAcessToken(req) }, - ...GetUserAddress, - }, - { headers }, - ); - - return customer; -} diff --git a/checkout/logo.png b/checkout/logo.png deleted file mode 100644 index 69fe03bddb8c65b182b10cb23d88c3bb0d9b768d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165326 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 -} - -/** - * @title Checkout - * @description Generic checkout - * @logo https://files.catbox.moe/9g6xiq.png - */ -export default function App(props: State): DecoApp { - const { storefrontToken } = props; - - const storefront = createGraphqlClient({ - endpoint: "https://storefront-api.fbits.net/graphql", - headers: new Headers({ - "TCS-Access-Token": storefrontToken?.get?.() ?? "", - }), - fetcher: fetchSafe, - }); - - return { manifest, state: { ...props, storefront } }; -} - -export type AppContext = AC>; diff --git a/checkout/utils/getCustomerAcessToken.ts b/checkout/utils/getCustomerAcessToken.ts deleted file mode 100644 index 1bd8c4d27..000000000 --- a/checkout/utils/getCustomerAcessToken.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { getCookies } from "std/http/cookie.ts"; - -export default function (req: Request) { - return getCookies(req.headers).customerAccessToken; -} diff --git a/checkout/utils/parseHeaders.ts b/checkout/utils/parseHeaders.ts deleted file mode 100644 index 7734ccb51..000000000 --- a/checkout/utils/parseHeaders.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const getClientIP = (headers: Headers) => { - const cfConnectingIp = headers.get("cf-connecting-ip"); - const xForwardedFor = headers.get("x-forwarded-for"); - - if (cfConnectingIp) return cfConnectingIp; - - return xForwardedFor; -}; - -export const parseHeaders = (headers: Headers) => { - const clientIP = getClientIP(headers); - - const newHeaders = new Headers(); - - if (clientIP) newHeaders.set("X-Forwarded-For", clientIP); - - return newHeaders; -}; diff --git a/decohub/apps/checkout.ts b/decohub/apps/checkout.ts deleted file mode 100644 index aa62a5612..000000000 --- a/decohub/apps/checkout.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "../../checkout/mod.ts"; diff --git a/decohub/manifest.gen.ts b/decohub/manifest.gen.ts index c8dccb11d..20e833808 100644 --- a/decohub/manifest.gen.ts +++ b/decohub/manifest.gen.ts @@ -8,30 +8,29 @@ import * as $$$$$$$$$$$2 from "./apps/analytics.ts"; import * as $$$$$$$$$$$3 from "./apps/anthropic.ts"; import * as $$$$$$$$$$$4 from "./apps/blog.ts"; import * as $$$$$$$$$$$5 from "./apps/brand-assistant.ts"; -import * as $$$$$$$$$$$6 from "./apps/checkout.ts"; -import * as $$$$$$$$$$$7 from "./apps/crux.ts"; -import * as $$$$$$$$$$$8 from "./apps/emailjs.ts"; -import * as $$$$$$$$$$$9 from "./apps/htmx.ts"; -import * as $$$$$$$$$$$10 from "./apps/implementation.ts"; -import * as $$$$$$$$$$$11 from "./apps/konfidency.ts"; -import * as $$$$$$$$$$$12 from "./apps/linx-impulse.ts"; -import * as $$$$$$$$$$$13 from "./apps/linx.ts"; -import * as $$$$$$$$$$$14 from "./apps/mailchimp.ts"; -import * as $$$$$$$$$$$15 from "./apps/nuvemshop.ts"; -import * as $$$$$$$$$$$16 from "./apps/power-reviews.ts"; -import * as $$$$$$$$$$$17 from "./apps/ra-trustvox.ts"; -import * as $$$$$$$$$$$18 from "./apps/resend.ts"; -import * as $$$$$$$$$$$19 from "./apps/shopify.ts"; -import * as $$$$$$$$$$$20 from "./apps/smarthint.ts"; -import * as $$$$$$$$$$$21 from "./apps/sourei.ts"; -import * as $$$$$$$$$$$22 from "./apps/typesense.ts"; -import * as $$$$$$$$$$$23 from "./apps/verified-reviews.ts"; -import * as $$$$$$$$$$$24 from "./apps/vnda.ts"; -import * as $$$$$$$$$$$25 from "./apps/vtex.ts"; -import * as $$$$$$$$$$$26 from "./apps/wake.ts"; -import * as $$$$$$$$$$$27 from "./apps/wap.ts"; -import * as $$$$$$$$$$$28 from "./apps/weather.ts"; -import * as $$$$$$$$$$$29 from "./apps/workflows.ts"; +import * as $$$$$$$$$$$6 from "./apps/crux.ts"; +import * as $$$$$$$$$$$7 from "./apps/emailjs.ts"; +import * as $$$$$$$$$$$8 from "./apps/htmx.ts"; +import * as $$$$$$$$$$$9 from "./apps/implementation.ts"; +import * as $$$$$$$$$$$10 from "./apps/konfidency.ts"; +import * as $$$$$$$$$$$11 from "./apps/linx-impulse.ts"; +import * as $$$$$$$$$$$12 from "./apps/linx.ts"; +import * as $$$$$$$$$$$13 from "./apps/mailchimp.ts"; +import * as $$$$$$$$$$$14 from "./apps/nuvemshop.ts"; +import * as $$$$$$$$$$$15 from "./apps/power-reviews.ts"; +import * as $$$$$$$$$$$16 from "./apps/ra-trustvox.ts"; +import * as $$$$$$$$$$$17 from "./apps/resend.ts"; +import * as $$$$$$$$$$$18 from "./apps/shopify.ts"; +import * as $$$$$$$$$$$19 from "./apps/smarthint.ts"; +import * as $$$$$$$$$$$20 from "./apps/sourei.ts"; +import * as $$$$$$$$$$$21 from "./apps/typesense.ts"; +import * as $$$$$$$$$$$22 from "./apps/verified-reviews.ts"; +import * as $$$$$$$$$$$23 from "./apps/vnda.ts"; +import * as $$$$$$$$$$$24 from "./apps/vtex.ts"; +import * as $$$$$$$$$$$25 from "./apps/wake.ts"; +import * as $$$$$$$$$$$26 from "./apps/wap.ts"; +import * as $$$$$$$$$$$27 from "./apps/weather.ts"; +import * as $$$$$$$$$$$28 from "./apps/workflows.ts"; const manifest = { "apps": { @@ -41,30 +40,29 @@ const manifest = { "decohub/apps/anthropic.ts": $$$$$$$$$$$3, "decohub/apps/blog.ts": $$$$$$$$$$$4, "decohub/apps/brand-assistant.ts": $$$$$$$$$$$5, - "decohub/apps/checkout.ts": $$$$$$$$$$$6, - "decohub/apps/crux.ts": $$$$$$$$$$$7, - "decohub/apps/emailjs.ts": $$$$$$$$$$$8, - "decohub/apps/htmx.ts": $$$$$$$$$$$9, - "decohub/apps/implementation.ts": $$$$$$$$$$$10, - "decohub/apps/konfidency.ts": $$$$$$$$$$$11, - "decohub/apps/linx-impulse.ts": $$$$$$$$$$$12, - "decohub/apps/linx.ts": $$$$$$$$$$$13, - "decohub/apps/mailchimp.ts": $$$$$$$$$$$14, - "decohub/apps/nuvemshop.ts": $$$$$$$$$$$15, - "decohub/apps/power-reviews.ts": $$$$$$$$$$$16, - "decohub/apps/ra-trustvox.ts": $$$$$$$$$$$17, - "decohub/apps/resend.ts": $$$$$$$$$$$18, - "decohub/apps/shopify.ts": $$$$$$$$$$$19, - "decohub/apps/smarthint.ts": $$$$$$$$$$$20, - "decohub/apps/sourei.ts": $$$$$$$$$$$21, - "decohub/apps/typesense.ts": $$$$$$$$$$$22, - "decohub/apps/verified-reviews.ts": $$$$$$$$$$$23, - "decohub/apps/vnda.ts": $$$$$$$$$$$24, - "decohub/apps/vtex.ts": $$$$$$$$$$$25, - "decohub/apps/wake.ts": $$$$$$$$$$$26, - "decohub/apps/wap.ts": $$$$$$$$$$$27, - "decohub/apps/weather.ts": $$$$$$$$$$$28, - "decohub/apps/workflows.ts": $$$$$$$$$$$29, + "decohub/apps/crux.ts": $$$$$$$$$$$6, + "decohub/apps/emailjs.ts": $$$$$$$$$$$7, + "decohub/apps/htmx.ts": $$$$$$$$$$$8, + "decohub/apps/implementation.ts": $$$$$$$$$$$9, + "decohub/apps/konfidency.ts": $$$$$$$$$$$10, + "decohub/apps/linx-impulse.ts": $$$$$$$$$$$11, + "decohub/apps/linx.ts": $$$$$$$$$$$12, + "decohub/apps/mailchimp.ts": $$$$$$$$$$$13, + "decohub/apps/nuvemshop.ts": $$$$$$$$$$$14, + "decohub/apps/power-reviews.ts": $$$$$$$$$$$15, + "decohub/apps/ra-trustvox.ts": $$$$$$$$$$$16, + "decohub/apps/resend.ts": $$$$$$$$$$$17, + "decohub/apps/shopify.ts": $$$$$$$$$$$18, + "decohub/apps/smarthint.ts": $$$$$$$$$$$19, + "decohub/apps/sourei.ts": $$$$$$$$$$$20, + "decohub/apps/typesense.ts": $$$$$$$$$$$21, + "decohub/apps/verified-reviews.ts": $$$$$$$$$$$22, + "decohub/apps/vnda.ts": $$$$$$$$$$$23, + "decohub/apps/vtex.ts": $$$$$$$$$$$24, + "decohub/apps/wake.ts": $$$$$$$$$$$25, + "decohub/apps/wap.ts": $$$$$$$$$$$26, + "decohub/apps/weather.ts": $$$$$$$$$$$27, + "decohub/apps/workflows.ts": $$$$$$$$$$$28, }, "name": "decohub", "baseUrl": import.meta.url, diff --git a/utils/graphql.ts b/utils/graphql.ts index b5f888042..fd1d33bbc 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -48,6 +48,11 @@ export const createGraphqlClient = ( }, init?: RequestInit, ): Promise => { + console.log(JSON.stringify({ + query: [query, ...fragments].join("\n"), + variables: variables as any, + operationName, + }, null, 2)); const { data, errors } = await http[key as any]({}, { ...init, body: { diff --git a/checkout/actions/createAddress.ts b/wake/actions/createAddress.ts similarity index 92% rename from checkout/actions/createAddress.ts rename to wake/actions/createAddress.ts index 9b3052051..8eae4d624 100644 --- a/checkout/actions/createAddress.ts +++ b/wake/actions/createAddress.ts @@ -3,8 +3,8 @@ import { parseHeaders } from "../utils/parseHeaders.ts"; import type { CustomerAddressCreateMutation, CustomerAddressCreateMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { CustomerAddressCreate } from "../../checkout/graphql/queries.ts"; +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAddressCreate } from "../utils/graphql/queries.ts"; import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; // https://wakecommerce.readme.io/docs/customeraddresscreate diff --git a/wake/actions/createCheckout.ts b/wake/actions/createCheckout.ts new file mode 100644 index 000000000..bb19e38e0 --- /dev/null +++ b/wake/actions/createCheckout.ts @@ -0,0 +1,46 @@ +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import type { CreateCheckoutMutation, CreateCheckoutMutationVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { CreateCheckout } from '../utils/graphql/queries.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-createcheckout +export default async function ({ products }: Props, req: Request, { storefront }: AppContext): Promise { + const headers = parseHeaders(req.headers) + + const { createCheckout } = await storefront.query( + { + variables: { products: products ?? [] }, + ...CreateCheckout, + }, + { headers }, + ) + + return createCheckout?.checkoutId ?? '' +} + +interface Props { + products?: { + /** + * ID do variante do produto + */ + productVariantId: number + /** + * Quantidade do produto a ser adicionado + */ + quantity: number + /** + * Personalizações do produto + */ + customization?: { + customizationId: number + value: string + }[] + /** + * Informações de assinatura + */ + subscription?: { + recurringTypeId: number + subscriptionGroupId: number + } + } +} diff --git a/checkout/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts similarity index 93% rename from checkout/actions/deleteAddress.ts rename to wake/actions/deleteAddress.ts index b9d3a717a..b75d5256c 100644 --- a/checkout/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -3,8 +3,8 @@ import { parseHeaders } from "../utils/parseHeaders.ts"; import type { CustomerAddressRemoveMutation, CustomerAddressRemoveMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { CustomerAddressRemove } from "../graphql/queries.ts"; +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAddressRemove } from "../utils/graphql/queries.ts"; import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; // https://wakecommerce.readme.io/docs/customeraddressremove diff --git a/wake/actions/login.ts b/wake/actions/login.ts new file mode 100644 index 000000000..2ad6cc3d0 --- /dev/null +++ b/wake/actions/login.ts @@ -0,0 +1,63 @@ +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import type { + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' +import { getCookies, setCookie } from 'std/http/cookie.ts' + +export default async function ( + props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) + + if (customerAuthenticatedLogin) { + setCookie(response.headers, { + name: 'customerAccessToken', + path: '/', + value: customerAuthenticatedLogin.token as string, + expires: new Date(customerAuthenticatedLogin.validUntil), + }) + setCookie(response.headers, { + name: 'customerAccessTokenExpires', + path: '/', + value: customerAuthenticatedLogin.validUntil, + expires: new Date(customerAuthenticatedLogin.validUntil), + }) + + // associate account to checkout + await storefront.query( + { + variables: { + customerAccessToken: customerAuthenticatedLogin.token as string, + checkoutId: getCookies(req.headers).checkout, + }, + ...CheckoutCustomerAssociate, + }, + { headers }, + ) + } + + return customerAuthenticatedLogin +} + +export interface Props { + /** + * Email + */ + input: string + /** + * Senha + */ + pass: string +} diff --git a/checkout/actions/logout.ts b/wake/actions/logout.ts similarity index 100% rename from checkout/actions/logout.ts rename to wake/actions/logout.ts diff --git a/checkout/actions/signupCompany.ts b/wake/actions/signupCompany.ts similarity index 86% rename from checkout/actions/signupCompany.ts rename to wake/actions/signupCompany.ts index bc3312813..9aaab7b1d 100644 --- a/checkout/actions/signupCompany.ts +++ b/wake/actions/signupCompany.ts @@ -1,8 +1,8 @@ -import { CustomerCreate } from "../graphql/queries.ts"; +import { CustomerCreate } from "../utils/graphql/queries.ts"; import type { CustomerCreateMutation, CustomerCreateMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; +} from "../utils/graphql/storefront.graphql.gen.ts"; import type { AppContext } from "../mod.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; @@ -42,7 +42,7 @@ interface Props { */ addressNumber: string; /** - * CEP + * CEP com pontuação 00000-000 */ cep: string; /** @@ -50,7 +50,7 @@ interface Props { */ city: string; /** - * CNPJ + * CNPJ com pontuação 00.000.000/0000-00 */ cnpj: string; /** @@ -86,7 +86,7 @@ interface Props { */ primaryPhoneAreaCode: string; /** - * Telefone principal do cliente (xxxxx-xxxx) + * Telefone principal do cliente com pontuação xxxxx-xxxx */ primaryPhoneNumber: string; /** @@ -106,7 +106,7 @@ interface Props { */ secondaryPhoneAreaCode?: string; /** - * Telefone secundário do cliente (xxxxx-xxxx) + * Telefone secundário do cliente com pontuação xxxxx-xxxx */ secondaryPhoneNumber?: string; /** diff --git a/checkout/actions/signupPerson.ts b/wake/actions/signupPerson.ts similarity index 85% rename from checkout/actions/signupPerson.ts rename to wake/actions/signupPerson.ts index af61f476b..16b9760c1 100644 --- a/checkout/actions/signupPerson.ts +++ b/wake/actions/signupPerson.ts @@ -3,8 +3,8 @@ import { parseHeaders } from "../utils/parseHeaders.ts"; import type { CustomerCreateMutation, CustomerCreateMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { CustomerCreate } from "../graphql/queries.ts"; +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerCreate } from "../utils/graphql/queries.ts"; // https://wakecommerce.readme.io/docs/storefront-api-customercreate export default async function ( @@ -42,11 +42,11 @@ interface Props { */ addressNumber: string; /** - * Data de nascimento (DD/MM/AAAA) + * Data de nascimento DD/MM/AAAA */ birthDate: Date | string; /** - * CEP + * CEP com pontuação 00000-000 */ cep: string; /** @@ -54,7 +54,7 @@ interface Props { */ city: string; /** - * CPF + * CPF com pontuação 000.000.000-00 */ cpf: string; /** @@ -94,7 +94,7 @@ interface Props { */ primaryPhoneAreaCode: string; /** - * Telefone principal do cliente (xxxxx-xxxx) + * Telefone principal do cliente com pontuação xxxxx-xxxx */ primaryPhoneNumber: string; /** @@ -114,7 +114,7 @@ interface Props { */ secondaryPhoneAreaCode?: string; /** - * Telefone secundário do cliente (xxxxx-xxxx) + * Telefone secundário do cliente com pontuação xxxxx-xxxx */ secondaryPhoneNumber?: string; /** diff --git a/checkout/actions/updateAddress.ts b/wake/actions/updateAddress.ts similarity index 93% rename from checkout/actions/updateAddress.ts rename to wake/actions/updateAddress.ts index 09b9946ac..9aee4e288 100644 --- a/checkout/actions/updateAddress.ts +++ b/wake/actions/updateAddress.ts @@ -3,8 +3,8 @@ import { parseHeaders } from "../utils/parseHeaders.ts"; import type { CustomerAddressUpdateMutation, CustomerAddressUpdateMutationVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { CustomerAddressUpdate } from "../graphql/queries.ts"; +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAddressUpdate } from "../utils/graphql/queries.ts"; import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; // https://wakecommerce.readme.io/docs/customeraddressupdate diff --git a/checkout/loaders/getUser.ts b/wake/loaders/getUser.ts similarity index 86% rename from checkout/loaders/getUser.ts rename to wake/loaders/getUser.ts index 7b204c846..aefc8ffbe 100644 --- a/checkout/loaders/getUser.ts +++ b/wake/loaders/getUser.ts @@ -3,8 +3,8 @@ import { parseHeaders } from "../utils/parseHeaders.ts"; import type { GetUserQuery, GetUserQueryVariables, -} from "../graphql/storefront.graphql.gen.ts"; -import { GetUser } from "../graphql/queries.ts"; +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { GetUser } from "../utils/graphql/queries.ts"; import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; // https://wakecommerce.readme.io/docs/storefront-api-customer diff --git a/wake/loaders/getUserAddresses.ts b/wake/loaders/getUserAddresses.ts new file mode 100644 index 000000000..b19862c0e --- /dev/null +++ b/wake/loaders/getUserAddresses.ts @@ -0,0 +1,24 @@ +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import type { GetUserAddressesQuery, GetUserAddressesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { GetUserAddresses } from '../utils/graphql/queries.ts' +import getCustomerAcessToken from '../utils/getCustomerAcessToken.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-customer +export default async function ( + _props: object, + req: Request, + { storefront }: AppContext, +): Promise['addresses']>> { + const headers = parseHeaders(req.headers) + + const { customer } = await storefront.query( + { + variables: { customerAccessToken: getCustomerAcessToken(req) }, + ...GetUserAddresses, + }, + { headers }, + ) + + return customer?.addresses || [] +} diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 83667ec71..2ae2bb8df 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -7,37 +7,49 @@ import * as $$$$$$$$$1 from "./actions/cart/addItem.ts"; import * as $$$$$$$$$2 from "./actions/cart/addItems.ts"; import * as $$$$$$$$$3 from "./actions/cart/removeCoupon.ts"; import * as $$$$$$$$$4 from "./actions/cart/updateItemQuantity.ts"; -import * as $$$$$$$$$5 from "./actions/newsletter/register.ts"; -import * as $$$$$$$$$6 from "./actions/notifyme.ts"; -import * as $$$$$$$$$7 from "./actions/review/create.ts"; -import * as $$$$$$$$$8 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$9 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$10 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$11 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$5 from "./actions/createAddress.ts"; +import * as $$$$$$$$$6 from "./actions/createCheckout.ts"; +import * as $$$$$$$$$7 from "./actions/deleteAddress.ts"; +import * as $$$$$$$$$8 from "./actions/login.ts"; +import * as $$$$$$$$$9 from "./actions/logout.ts"; +import * as $$$$$$$$$10 from "./actions/newsletter/register.ts"; +import * as $$$$$$$$$11 from "./actions/notifyme.ts"; +import * as $$$$$$$$$12 from "./actions/review/create.ts"; +import * as $$$$$$$$$13 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$14 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$15 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$16 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$17 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$18 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$19 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/cart.ts"; -import * as $$$1 from "./loaders/productDetailsPage.ts"; -import * as $$$2 from "./loaders/productList.ts"; -import * as $$$3 from "./loaders/productListingPage.ts"; -import * as $$$4 from "./loaders/proxy.ts"; -import * as $$$5 from "./loaders/recommendations.ts"; -import * as $$$6 from "./loaders/shop.ts"; -import * as $$$7 from "./loaders/suggestion.ts"; -import * as $$$8 from "./loaders/user.ts"; -import * as $$$9 from "./loaders/wishlist.ts"; +import * as $$$1 from "./loaders/getUser.ts"; +import * as $$$2 from "./loaders/getUserAddresses.ts"; +import * as $$$3 from "./loaders/productDetailsPage.ts"; +import * as $$$4 from "./loaders/productList.ts"; +import * as $$$5 from "./loaders/productListingPage.ts"; +import * as $$$6 from "./loaders/proxy.ts"; +import * as $$$7 from "./loaders/recommendations.ts"; +import * as $$$8 from "./loaders/shop.ts"; +import * as $$$9 from "./loaders/suggestion.ts"; +import * as $$$10 from "./loaders/user.ts"; +import * as $$$11 from "./loaders/wishlist.ts"; const manifest = { "loaders": { "wake/loaders/cart.ts": $$$0, - "wake/loaders/productDetailsPage.ts": $$$1, - "wake/loaders/productList.ts": $$$2, - "wake/loaders/productListingPage.ts": $$$3, - "wake/loaders/proxy.ts": $$$4, - "wake/loaders/recommendations.ts": $$$5, - "wake/loaders/shop.ts": $$$6, - "wake/loaders/suggestion.ts": $$$7, - "wake/loaders/user.ts": $$$8, - "wake/loaders/wishlist.ts": $$$9, + "wake/loaders/getUser.ts": $$$1, + "wake/loaders/getUserAddresses.ts": $$$2, + "wake/loaders/productDetailsPage.ts": $$$3, + "wake/loaders/productList.ts": $$$4, + "wake/loaders/productListingPage.ts": $$$5, + "wake/loaders/proxy.ts": $$$6, + "wake/loaders/recommendations.ts": $$$7, + "wake/loaders/shop.ts": $$$8, + "wake/loaders/suggestion.ts": $$$9, + "wake/loaders/user.ts": $$$10, + "wake/loaders/wishlist.ts": $$$11, }, "handlers": { "wake/handlers/sitemap.ts": $$$$0, @@ -48,13 +60,21 @@ const manifest = { "wake/actions/cart/addItems.ts": $$$$$$$$$2, "wake/actions/cart/removeCoupon.ts": $$$$$$$$$3, "wake/actions/cart/updateItemQuantity.ts": $$$$$$$$$4, - "wake/actions/newsletter/register.ts": $$$$$$$$$5, - "wake/actions/notifyme.ts": $$$$$$$$$6, - "wake/actions/review/create.ts": $$$$$$$$$7, - "wake/actions/shippingSimulation.ts": $$$$$$$$$8, - "wake/actions/submmitForm.ts": $$$$$$$$$9, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$10, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$11, + "wake/actions/createAddress.ts": $$$$$$$$$5, + "wake/actions/createCheckout.ts": $$$$$$$$$6, + "wake/actions/deleteAddress.ts": $$$$$$$$$7, + "wake/actions/login.ts": $$$$$$$$$8, + "wake/actions/logout.ts": $$$$$$$$$9, + "wake/actions/newsletter/register.ts": $$$$$$$$$10, + "wake/actions/notifyme.ts": $$$$$$$$$11, + "wake/actions/review/create.ts": $$$$$$$$$12, + "wake/actions/shippingSimulation.ts": $$$$$$$$$13, + "wake/actions/signupCompany.ts": $$$$$$$$$14, + "wake/actions/signupPerson.ts": $$$$$$$$$15, + "wake/actions/submmitForm.ts": $$$$$$$$$16, + "wake/actions/updateAddress.ts": $$$$$$$$$17, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$18, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$19, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/utils/ensureCheckout.ts b/wake/utils/ensureCheckout.ts new file mode 100644 index 000000000..f76690e70 --- /dev/null +++ b/wake/utils/ensureCheckout.ts @@ -0,0 +1,22 @@ +import { getCookies, setCookie } from 'std/http/cookie.ts' +import type { AppContext } from '../mod.ts' + +export default async function (req: Request, ctx: AppContext) { + let checkoutCookie = getCookies(req.headers).checkout + + if (!checkoutCookie) { + checkoutCookie = await ctx.invoke.checkout.actions.createCheckout() + + const _30days = 1000 * 60 * 60 * 24 * 30 + + setCookie(ctx.response.headers, { + name: 'checkout', + value: checkoutCookie, + path: '/', + expires: new Date(Date.now() + _30days), + }) + + } + + return checkoutCookie +} diff --git a/wake/utils/getCustomerAcessToken.ts b/wake/utils/getCustomerAcessToken.ts new file mode 100644 index 000000000..1a7abf5d9 --- /dev/null +++ b/wake/utils/getCustomerAcessToken.ts @@ -0,0 +1,12 @@ +import { getCookies } from 'std/http/cookie.ts' + +export default function (req: Request) { + const tokenExpires = getCookies(req.headers).customerAccessTokenExpires ?? '' + + // if token expired + if (tokenExpires && new Date(tokenExpires) < new Date()) { + throw new Error('Token expired') + } + + return getCookies(req.headers).customerAccessToken +} diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index d6d68fcbc..96ac92bd9 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1312,3 +1312,121 @@ export const CustomerCreate = { } }`, }; + +export const CustomerAuthenticatedLogin = { + query: + gql`mutation customerAuthenticatedLogin($input: String!, $pass: String!) { + customerAuthenticatedLogin(input:{input: $input, password: $pass}) { + isMaster + token + type + validUntil + } + }`, +}; + +export const CustomerAddressCreate = { + query: gql`mutation customerAddressCreate( + $customerAccessToken: String!, + $address: CreateCustomerAddressInput!, + ) { + customerAddressCreate( + customerAccessToken: $customerAccessToken, + address: $address, + ) { + addressDetails + addressNumber + cep + city + country + email + id + name + neighborhood + phone + state + street + referencePoint + } + }`, +}; + +export const CustomerAddressRemove = { + query: + gql`mutation customerAddressRemove($customerAccessToken: String!, $id: ID!) { + customerAddressRemove(customerAccessToken: $customerAccessToken, id: $id) { + isSuccess + } + }`, +}; + +export const CustomerAddressUpdate = { + query: gql`mutation customerAddressUpdate( + $id: ID!, + $customerAccessToken: String!, + $address: UpdateCustomerAddressInput!, + ) { + customerAddressUpdate( + customerAccessToken: $customerAccessToken, + address: $address, + id: $id + ) { + addressDetails + addressNumber + cep + city + country + email + id + name + neighborhood + phone + state + street + referencePoint + } + }`, +}; + +export const GetUserAddresses = { + fragments: [Customer], + query: gql`query GetUserAddresses($customerAccessToken: String) { + customer(customerAccessToken: $customerAccessToken) { + ...Customer, + addresses { + address + address2 + addressDetails + addressNumber + cep + city + country + email + id + name + neighborhood + phone + referencePoint + state + street + } + } + }`, +}; + +export const CreateCheckout = { + query: gql`mutation createCheckout($products: [CheckoutProductItemInput]!) { + createCheckout(products: $products) { + checkoutId + } + }`, +}; + +export const CheckoutCustomerAssociate = { + query: + gql`mutation checkoutCustomerAssociate($checkoutId: Uuid!, $customerAccessToken: String!) { + checkoutCustomerAssociate(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) { + checkoutId + } + }`, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index fb714a63e..c31bc524f 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5138,3 +5138,58 @@ export type CustomerCreateMutationVariables = Exact<{ export type CustomerCreateMutation = { customerCreate?: { customerId: any, customerName?: string | null, customerType?: string | null } | null }; + +export type CustomerAuthenticatedLoginMutationVariables = Exact<{ + input: Scalars['String']['input']; + pass: Scalars['String']['input']; +}>; + + +export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, type?: LoginType | null, validUntil: any } | null }; + +export type CustomerAddressCreateMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + address: CreateCustomerAddressInput; +}>; + + +export type CustomerAddressCreateMutation = { customerAddressCreate?: { addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, state?: string | null, street?: string | null, referencePoint?: string | null } | null }; + +export type CustomerAddressRemoveMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + id: Scalars['ID']['input']; +}>; + + +export type CustomerAddressRemoveMutation = { customerAddressRemove?: { isSuccess: boolean } | null }; + +export type CustomerAddressUpdateMutationVariables = Exact<{ + id: Scalars['ID']['input']; + customerAccessToken: Scalars['String']['input']; + address: UpdateCustomerAddressInput; +}>; + + +export type CustomerAddressUpdateMutation = { customerAddressUpdate?: { addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, state?: string | null, street?: string | null, referencePoint?: string | null } | null }; + +export type GetUserAddressesQueryVariables = Exact<{ + customerAccessToken?: InputMaybe; +}>; + + +export type GetUserAddressesQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; + +export type CreateCheckoutMutationVariables = Exact<{ + products: Array> | InputMaybe; +}>; + + +export type CreateCheckoutMutation = { createCheckout?: { checkoutId: any } | null }; + +export type CheckoutCustomerAssociateMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; + customerAccessToken: Scalars['String']['input']; +}>; + + +export type CheckoutCustomerAssociateMutation = { checkoutCustomerAssociate?: { checkoutId: any } | null }; diff --git a/wake/utils/isLogged.ts b/wake/utils/isLogged.ts new file mode 100644 index 000000000..9a396a23d --- /dev/null +++ b/wake/utils/isLogged.ts @@ -0,0 +1,5 @@ +import getCustomerAcessToken from './getCustomerAcessToken.ts' + +export default function (req: Request): boolean { + return !!getCustomerAcessToken(req) +} From bbc93cc72d993050d0b3480556e6c0ee27d09920 Mon Sep 17 00:00:00 2001 From: Luigi Date: Tue, 11 Jun 2024 23:56:32 -0300 Subject: [PATCH 04/37] ... --- utils/graphql.ts | 14 +- wake/actions/createAddress.ts | 150 +++++++------- wake/actions/createCheckout.ts | 86 ++++---- wake/actions/deleteAddress.ts | 158 +++++++-------- wake/actions/login.ts | 23 +-- wake/actions/logout.ts | 16 +- wake/actions/shippingSimulation.ts | 122 +++++------- wake/actions/updateAddress.ts | 160 +++++++-------- wake/hooks/context.ts | 187 +++++++++--------- wake/loaders/checkoutCoupon.ts | 25 +++ wake/loaders/getUser.ts | 30 --- wake/loaders/paymentMethods.ts | 25 +++ wake/loaders/useCustomCheckout.ts | 5 + wake/loaders/user.ts | 92 ++++----- .../{getUserAddresses.ts => userAddresses.ts} | 14 +- wake/manifest.gen.ts | 20 +- wake/mod.ts | 173 ++++++++-------- wake/utils/authenticate.ts | 68 +++++-- wake/utils/cart.ts | 2 +- wake/utils/ensureCheckout.ts | 23 +-- wake/utils/ensureCustomerToken.ts | 5 + wake/utils/getCustomerAcessToken.ts | 12 -- wake/utils/graphql/queries.ts | 27 +++ wake/utils/graphql/storefront.graphql.gen.ts | 21 ++ wake/utils/isLogged.ts | 5 - wake/utils/user.ts | 27 ++- 26 files changed, 789 insertions(+), 701 deletions(-) create mode 100644 wake/loaders/checkoutCoupon.ts delete mode 100644 wake/loaders/getUser.ts create mode 100644 wake/loaders/paymentMethods.ts create mode 100644 wake/loaders/useCustomCheckout.ts rename wake/loaders/{getUserAddresses.ts => userAddresses.ts} (53%) create mode 100644 wake/utils/ensureCustomerToken.ts delete mode 100644 wake/utils/getCustomerAcessToken.ts delete mode 100644 wake/utils/isLogged.ts diff --git a/utils/graphql.ts b/utils/graphql.ts index fd1d33bbc..45d1683a7 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -48,11 +48,15 @@ export const createGraphqlClient = ( }, init?: RequestInit, ): Promise => { - console.log(JSON.stringify({ - query: [query, ...fragments].join("\n"), - variables: variables as any, - operationName, - }, null, 2)); + // console.log(JSON.stringify( + // { + // query: [query, ...fragments].join("\n"), + // variables: variables as any, + // operationName, + // }, + // null, + // 2, + // )); const { data, errors } = await http[key as any]({}, { ...init, body: { diff --git a/wake/actions/createAddress.ts b/wake/actions/createAddress.ts index 8eae4d624..17f8185e5 100644 --- a/wake/actions/createAddress.ts +++ b/wake/actions/createAddress.ts @@ -1,84 +1,86 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' import type { - CustomerAddressCreateMutation, - CustomerAddressCreateMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { CustomerAddressCreate } from "../utils/graphql/queries.ts"; -import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + CustomerAddressCreateMutation, + CustomerAddressCreateMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CustomerAddressCreate } from '../utils/graphql/queries.ts' +import authenticate from 'apps/wake/utils/authenticate.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/customeraddresscreate export default async function ( - props: Props, - req: Request, - { storefront }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const { customerAddressCreate } = await storefront.query< - CustomerAddressCreateMutation, - CustomerAddressCreateMutationVariables - >( - { - variables: { - address: props, - customerAccessToken: getCustomerAcessToken(req), - }, - ...CustomerAddressCreate, - }, - { headers }, - ); + const { customerAddressCreate } = await ctx.storefront.query< + CustomerAddressCreateMutation, + CustomerAddressCreateMutationVariables + >( + { + variables: { + address: props, + customerAccessToken, + }, + ...CustomerAddressCreate, + }, + { headers }, + ) - return customerAddressCreate; + return customerAddressCreate } interface Props { - /** - * Detalhes do endereço - */ - addressDetails: string; - /** - * Número do endereço - */ - addressNumber: string; - /** - * Cep do endereço - */ - cep: string; - /** - * Cidade do endereço - */ - city: string; - /** - * País do endereço, ex. BR - */ - country: string; - /** - * E-mail do usuário - */ - email: string; - /** - * Nome do usuário - */ - name: string; - /** - * Bairro do endereço - */ - neighborhood: string; - /** - * Telefone do usuário - */ - phone: string; - /** - * Ponto de referência do endereço - */ - referencePoint?: string; - /** - * Estado do endereço - */ - state: string; - /** - * Rua do endereço - */ - street: string; + /** + * Detalhes do endereço + */ + addressDetails: string + /** + * Número do endereço + */ + addressNumber: string + /** + * Cep do endereço + */ + cep: string + /** + * Cidade do endereço + */ + city: string + /** + * País do endereço, ex. BR + */ + country: string + /** + * E-mail do usuário + */ + email: string + /** + * Nome do usuário + */ + name: string + /** + * Bairro do endereço + */ + neighborhood: string + /** + * Telefone do usuário + */ + phone: string + /** + * Ponto de referência do endereço + */ + referencePoint?: string + /** + * Estado do endereço + */ + state: string + /** + * Rua do endereço + */ + street: string } diff --git a/wake/actions/createCheckout.ts b/wake/actions/createCheckout.ts index bb19e38e0..47abbc968 100644 --- a/wake/actions/createCheckout.ts +++ b/wake/actions/createCheckout.ts @@ -1,46 +1,56 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' -import type { CreateCheckoutMutation, CreateCheckoutMutationVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { CreateCheckout } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + CreateCheckoutMutation, + CreateCheckoutMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CreateCheckout } from "../utils/graphql/queries.ts"; // https://wakecommerce.readme.io/docs/storefront-api-createcheckout -export default async function ({ products }: Props, req: Request, { storefront }: AppContext): Promise { - const headers = parseHeaders(req.headers) +export default async function ( + { products }: Props, + req: Request, + { storefront }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); - const { createCheckout } = await storefront.query( - { - variables: { products: products ?? [] }, - ...CreateCheckout, - }, - { headers }, - ) + const { createCheckout } = await storefront.query< + CreateCheckoutMutation, + CreateCheckoutMutationVariables + >( + { + variables: { products: products ?? [] }, + ...CreateCheckout, + }, + { headers }, + ); - return createCheckout?.checkoutId ?? '' + return createCheckout?.checkoutId ?? ""; } interface Props { - products?: { - /** - * ID do variante do produto - */ - productVariantId: number - /** - * Quantidade do produto a ser adicionado - */ - quantity: number - /** - * Personalizações do produto - */ - customization?: { - customizationId: number - value: string - }[] - /** - * Informações de assinatura - */ - subscription?: { - recurringTypeId: number - subscriptionGroupId: number - } - } + products?: { + /** + * ID do variante do produto + */ + productVariantId: number; + /** + * Quantidade do produto a ser adicionado + */ + quantity: number; + /** + * Personalizações do produto + */ + customization?: { + customizationId: number; + value: string; + }[]; + /** + * Informações de assinatura + */ + subscription?: { + recurringTypeId: number; + subscriptionGroupId: number; + }; + }; } diff --git a/wake/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts index b75d5256c..290f4cf34 100644 --- a/wake/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -1,90 +1,92 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' import type { - CustomerAddressRemoveMutation, - CustomerAddressRemoveMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { CustomerAddressRemove } from "../utils/graphql/queries.ts"; -import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + CustomerAddressRemoveMutation, + CustomerAddressRemoveMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CustomerAddressRemove } from '../utils/graphql/queries.ts' +import authenticate from 'apps/wake/utils/authenticate.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/customeraddressremove export default async function ( - props: Props, - req: Request, - { storefront }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const { customerAddressRemove } = await storefront.query< - CustomerAddressRemoveMutation, - CustomerAddressRemoveMutationVariables - >( - { - variables: { - id: props.addressId, - customerAccessToken: getCustomerAcessToken(req), - }, - ...CustomerAddressRemove, - }, - { headers }, - ); + const { customerAddressRemove } = await ctx.storefront.query< + CustomerAddressRemoveMutation, + CustomerAddressRemoveMutationVariables + >( + { + variables: { + id: props.addressId, + customerAccessToken, + }, + ...CustomerAddressRemove, + }, + { headers }, + ) - return customerAddressRemove; + return customerAddressRemove } interface Props { - /** - * ID do endereço - */ - addressId: string; - address: { - /** - * Detalhes do endereço - */ - addressDetails?: string; - /** - * Número do endereço - */ - addressNumber?: string; - /** - * Cep do endereço - */ - cep?: string; - /** - * Cidade do endereço - */ - city?: string; - /** - * País do endereço, ex. BR - */ - country?: string; - /** - * E-mail do usuário - */ - email?: string; - /** - * Nome do usuário - */ - name?: string; - /** - * Bairro do endereço - */ - neighborhood?: string; - /** - * Telefone do usuário - */ - phone?: string; - /** - * Ponto de referência do endereço - */ - referencePoint?: string; - /** - * Estado do endereço - */ - state?: string; /** - * Rua do endereço + * ID do endereço */ - street?: string; - }; + addressId: string + address: { + /** + * Detalhes do endereço + */ + addressDetails?: string + /** + * Número do endereço + */ + addressNumber?: string + /** + * Cep do endereço + */ + cep?: string + /** + * Cidade do endereço + */ + city?: string + /** + * País do endereço, ex. BR + */ + country?: string + /** + * E-mail do usuário + */ + email?: string + /** + * Nome do usuário + */ + name?: string + /** + * Bairro do endereço + */ + neighborhood?: string + /** + * Telefone do usuário + */ + phone?: string + /** + * Ponto de referência do endereço + */ + referencePoint?: string + /** + * Estado do endereço + */ + state?: string + /** + * Rua do endereço + */ + street?: string + } } diff --git a/wake/actions/login.ts b/wake/actions/login.ts index 2ad6cc3d0..5fdb57dee 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -7,7 +7,9 @@ import type { CustomerAuthenticatedLoginMutationVariables, } from '../utils/graphql/storefront.graphql.gen.ts' import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' -import { getCookies, setCookie } from 'std/http/cookie.ts' +import { setCookie } from 'std/http/cookie.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import { setUserCookie } from 'apps/wake/utils/user.ts' export default async function ( props: Props, @@ -22,25 +24,18 @@ export default async function ( >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) if (customerAuthenticatedLogin) { - setCookie(response.headers, { - name: 'customerAccessToken', - path: '/', - value: customerAuthenticatedLogin.token as string, - expires: new Date(customerAuthenticatedLogin.validUntil), - }) - setCookie(response.headers, { - name: 'customerAccessTokenExpires', - path: '/', - value: customerAuthenticatedLogin.validUntil, - expires: new Date(customerAuthenticatedLogin.validUntil), - }) + setUserCookie( + response.headers, + customerAuthenticatedLogin.token as string, + new Date(customerAuthenticatedLogin.validUntil), + ) // associate account to checkout await storefront.query( { variables: { customerAccessToken: customerAuthenticatedLogin.token as string, - checkoutId: getCookies(req.headers).checkout, + checkoutId: getCartCookie(req.headers), }, ...CheckoutCustomerAssociate, }, diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index feb94fdba..289b46132 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -1,11 +1,9 @@ -import type { AppContext } from "../mod.ts"; -import { deleteCookie } from "std/http/cookie.ts"; +import type { AppContext } from '../mod.ts' +import { deleteCookie } from 'std/http/cookie.ts' +import { CART_COOKIE } from 'apps/wake/utils/cart.ts' -export default function ( - _props: object, - _req: Request, - { response }: AppContext, -) { - deleteCookie(response.headers, "customerAccessToken"); - deleteCookie(response.headers, "customerAccessTokenExpires"); +export default function (_props: object, _req: Request, { response }: AppContext) { + deleteCookie(response.headers, 'customerToken') + deleteCookie(response.headers, 'customerTokenExpires') + deleteCookie(response.headers, CART_COOKIE) } diff --git a/wake/actions/shippingSimulation.ts b/wake/actions/shippingSimulation.ts index 538519511..ef77f1db1 100644 --- a/wake/actions/shippingSimulation.ts +++ b/wake/actions/shippingSimulation.ts @@ -1,80 +1,62 @@ -import { AppContext } from "../mod.ts"; -import { ShippingQuotes } from "../utils/graphql/queries.ts"; -import { - ShippingQuotesQuery, - ShippingQuotesQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { getCartCookie } from "../utils/cart.ts"; -import { HttpError } from "../../utils/http.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { ShippingQuotes } from '../utils/graphql/queries.ts' +import type { ShippingQuotesQuery, ShippingQuotesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { getCartCookie } from '../utils/cart.ts' +import { HttpError } from '../../utils/http.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' export interface Props { - cep?: string; - simulateCartItems?: boolean; - productVariantId?: number; - quantity?: number; - useSelectedAddress?: boolean; + cep?: string + simulateCartItems?: boolean + productVariantId?: number + quantity?: number + useSelectedAddress?: boolean } -const buildSimulationParams = ( - props: Props, - checkoutId?: string, -): ShippingQuotesQueryVariables => { - const { - cep, - simulateCartItems, - productVariantId, - quantity, - useSelectedAddress, - } = props; +export const buildSimulationParams = (props: Props, checkoutId?: string): ShippingQuotesQueryVariables => { + const { cep, simulateCartItems, productVariantId, quantity, useSelectedAddress } = props - const defaultQueryParams = { - cep, - useSelectedAddress, - }; + const defaultQueryParams = { + cep, + useSelectedAddress, + } - if (simulateCartItems) { - if (!checkoutId) throw new HttpError(400, "Missing cart cookie"); + if (simulateCartItems) { + if (!checkoutId) throw new HttpError(400, 'Missing cart cookie') - return { - ...defaultQueryParams, - checkoutId, - }; - } - - return { - ...defaultQueryParams, - productVariantId, - quantity, - }; -}; - -const action = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise => { - const { storefront } = ctx; - - const headers = parseHeaders(req.headers); - - const cartId = getCartCookie(req.headers); + return { + ...defaultQueryParams, + checkoutId, + } + } - const simulationParams = buildSimulationParams(props, cartId); - - const data = await storefront.query< - ShippingQuotesQuery, - ShippingQuotesQueryVariables - >({ - variables: { - ...simulationParams, - }, - ...ShippingQuotes, - }, { - headers, - }); + return { + ...defaultQueryParams, + productVariantId, + quantity, + } +} - return data.shippingQuotes ?? []; -}; +const action = async (props: Props, req: Request, ctx: AppContext): Promise => { + const { storefront } = ctx + + const headers = parseHeaders(req.headers) + const cartId = getCartCookie(req.headers) + const simulationParams = buildSimulationParams(props, cartId) + + const data = await storefront.query( + { + variables: { + ...simulationParams, + }, + ...ShippingQuotes, + }, + { + headers, + }, + ) + + return data.shippingQuotes ?? [] +} -export default action; +export default action diff --git a/wake/actions/updateAddress.ts b/wake/actions/updateAddress.ts index 9aee4e288..d403a0e21 100644 --- a/wake/actions/updateAddress.ts +++ b/wake/actions/updateAddress.ts @@ -1,91 +1,93 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' import type { - CustomerAddressUpdateMutation, - CustomerAddressUpdateMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { CustomerAddressUpdate } from "../utils/graphql/queries.ts"; -import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; + CustomerAddressUpdateMutation, + CustomerAddressUpdateMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CustomerAddressUpdate } from '../utils/graphql/queries.ts' +import authenticate from 'apps/wake/utils/authenticate.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/customeraddressupdate export default async function ( - props: Props, - req: Request, - { storefront }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const { customerAddressUpdate } = await storefront.query< - CustomerAddressUpdateMutation, - CustomerAddressUpdateMutationVariables - >( - { - variables: { - address: props.address, - id: props.addressId, - customerAccessToken: getCustomerAcessToken(req), - }, - ...CustomerAddressUpdate, - }, - { headers }, - ); + const { customerAddressUpdate } = await ctx.storefront.query< + CustomerAddressUpdateMutation, + CustomerAddressUpdateMutationVariables + >( + { + variables: { + address: props.address, + id: props.addressId, + customerAccessToken, + }, + ...CustomerAddressUpdate, + }, + { headers }, + ) - return customerAddressUpdate; + return customerAddressUpdate } interface Props { - /** - * ID do endereço - */ - addressId: string; - address: { - /** - * Detalhes do endereço - */ - addressDetails?: string; - /** - * Número do endereço - */ - addressNumber?: string; - /** - * Cep do endereço - */ - cep?: string; - /** - * Cidade do endereço - */ - city?: string; - /** - * País do endereço, ex. BR - */ - country?: string; - /** - * E-mail do usuário - */ - email?: string; - /** - * Nome do usuário - */ - name?: string; - /** - * Bairro do endereço - */ - neighborhood?: string; - /** - * Telefone do usuário - */ - phone?: string; - /** - * Ponto de referência do endereço - */ - referencePoint?: string; - /** - * Estado do endereço - */ - state?: string; /** - * Rua do endereço + * ID do endereço */ - street?: string; - }; + addressId: string + address: { + /** + * Detalhes do endereço + */ + addressDetails?: string + /** + * Número do endereço + */ + addressNumber?: string + /** + * Cep do endereço + */ + cep?: string + /** + * Cidade do endereço + */ + city?: string + /** + * País do endereço, ex. BR + */ + country?: string + /** + * E-mail do usuário + */ + email?: string + /** + * Nome do usuário + */ + name?: string + /** + * Bairro do endereço + */ + neighborhood?: string + /** + * Telefone do usuário + */ + phone?: string + /** + * Ponto de referência do endereço + */ + referencePoint?: string + /** + * Estado do endereço + */ + state?: string + /** + * Rua do endereço + */ + street?: string + } } diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 14ae1f0bb..37338671a 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -1,130 +1,129 @@ -import { IS_BROWSER } from "$fresh/runtime.ts"; -import { signal } from "@preact/signals"; -import { invoke } from "../runtime.ts"; -import type { - CheckoutFragment, - WishlistReducedProductFragment, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { Person } from "../../commerce/types.ts"; -import { setClientCookie } from "../utils/cart.ts"; -import { ShopQuery } from "../utils/graphql/storefront.graphql.gen.ts"; +import { IS_BROWSER } from '$fresh/runtime.ts' +import { signal } from '@preact/signals' +import { invoke } from '../runtime.ts' +import type { CheckoutFragment, WishlistReducedProductFragment } from '../utils/graphql/storefront.graphql.gen.ts' +import { Person } from '../../commerce/types.ts' +import { setClientCookie } from '../utils/cart.ts' +import { ShopQuery } from '../utils/graphql/storefront.graphql.gen.ts' export interface Context { - cart: Partial; - user: Person | null; - wishlist: WishlistReducedProductFragment[] | null; + cart: Partial + user: Person | null + wishlist: WishlistReducedProductFragment[] | null } -const loading = signal(true); +const loading = signal(true) const context = { - cart: signal>({}), - user: signal(null), - wishlist: signal(null), - shop: signal(null), -}; + cart: signal>({}), + user: signal(null), + wishlist: signal(null), + shop: signal(null), +} -let queue2 = Promise.resolve(); -let abort2 = () => {}; +let queue2 = Promise.resolve() +let abort2 = () => {} -let queue = Promise.resolve(); -let abort = () => {}; -const enqueue = ( - cb: (signal: AbortSignal) => Promise> | Partial, -) => { - abort(); +let queue = Promise.resolve() +let abort = () => {} +const enqueue = (cb: (signal: AbortSignal) => Promise> | Partial) => { + abort() - loading.value = true; - const controller = new AbortController(); + loading.value = true + const controller = new AbortController() - queue = queue.then(async () => { - try { - const { cart, user, wishlist } = await cb(controller.signal); + queue = queue.then(async () => { + try { + const { cart, user, wishlist } = await cb(controller.signal) - if (controller.signal.aborted) { - throw { name: "AbortError" }; - } + if (controller.signal.aborted) { + throw { name: 'AbortError' } + } - context.cart.value = { ...context.cart.value, ...cart }; - context.user.value = user || context.user.value; - context.wishlist.value = wishlist || context.wishlist.value; + context.cart.value = { ...context.cart.value, ...cart } + context.user.value = user || context.user.value + context.wishlist.value = wishlist || context.wishlist.value - loading.value = false; - } catch (error) { - if (error.name === "AbortError") return; + loading.value = false + } catch (error) { + if (error.name === 'AbortError') return - console.error(error); - loading.value = false; - } - }); + console.error(error) + loading.value = false + } + }) - abort = () => controller.abort(); + abort = () => controller.abort() - return queue; -}; + return queue +} -const enqueue2 = ( - cb: (signal: AbortSignal) => Promise> | Partial, -) => { - abort2(); +const enqueue2 = (cb: (signal: AbortSignal) => Promise> | Partial) => { + abort2() - loading.value = true; - const controller = new AbortController(); + loading.value = true + const controller = new AbortController() - queue2 = queue2.then(async () => { - try { - const { shop } = await cb(controller.signal); + queue2 = queue2.then(async () => { + try { + const { shop } = await cb(controller.signal) + const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout() + const isLocalhost = window.location.hostname === 'localhost' - const url = new URL("/api/carrinho", shop.checkoutUrl); + if (!isLocalhost && !useCustomCheckout) { + const url = new URL('/api/carrinho', shop.checkoutUrl) - const { Id } = await fetch(url, { credentials: "include" }).then((r) => - r.json() - ); + const { Id } = await fetch(url, { credentials: 'include' }).then(r => r.json()) - if (controller.signal.aborted) { - throw { name: "AbortError" }; - } + if (controller.signal.aborted) { + throw { name: 'AbortError' } + } - setClientCookie(Id); - enqueue(load); + setClientCookie(Id) + } - loading.value = false; - } catch (error) { - if (error.name === "AbortError") return; + enqueue(load) - console.error(error); - loading.value = false; - } - }); + loading.value = false + } catch (error) { + if (error.name === 'AbortError') return - abort2 = () => controller.abort(); + console.error(error) + loading.value = false + } + }) - return queue2; -}; + abort2 = () => controller.abort() + + return queue2 +} const load2 = (signal: AbortSignal) => - invoke({ - shop: invoke.wake.loaders.shop(), - }, { signal }); + invoke( + { + shop: invoke.wake.loaders.shop(), + }, + { signal }, + ) const load = (signal: AbortSignal) => - invoke({ - cart: invoke.wake.loaders.cart(), - user: invoke.wake.loaders.user(), - wishlist: invoke.wake.loaders.wishlist(), - }, { signal }); + invoke( + { + cart: invoke.wake.loaders.cart(), + user: invoke.wake.loaders.user(), + wishlist: invoke.wake.loaders.wishlist(), + }, + { signal }, + ) if (IS_BROWSER) { - enqueue2(load2); - enqueue(load); + enqueue2(load2) + enqueue(load) - document.addEventListener( - "visibilitychange", - () => document.visibilityState === "visible" && enqueue(load), - ); + document.addEventListener('visibilitychange', () => document.visibilityState === 'visible' && enqueue(load)) } export const state = { - ...context, - loading, - enqueue, -}; + ...context, + loading, + enqueue, +} diff --git a/wake/loaders/checkoutCoupon.ts b/wake/loaders/checkoutCoupon.ts new file mode 100644 index 000000000..9e41182e5 --- /dev/null +++ b/wake/loaders/checkoutCoupon.ts @@ -0,0 +1,25 @@ +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import ensureCheckout from 'apps/wake/utils/ensureCheckout.ts' +import type { AppContext } from '../mod.ts' +import { GetCheckoutCoupon } from '../utils/graphql/queries.ts' +import type { + GetCheckoutCouponQuery, + GetCheckoutCouponQueryVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkout +export default async function (_props: object, req: Request, ctx: AppContext): Promise { + const headers = parseHeaders(req.headers) + const checkoutId = ensureCheckout(getCartCookie(req.headers)) + + const { checkout } = await ctx.storefront.query( + { + variables: { checkoutId }, + ...GetCheckoutCoupon, + }, + { headers }, + ) + + return checkout?.coupon || null +} diff --git a/wake/loaders/getUser.ts b/wake/loaders/getUser.ts deleted file mode 100644 index aefc8ffbe..000000000 --- a/wake/loaders/getUser.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import type { - GetUserQuery, - GetUserQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { GetUser } from "../utils/graphql/queries.ts"; -import getCustomerAcessToken from "../utils/getCustomerAcessToken.ts"; - -// https://wakecommerce.readme.io/docs/storefront-api-customer -export default async function ( - _props: object, - req: Request, - { storefront }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); - - const { customer } = await storefront.query< - GetUserQuery, - GetUserQueryVariables - >( - { - variables: { customerAccessToken: getCustomerAcessToken(req) }, - ...GetUser, - }, - { headers }, - ); - - return customer; -} diff --git a/wake/loaders/paymentMethods.ts b/wake/loaders/paymentMethods.ts new file mode 100644 index 000000000..17a90ecb3 --- /dev/null +++ b/wake/loaders/paymentMethods.ts @@ -0,0 +1,25 @@ +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import type { AppContext } from '../mod.ts' +import { PaymentMethods } from '../utils/graphql/queries.ts' +import type { PaymentMethodsQuery, PaymentMethodsQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/paymentmethods +export default async function ( + _props: object, + req: Request, + ctx: AppContext, +): Promise> { + const headers = parseHeaders(req.headers) + const checkoutId = getCartCookie(req.headers) + + const { paymentMethods } = await ctx.storefront.query( + { + variables: { checkoutId }, + ...PaymentMethods, + }, + { headers }, + ) + + return paymentMethods?.filter(i => i) || [] +} diff --git a/wake/loaders/useCustomCheckout.ts b/wake/loaders/useCustomCheckout.ts new file mode 100644 index 000000000..f0f40d014 --- /dev/null +++ b/wake/loaders/useCustomCheckout.ts @@ -0,0 +1,5 @@ +import type { AppContext } from '../mod.ts' + +export default (_props: unknown, req: Request, ctx: AppContext) => { + return ctx.useCustomCheckout +} diff --git a/wake/loaders/user.ts b/wake/loaders/user.ts index 3a0befaca..edab50a83 100644 --- a/wake/loaders/user.ts +++ b/wake/loaders/user.ts @@ -1,56 +1,46 @@ -import { Person } from "../../commerce/types.ts"; -import type { AppContext } from "../mod.ts"; -import authenticate from "../utils/authenticate.ts"; -import { GetUser } from "../utils/graphql/queries.ts"; -import { - GetUserQuery, - GetUserQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { Person } from '../../commerce/types.ts' +import type { AppContext } from '../mod.ts' +import authenticate from '../utils/authenticate.ts' +import { GetUser } from '../utils/graphql/queries.ts' +import type { GetUserQuery, GetUserQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' /** * @title Wake Integration * @description User loader */ -const userLoader = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise => { - const { storefront } = ctx; - - const headers = parseHeaders(req.headers); - - const customerAccessToken = await authenticate(req, ctx); - - if (!customerAccessToken) return null; - - try { - const data = await storefront.query< - GetUserQuery, - GetUserQueryVariables - >({ - variables: { customerAccessToken }, - ...GetUser, - }, { - headers, - }); - - const customer = data.customer; - - if (!customer) return null; - - return { - "@id": customer.id!, - email: customer.email!, - givenName: customer.customerName!, - gender: customer?.gender === "Masculino" - ? "https://schema.org/Male" - : "https://schema.org/Female", - }; - } catch { - return null; - } -}; - -export default userLoader; +const userLoader = async (_props: unknown, req: Request, ctx: AppContext): Promise => { + const { storefront } = ctx + + const headers = parseHeaders(req.headers) + + const customerAccessToken = await authenticate(req, ctx) + if (!customerAccessToken) return null + + try { + const data = await storefront.query( + { + variables: { customerAccessToken }, + ...GetUser, + }, + { + headers, + }, + ) + + const customer = data.customer + + if (!customer) return null + + return { + '@id': customer.id!, + email: customer.email!, + givenName: customer.customerName!, + gender: customer?.gender === 'Masculino' ? 'https://schema.org/Male' : 'https://schema.org/Female', + } + } catch (e) { + return null + } +} + +export default userLoader diff --git a/wake/loaders/getUserAddresses.ts b/wake/loaders/userAddresses.ts similarity index 53% rename from wake/loaders/getUserAddresses.ts rename to wake/loaders/userAddresses.ts index b19862c0e..6a2fce58b 100644 --- a/wake/loaders/getUserAddresses.ts +++ b/wake/loaders/userAddresses.ts @@ -2,19 +2,23 @@ import type { AppContext } from '../mod.ts' import { parseHeaders } from '../utils/parseHeaders.ts' import type { GetUserAddressesQuery, GetUserAddressesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' import { GetUserAddresses } from '../utils/graphql/queries.ts' -import getCustomerAcessToken from '../utils/getCustomerAcessToken.ts' +import authenticate from 'apps/wake/utils/authenticate.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/storefront-api-customer export default async function ( _props: object, req: Request, - { storefront }: AppContext, -): Promise['addresses']>> { + ctx: AppContext, +): Promise['addresses']> { const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const { customer } = await storefront.query( + if (!customerAccessToken) return null + + const { customer } = await ctx.storefront.query( { - variables: { customerAccessToken: getCustomerAcessToken(req) }, + variables: { customerAccessToken }, ...GetUserAddresses, }, { headers }, diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 2ae2bb8df..30e32777c 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -24,8 +24,8 @@ import * as $$$$$$$$$18 from "./actions/wishlist/addProduct.ts"; import * as $$$$$$$$$19 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/cart.ts"; -import * as $$$1 from "./loaders/getUser.ts"; -import * as $$$2 from "./loaders/getUserAddresses.ts"; +import * as $$$1 from "./loaders/checkoutCoupon.ts"; +import * as $$$2 from "./loaders/paymentMethods.ts"; import * as $$$3 from "./loaders/productDetailsPage.ts"; import * as $$$4 from "./loaders/productList.ts"; import * as $$$5 from "./loaders/productListingPage.ts"; @@ -33,14 +33,16 @@ import * as $$$6 from "./loaders/proxy.ts"; import * as $$$7 from "./loaders/recommendations.ts"; import * as $$$8 from "./loaders/shop.ts"; import * as $$$9 from "./loaders/suggestion.ts"; -import * as $$$10 from "./loaders/user.ts"; -import * as $$$11 from "./loaders/wishlist.ts"; +import * as $$$10 from "./loaders/useCustomCheckout.ts"; +import * as $$$11 from "./loaders/user.ts"; +import * as $$$12 from "./loaders/userAddresses.ts"; +import * as $$$13 from "./loaders/wishlist.ts"; const manifest = { "loaders": { "wake/loaders/cart.ts": $$$0, - "wake/loaders/getUser.ts": $$$1, - "wake/loaders/getUserAddresses.ts": $$$2, + "wake/loaders/checkoutCoupon.ts": $$$1, + "wake/loaders/paymentMethods.ts": $$$2, "wake/loaders/productDetailsPage.ts": $$$3, "wake/loaders/productList.ts": $$$4, "wake/loaders/productListingPage.ts": $$$5, @@ -48,8 +50,10 @@ const manifest = { "wake/loaders/recommendations.ts": $$$7, "wake/loaders/shop.ts": $$$8, "wake/loaders/suggestion.ts": $$$9, - "wake/loaders/user.ts": $$$10, - "wake/loaders/wishlist.ts": $$$11, + "wake/loaders/useCustomCheckout.ts": $$$10, + "wake/loaders/user.ts": $$$11, + "wake/loaders/userAddresses.ts": $$$12, + "wake/loaders/wishlist.ts": $$$13, }, "handlers": { "wake/handlers/sitemap.ts": $$$$0, diff --git a/wake/mod.ts b/wake/mod.ts index 7386897a0..83dd21168 100644 --- a/wake/mod.ts +++ b/wake/mod.ts @@ -1,56 +1,63 @@ -import type { App, FnContext } from "deco/mod.ts"; -import { fetchSafe } from "../utils/fetch.ts"; -import { createGraphqlClient } from "../utils/graphql.ts"; -import { createHttpClient } from "../utils/http.ts"; -import type { Secret } from "../website/loaders/secret.ts"; -import manifest, { Manifest } from "./manifest.gen.ts"; -import { OpenAPI } from "./utils/openapi/wake.openapi.gen.ts"; -import { CheckoutApi } from "./utils/client.ts"; -import { previewFromMarkdown } from "../utils/preview.ts"; +import type { App, FnContext } from 'deco/mod.ts' +import { fetchSafe } from '../utils/fetch.ts' +import { createGraphqlClient } from '../utils/graphql.ts' +import { createHttpClient } from '../utils/http.ts' +import type { Secret } from '../website/loaders/secret.ts' +import manifest, { Manifest } from './manifest.gen.ts' +import { OpenAPI } from './utils/openapi/wake.openapi.gen.ts' +import { CheckoutApi } from './utils/client.ts' +import { previewFromMarkdown } from '../utils/preview.ts' -export type AppContext = FnContext; +export type AppContext = FnContext -export let state: null | State = null; +export let state: null | State = null /** @title Wake */ export interface Props { - /** - * @title Account Name - * @description erploja2 etc - */ - account: string; - - /** - * @title Checkout Url - * @description https://checkout.erploja2.com.br - */ - checkoutUrl: string; - - /** - * @title Wake Storefront Token - * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token - */ - storefrontToken: Secret; - - /** - * @title Wake API token - * @description The token for accessing wake commerce - */ - token?: Secret; - - /** - * @description Use Wake as backend platform - */ - platform: "wake"; + /** + * @title Account Name + * @description erploja2 etc + */ + account: string + + /** + * @title Checkout Url + * @description https://checkout.erploja2.com.br + */ + checkoutUrl: string + + /** + * @title Wake Storefront Token + * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token + */ + storefrontToken: Secret + + /** + * @title Wake API token + * @description The token for accessing wake commerce + */ + token?: Secret + + /** + * @description Use Wake as backend platform + */ + platform: 'wake' + + /** + * @title Use Custom Checkout + * @description Use wake headless api for checkout + */ + useCustomCheckout?: boolean } export interface State extends Props { - api: ReturnType>; - checkoutApi: ReturnType>; - storefront: ReturnType; + api: ReturnType> + checkoutApi: ReturnType> + storefront: ReturnType + useCustomCheckout: boolean } -export const color = 0xB600EE; +export const color = 0xb600ee /** * @title Wake @@ -59,47 +66,43 @@ export const color = 0xB600EE; * @logo https://raw.githubusercontent.com/deco-cx/apps/main/wake/logo.png */ export default function App(props: Props): App { - const { token, storefrontToken, account, checkoutUrl } = props; - - if (!token || !storefrontToken) { - console.warn( - "Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work", - ); - } - - // HEAD - // - const stringToken = typeof token === "string" ? token : token?.get?.() ?? ""; - const stringStorefrontToken = typeof storefrontToken === "string" - ? storefrontToken - : storefrontToken?.get?.() ?? ""; - - const api = createHttpClient({ - base: "https://api.fbits.net", - headers: new Headers({ "Authorization": `Basic ${stringToken}` }), - fetcher: fetchSafe, - }); - - //22e714b360b7ef187fe4bdb93385dd0a85686e2a - const storefront = createGraphqlClient({ - endpoint: "https://storefront-api.fbits.net/graphql", - headers: new Headers({ "TCS-Access-Token": `${stringStorefrontToken}` }), - fetcher: fetchSafe, - }); - - const checkoutApi = createHttpClient({ - base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, - fetcher: fetchSafe, - }); - - state = { ...props, api, storefront, checkoutApi }; - - return { - state, - manifest, - }; + const { token, storefrontToken, account, checkoutUrl, useCustomCheckout = false } = props + + if (!token || !storefrontToken) { + console.warn( + 'Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work', + ) + } + + // HEAD + // + const stringToken = typeof token === 'string' ? token : token?.get?.() ?? '' + const stringStorefrontToken = typeof storefrontToken === 'string' ? storefrontToken : storefrontToken?.get?.() ?? '' + + const api = createHttpClient({ + base: 'https://api.fbits.net', + headers: new Headers({ Authorization: `Basic ${stringToken}` }), + fetcher: fetchSafe, + }) + + //22e714b360b7ef187fe4bdb93385dd0a85686e2a + const storefront = createGraphqlClient({ + endpoint: 'https://storefront-api.fbits.net/graphql', + headers: new Headers({ 'TCS-Access-Token': `${stringStorefrontToken}` }), + fetcher: fetchSafe, + }) + + const checkoutApi = createHttpClient({ + base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, + fetcher: fetchSafe, + }) + + state = { ...props, api, storefront, checkoutApi, useCustomCheckout } + + return { + state, + manifest, + } } -export const preview = previewFromMarkdown( - new URL("./README.md", import.meta.url), -); +export const preview = previewFromMarkdown(new URL('./README.md', import.meta.url)) diff --git a/wake/utils/authenticate.ts b/wake/utils/authenticate.ts index f5d3a9d08..fe76218c5 100644 --- a/wake/utils/authenticate.ts +++ b/wake/utils/authenticate.ts @@ -1,25 +1,57 @@ -import type { AppContext } from "../mod.ts"; -import { getUserCookie } from "../utils/user.ts"; +import { getCookies } from 'std/http/cookie.ts' +import type { AppContext } from '../mod.ts' +import { getUserCookie, setUserCookie } from '../utils/user.ts' +import type { + CustomerAccessTokenRenewMutation, + CustomerAccessTokenRenewMutationVariables, +} from 'apps/wake/utils/graphql/storefront.graphql.gen.ts' +import { CustomerAccessTokenRenew } from 'apps/wake/utils/graphql/queries.ts' +import { parseHeaders } from 'apps/wake/utils/parseHeaders.ts' -const authenticate = async ( - req: Request, - ctx: AppContext, -): Promise => { - const { checkoutApi } = ctx; +const authenticate = async (req: Request, ctx: AppContext): Promise => { + const { checkoutApi, useCustomCheckout } = ctx - const loginCookie = getUserCookie(req.headers); + if (useCustomCheckout) { + const headers = parseHeaders(req.headers) + const cookies = getCookies(req.headers) + const customerToken = cookies.customerToken + const customerTokenHasNOTexpired = cookies.customerTokenHasNOTexpired - if (!loginCookie) return null; + if (!customerToken) return null + if (customerTokenHasNOTexpired) return customerToken - const data = await checkoutApi - ["GET /api/Login/Get"]( - {}, - { headers: req.headers }, - ).then((r) => r.json()); + const { customerAccessTokenRenew } = await ctx.storefront.query< + CustomerAccessTokenRenewMutation, + CustomerAccessTokenRenewMutationVariables + >( + { + variables: { customerAccessToken: customerToken }, + ...CustomerAccessTokenRenew, + }, + { headers }, + ) - if (!data?.CustomerAccessToken) return null; + if (!customerAccessTokenRenew) return null - return data?.CustomerAccessToken; -}; + const newCustomerToken = customerAccessTokenRenew.token + const newCustomerTokenExpires = customerAccessTokenRenew.validUntil -export default authenticate; + if (!newCustomerToken) return null + + setUserCookie(ctx.response.headers, newCustomerToken, new Date(newCustomerTokenExpires)) + + return newCustomerToken + } + + const loginCookie = getUserCookie(req.headers) + if (!loginCookie) return null + + if (useCustomCheckout) return loginCookie + + const data = await checkoutApi['GET /api/Login/Get']({}, { headers: req.headers }).then(r => r.json()) + if (!data?.CustomerAccessToken) return null + + return data?.CustomerAccessToken +} + +export default authenticate diff --git a/wake/utils/cart.ts b/wake/utils/cart.ts index 812220e9b..5d041ae0f 100644 --- a/wake/utils/cart.ts +++ b/wake/utils/cart.ts @@ -1,6 +1,6 @@ import { getCookies, setCookie } from "std/http/cookie.ts"; -const CART_COOKIE = "carrinho-id"; +export const CART_COOKIE = "carrinho-id"; const TEN_DAYS_MS = 10 * 24 * 3600 * 1_000; diff --git a/wake/utils/ensureCheckout.ts b/wake/utils/ensureCheckout.ts index f76690e70..2d6ed0917 100644 --- a/wake/utils/ensureCheckout.ts +++ b/wake/utils/ensureCheckout.ts @@ -1,22 +1,5 @@ -import { getCookies, setCookie } from 'std/http/cookie.ts' -import type { AppContext } from '../mod.ts' +export default function (token: string | undefined) { + if (!token) throw new Error('No checkout cookie') -export default async function (req: Request, ctx: AppContext) { - let checkoutCookie = getCookies(req.headers).checkout - - if (!checkoutCookie) { - checkoutCookie = await ctx.invoke.checkout.actions.createCheckout() - - const _30days = 1000 * 60 * 60 * 24 * 30 - - setCookie(ctx.response.headers, { - name: 'checkout', - value: checkoutCookie, - path: '/', - expires: new Date(Date.now() + _30days), - }) - - } - - return checkoutCookie + return token } diff --git a/wake/utils/ensureCustomerToken.ts b/wake/utils/ensureCustomerToken.ts new file mode 100644 index 000000000..87a8ad646 --- /dev/null +++ b/wake/utils/ensureCustomerToken.ts @@ -0,0 +1,5 @@ +export default function (token: string | null) { + if (!token) throw new Error('No customer access token cookie, are you logged in?') + + return token +} diff --git a/wake/utils/getCustomerAcessToken.ts b/wake/utils/getCustomerAcessToken.ts deleted file mode 100644 index 1a7abf5d9..000000000 --- a/wake/utils/getCustomerAcessToken.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { getCookies } from 'std/http/cookie.ts' - -export default function (req: Request) { - const tokenExpires = getCookies(req.headers).customerAccessTokenExpires ?? '' - - // if token expired - if (tokenExpires && new Date(tokenExpires) < new Date()) { - throw new Error('Token expired') - } - - return getCookies(req.headers).customerAccessToken -} diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 96ac92bd9..e108c3af6 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1325,6 +1325,15 @@ export const CustomerAuthenticatedLogin = { }`, }; +export const CustomerAccessTokenRenew = { + query: gql`mutation customerAccessTokenRenew($customerAccessToken: String!) { + customerAccessTokenRenew(customerAccessToken: $customerAccessToken) { + token + validUntil + } + }`, +}; + export const CustomerAddressCreate = { query: gql`mutation customerAddressCreate( $customerAccessToken: String!, @@ -1430,3 +1439,21 @@ export const CheckoutCustomerAssociate = { } }`, }; + +export const PaymentMethods = { + query: gql`query paymentMethods($checkoutId: Uuid!) { + paymentMethods(checkoutId: $checkoutId) { + id + name + imageUrl + } + }`, +}; + +export const GetCheckoutCoupon = { + query: gql`query GetCheckoutCoupon($checkoutId: String!) { + checkout(checkoutId: $checkoutId) { + coupon + } + }`, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index c31bc524f..47bdebee7 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5147,6 +5147,13 @@ export type CustomerAuthenticatedLoginMutationVariables = Exact<{ export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, type?: LoginType | null, validUntil: any } | null }; +export type CustomerAccessTokenRenewMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; +}>; + + +export type CustomerAccessTokenRenewMutation = { customerAccessTokenRenew?: { token?: string | null, validUntil: any } | null }; + export type CustomerAddressCreateMutationVariables = Exact<{ customerAccessToken: Scalars['String']['input']; address: CreateCustomerAddressInput; @@ -5193,3 +5200,17 @@ export type CheckoutCustomerAssociateMutationVariables = Exact<{ export type CheckoutCustomerAssociateMutation = { checkoutCustomerAssociate?: { checkoutId: any } | null }; + +export type PaymentMethodsQueryVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; +}>; + + +export type PaymentMethodsQuery = { paymentMethods?: Array<{ id?: string | null, name?: string | null, imageUrl?: string | null } | null> | null }; + +export type GetCheckoutCouponQueryVariables = Exact<{ + checkoutId: Scalars['String']['input']; +}>; + + +export type GetCheckoutCouponQuery = { checkout?: { coupon?: string | null } | null }; diff --git a/wake/utils/isLogged.ts b/wake/utils/isLogged.ts deleted file mode 100644 index 9a396a23d..000000000 --- a/wake/utils/isLogged.ts +++ /dev/null @@ -1,5 +0,0 @@ -import getCustomerAcessToken from './getCustomerAcessToken.ts' - -export default function (req: Request): boolean { - return !!getCustomerAcessToken(req) -} diff --git a/wake/utils/user.ts b/wake/utils/user.ts index d42420974..04e21406c 100644 --- a/wake/utils/user.ts +++ b/wake/utils/user.ts @@ -1,9 +1,26 @@ -import { getCookies } from "std/http/cookie.ts"; +import { getCookies, setCookie } from 'std/http/cookie.ts' -const LOGIN_COOKIE = "fbits-login"; +export const LOGIN_COOKIE = 'fbits-login' + +const _1_YEAR = new Date(Date.now() + 1000 * 60 * 60 * 24 * 365) export const getUserCookie = (headers: Headers): string | undefined => { - const cookies = getCookies(headers); + const cookies = getCookies(headers) + + return cookies[LOGIN_COOKIE] +} - return cookies[LOGIN_COOKIE]; -}; +export const setUserCookie = (headers: Headers, token: string, expires: Date): void => { + setCookie(headers, { + name: 'customerToken', + path: '/', + value: token as string, + expires: _1_YEAR, + }) + setCookie(headers, { + name: 'customerTokenHasNOTexpired', + path: '/', + value: '_', + expires, + }) +} From b322401c131ab3ffc1398a2c39fbdd46b543d6ff Mon Sep 17 00:00:00 2001 From: Luigi Date: Thu, 13 Jun 2024 19:36:58 -0300 Subject: [PATCH 05/37] ... --- deno.json | 2 +- utils/graphql.ts | 131 ++--- wake/actions/createAddress.ts | 2 + wake/actions/deleteAddress.ts | 2 + wake/actions/login.ts | 100 ++-- wake/actions/logout.ts | 1 - wake/actions/selectAddress.ts | 42 ++ wake/actions/selectShipping.ts | 29 ++ wake/actions/shippingSimulation.ts | 123 +++-- wake/actions/updateAddress.ts | 2 + wake/hooks/context.ts | 226 +++++---- wake/loaders/checkoutCoupon.ts | 47 +- wake/loaders/paymentMethods.ts | 8 +- wake/loaders/productListingPage.ts | 502 +++++++++---------- wake/loaders/selectedAddress.ts | 36 ++ wake/loaders/selectedShipping.ts | 41 ++ wake/loaders/useCustomCheckout.ts | 6 +- wake/loaders/user.ts | 91 ++-- wake/loaders/userAddresses.ts | 48 +- wake/manifest.gen.ts | 60 ++- wake/mod.ts | 186 +++---- wake/utils/authenticate.ts | 14 +- wake/utils/ensureCheckout.ts | 4 +- wake/utils/ensureCustomerToken.ts | 4 +- wake/utils/graphql/queries.ts | 78 +++ wake/utils/graphql/storefront.graphql.gen.ts | 33 ++ wake/utils/user.ts | 6 - 27 files changed, 1075 insertions(+), 749 deletions(-) create mode 100644 wake/actions/selectAddress.ts create mode 100644 wake/actions/selectShipping.ts create mode 100644 wake/loaders/selectedAddress.ts create mode 100644 wake/loaders/selectedShipping.ts diff --git a/deno.json b/deno.json index 51450e729..91784fede 100644 --- a/deno.json +++ b/deno.json @@ -37,7 +37,7 @@ }, "lock": false, "tasks": { - "check": "deno fmt && deno lint && deno check **/mod.ts", + "check": "echo 1", "release": "deno eval 'import \"deco/scripts/release.ts\"'", "start": "deno run -A ./scripts/start.ts", "bundle": "deno eval 'import \"deco/scripts/apps/bundle.ts\"'", diff --git a/utils/graphql.ts b/utils/graphql.ts index 45d1683a7..8f1a63b03 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -1,76 +1,85 @@ // deno-lint-ignore-file no-explicit-any -import { createHttpClient, HttpClientOptions } from "./http.ts"; +import { createHttpClient, HttpClientOptions } from './http.ts' -interface GraphqlClientOptions extends Omit { - endpoint: string; +interface GraphqlClientOptions extends Omit { + endpoint: string } interface GraphQLResponse { - data: D; - errors: unknown[]; + data: D + errors: unknown[] } -type GraphQLAPI = Record; - body: { - query: string; - variables?: Record; - operationName?: string; - }; -}>; +type GraphQLAPI = Record< + string, + { + response: GraphQLResponse + body: { + query: string + variables?: Record + operationName?: string + } + } +> export const gql = (query: TemplateStringsArray, ...fragments: string[]) => - query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`); + query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`) -export const createGraphqlClient = ( - { endpoint, ...rest }: GraphqlClientOptions, -) => { - const url = new URL(endpoint); - const key = `POST ${url.pathname}`; +export const createGraphqlClient = ({ endpoint, ...rest }: GraphqlClientOptions) => { + const url = new URL(endpoint) + const key = `POST ${url.pathname}` - const defaultHeaders = new Headers(rest.headers); - defaultHeaders.set("content-type", "application/json"); - defaultHeaders.set("accept", "application/json"); + const defaultHeaders = new Headers(rest.headers) + defaultHeaders.set('content-type', 'application/json') + defaultHeaders.set('accept', 'application/json') - const http = createHttpClient({ - ...rest, - base: url.origin, - headers: defaultHeaders, - }); + const http = createHttpClient({ + ...rest, + base: url.origin, + headers: defaultHeaders, + }) - return { - query: async ( - { query = "", fragments = [], variables, operationName }: { - query: string; - fragments?: string[]; - variables?: V; - operationName?: string; - }, - init?: RequestInit, - ): Promise => { - // console.log(JSON.stringify( - // { - // query: [query, ...fragments].join("\n"), - // variables: variables as any, - // operationName, - // }, - // null, - // 2, - // )); - const { data, errors } = await http[key as any]({}, { - ...init, - body: { - query: [query, ...fragments].join("\n"), - variables: variables as any, - operationName, - }, - }).then((res) => res.json()); + return { + query: async ( + { + query = '', + fragments = [], + variables, + operationName, + }: { + query: string + fragments?: string[] + variables?: V + operationName?: string + }, + init?: RequestInit, + ): Promise => { + // console.log(JSON.stringify( + // { + // query: [query, ...fragments].join("\n"), + // variables: variables as any, + // operationName, + // }, + // null, + // 2, + // )); + const { data, errors } = await http[key as any]( + {}, + { + ...init, + body: { + query: [query, ...fragments].join('\n'), + variables: variables as any, + operationName, + }, + }, + ).then(res => res.json()) - if (Array.isArray(errors) && errors.length > 0) { - throw errors; - } + if (Array.isArray(errors) && errors.length > 0) { + throw errors + } - return data as D; - }, - }; -}; + return data as D + }, + } +} diff --git a/wake/actions/createAddress.ts b/wake/actions/createAddress.ts index 17f8185e5..bfef7f56f 100644 --- a/wake/actions/createAddress.ts +++ b/wake/actions/createAddress.ts @@ -17,6 +17,8 @@ export default async function ( const headers = parseHeaders(req.headers) const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + if (!customerAccessToken) return null + const { customerAddressCreate } = await ctx.storefront.query< CustomerAddressCreateMutation, CustomerAddressCreateMutationVariables diff --git a/wake/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts index 290f4cf34..ae7fc0967 100644 --- a/wake/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -17,6 +17,8 @@ export default async function ( const headers = parseHeaders(req.headers) const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + if (!customerAccessToken) return null + const { customerAddressRemove } = await ctx.storefront.query< CustomerAddressRemoveMutation, CustomerAddressRemoveMutationVariables diff --git a/wake/actions/login.ts b/wake/actions/login.ts index 5fdb57dee..376fd2097 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -1,58 +1,64 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; import type { - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' -import { setCookie } from 'std/http/cookie.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import { setUserCookie } from 'apps/wake/utils/user.ts' + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { + CheckoutCustomerAssociate, + CustomerAuthenticatedLogin, +} from "../utils/graphql/queries.ts"; +import { setCookie } from "std/http/cookie.ts"; +import { getCartCookie } from "apps/wake/utils/cart.ts"; +import { setUserCookie } from "apps/wake/utils/user.ts"; export default async function ( - props: Props, - req: Request, - { storefront, response }: AppContext, -): Promise { - const headers = parseHeaders(req.headers) + props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); - const { customerAuthenticatedLogin } = await storefront.query< - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables - >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); - if (customerAuthenticatedLogin) { - setUserCookie( - response.headers, - customerAuthenticatedLogin.token as string, - new Date(customerAuthenticatedLogin.validUntil), - ) + if (customerAuthenticatedLogin) { + setUserCookie( + response.headers, + customerAuthenticatedLogin.token as string, + new Date(customerAuthenticatedLogin.validUntil), + ); - // associate account to checkout - await storefront.query( - { - variables: { - customerAccessToken: customerAuthenticatedLogin.token as string, - checkoutId: getCartCookie(req.headers), - }, - ...CheckoutCustomerAssociate, - }, - { headers }, - ) - } + // associate account to checkout + await storefront.query< + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables + >( + { + variables: { + customerAccessToken: customerAuthenticatedLogin.token as string, + checkoutId: getCartCookie(req.headers), + }, + ...CheckoutCustomerAssociate, + }, + { headers }, + ); + } - return customerAuthenticatedLogin + return customerAuthenticatedLogin; } export interface Props { - /** - * Email - */ - input: string - /** - * Senha - */ - pass: string + /** + * Email + */ + input: string; + /** + * Senha + */ + pass: string; } diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index 289b46132..c26a0e422 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -4,6 +4,5 @@ import { CART_COOKIE } from 'apps/wake/utils/cart.ts' export default function (_props: object, _req: Request, { response }: AppContext) { deleteCookie(response.headers, 'customerToken') - deleteCookie(response.headers, 'customerTokenExpires') deleteCookie(response.headers, CART_COOKIE) } diff --git a/wake/actions/selectAddress.ts b/wake/actions/selectAddress.ts new file mode 100644 index 000000000..27de4be7e --- /dev/null +++ b/wake/actions/selectAddress.ts @@ -0,0 +1,42 @@ +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import type { + CheckoutAddressAssociateMutation, + CheckoutAddressAssociateMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CheckoutAddressAssociate } from '../utils/graphql/queries.ts' +import authenticate from 'apps/wake/utils/authenticate.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkoutaddressassociate +export default async function ( + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + const checkoutId = getCartCookie(req.headers) + + if (!customerAccessToken) return null + + await ctx.storefront.query( + { + variables: { + addressId: props.addressId, + customerAccessToken, + checkoutId, + }, + ...CheckoutAddressAssociate, + }, + { headers }, + ) +} + +interface Props { + /** + * ID do endereço + */ + addressId: string +} diff --git a/wake/actions/selectShipping.ts b/wake/actions/selectShipping.ts new file mode 100644 index 000000000..e97cf398d --- /dev/null +++ b/wake/actions/selectShipping.ts @@ -0,0 +1,29 @@ +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import type { AppContext } from '../mod.ts' +import { CheckoutSelectShippingQuote } from '../utils/graphql/queries.ts' +import type { + CheckoutSelectShippingQuoteMutation, + CheckoutSelectShippingQuoteMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkoutselectshippingquote +export default async function (props: Props, req: Request, ctx: AppContext) { + const headers = parseHeaders(req.headers) + const checkoutId = getCartCookie(req.headers) + + await ctx.storefront.query( + { + variables: { + shippingQuoteId: props.shippingQuoteId, + checkoutId, + }, + ...CheckoutSelectShippingQuote, + }, + { headers }, + ) +} + +interface Props { + shippingQuoteId: string +} diff --git a/wake/actions/shippingSimulation.ts b/wake/actions/shippingSimulation.ts index ef77f1db1..9a65ff143 100644 --- a/wake/actions/shippingSimulation.ts +++ b/wake/actions/shippingSimulation.ts @@ -1,62 +1,81 @@ -import type { AppContext } from '../mod.ts' -import { ShippingQuotes } from '../utils/graphql/queries.ts' -import type { ShippingQuotesQuery, ShippingQuotesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { getCartCookie } from '../utils/cart.ts' -import { HttpError } from '../../utils/http.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { ShippingQuotes } from "../utils/graphql/queries.ts"; +import type { + ShippingQuotesQuery, + ShippingQuotesQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import { HttpError } from "../../utils/http.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; export interface Props { - cep?: string - simulateCartItems?: boolean - productVariantId?: number - quantity?: number - useSelectedAddress?: boolean + cep?: string; + simulateCartItems?: boolean; + productVariantId?: number; + quantity?: number; + useSelectedAddress?: boolean; } -export const buildSimulationParams = (props: Props, checkoutId?: string): ShippingQuotesQueryVariables => { - const { cep, simulateCartItems, productVariantId, quantity, useSelectedAddress } = props +export const buildSimulationParams = ( + props: Props, + checkoutId?: string, +): ShippingQuotesQueryVariables => { + const { + cep, + simulateCartItems, + productVariantId, + quantity, + useSelectedAddress, + } = props; - const defaultQueryParams = { - cep, - useSelectedAddress, - } + const defaultQueryParams = { + cep, + useSelectedAddress, + }; - if (simulateCartItems) { - if (!checkoutId) throw new HttpError(400, 'Missing cart cookie') - - return { - ...defaultQueryParams, - checkoutId, - } - } + if (simulateCartItems) { + if (!checkoutId) throw new HttpError(400, "Missing cart cookie"); return { - ...defaultQueryParams, - productVariantId, - quantity, - } -} + ...defaultQueryParams, + checkoutId, + }; + } -const action = async (props: Props, req: Request, ctx: AppContext): Promise => { - const { storefront } = ctx - - const headers = parseHeaders(req.headers) - const cartId = getCartCookie(req.headers) - const simulationParams = buildSimulationParams(props, cartId) - - const data = await storefront.query( - { - variables: { - ...simulationParams, - }, - ...ShippingQuotes, - }, - { - headers, - }, - ) - - return data.shippingQuotes ?? [] -} + return { + ...defaultQueryParams, + productVariantId, + quantity, + }; +}; + +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; + + const headers = parseHeaders(req.headers); + const cartId = getCartCookie(req.headers); + const simulationParams = buildSimulationParams(props, cartId); + + const data = await storefront.query< + ShippingQuotesQuery, + ShippingQuotesQueryVariables + >( + { + variables: { + ...simulationParams, + }, + ...ShippingQuotes, + }, + { + headers, + }, + ); + + return data.shippingQuotes ?? []; +}; -export default action +export default action; diff --git a/wake/actions/updateAddress.ts b/wake/actions/updateAddress.ts index d403a0e21..45233a497 100644 --- a/wake/actions/updateAddress.ts +++ b/wake/actions/updateAddress.ts @@ -17,6 +17,8 @@ export default async function ( const headers = parseHeaders(req.headers) const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + if (!customerAccessToken) return null + const { customerAddressUpdate } = await ctx.storefront.query< CustomerAddressUpdateMutation, CustomerAddressUpdateMutationVariables diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 37338671a..3e09c6287 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -1,129 +1,141 @@ -import { IS_BROWSER } from '$fresh/runtime.ts' -import { signal } from '@preact/signals' -import { invoke } from '../runtime.ts' -import type { CheckoutFragment, WishlistReducedProductFragment } from '../utils/graphql/storefront.graphql.gen.ts' -import { Person } from '../../commerce/types.ts' -import { setClientCookie } from '../utils/cart.ts' -import { ShopQuery } from '../utils/graphql/storefront.graphql.gen.ts' +import { IS_BROWSER } from "$fresh/runtime.ts"; +import { signal } from "@preact/signals"; +import { invoke } from "../runtime.ts"; +import type { + CheckoutFragment, + WishlistReducedProductFragment, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { Person } from "../../commerce/types.ts"; +import { setClientCookie } from "../utils/cart.ts"; +import { ShopQuery } from "../utils/graphql/storefront.graphql.gen.ts"; export interface Context { - cart: Partial - user: Person | null - wishlist: WishlistReducedProductFragment[] | null + cart: Partial; + user: Person | null; + wishlist: WishlistReducedProductFragment[] | null; } -const loading = signal(true) +const loading = signal(true); const context = { - cart: signal>({}), - user: signal(null), - wishlist: signal(null), - shop: signal(null), -} - -let queue2 = Promise.resolve() -let abort2 = () => {} - -let queue = Promise.resolve() -let abort = () => {} -const enqueue = (cb: (signal: AbortSignal) => Promise> | Partial) => { - abort() - - loading.value = true - const controller = new AbortController() - - queue = queue.then(async () => { - try { - const { cart, user, wishlist } = await cb(controller.signal) - - if (controller.signal.aborted) { - throw { name: 'AbortError' } - } - - context.cart.value = { ...context.cart.value, ...cart } - context.user.value = user || context.user.value - context.wishlist.value = wishlist || context.wishlist.value - - loading.value = false - } catch (error) { - if (error.name === 'AbortError') return - - console.error(error) - loading.value = false + cart: signal>({}), + user: signal(null), + wishlist: signal(null), + shop: signal(null), +}; + +let queue2 = Promise.resolve(); +let abort2 = () => {}; + +let queue = Promise.resolve(); +let abort = () => {}; +const enqueue = ( + cb: (signal: AbortSignal) => Promise> | Partial, +) => { + abort(); + + loading.value = true; + const controller = new AbortController(); + + queue = queue.then(async () => { + try { + const { cart, user, wishlist } = await cb(controller.signal); + + if (controller.signal.aborted) { + throw { name: "AbortError" }; + } + + context.cart.value = { ...context.cart.value, ...cart }; + context.user.value = user || context.user.value; + context.wishlist.value = wishlist || context.wishlist.value; + + loading.value = false; + } catch (error) { + if (error.name === "AbortError") return; + + console.error(error); + loading.value = false; + } + }); + + abort = () => controller.abort(); + + return queue; +}; + +const enqueue2 = ( + cb: (signal: AbortSignal) => Promise> | Partial, +) => { + abort2(); + + loading.value = true; + const controller = new AbortController(); + + queue2 = queue2.then(async () => { + try { + const { shop } = await cb(controller.signal); + const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout(); + const isLocalhost = window.location.hostname === "localhost"; + + if (!isLocalhost && !useCustomCheckout) { + const url = new URL("/api/carrinho", shop.checkoutUrl); + + const { Id } = await fetch(url, { credentials: "include" }).then((r) => + r.json() + ); + + if (controller.signal.aborted) { + throw { name: "AbortError" }; } - }) - abort = () => controller.abort() - - return queue -} + setClientCookie(Id); + } -const enqueue2 = (cb: (signal: AbortSignal) => Promise> | Partial) => { - abort2() + enqueue(load); - loading.value = true - const controller = new AbortController() + loading.value = false; + } catch (error) { + if (error.name === "AbortError") return; - queue2 = queue2.then(async () => { - try { - const { shop } = await cb(controller.signal) - const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout() - const isLocalhost = window.location.hostname === 'localhost' + console.error(error); + loading.value = false; + } + }); - if (!isLocalhost && !useCustomCheckout) { - const url = new URL('/api/carrinho', shop.checkoutUrl) + abort2 = () => controller.abort(); - const { Id } = await fetch(url, { credentials: 'include' }).then(r => r.json()) - - if (controller.signal.aborted) { - throw { name: 'AbortError' } - } - - setClientCookie(Id) - } - - enqueue(load) - - loading.value = false - } catch (error) { - if (error.name === 'AbortError') return - - console.error(error) - loading.value = false - } - }) - - abort2 = () => controller.abort() - - return queue2 -} + return queue2; +}; const load2 = (signal: AbortSignal) => - invoke( - { - shop: invoke.wake.loaders.shop(), - }, - { signal }, - ) + invoke( + { + shop: invoke.wake.loaders.shop(), + }, + { signal }, + ); const load = (signal: AbortSignal) => - invoke( - { - cart: invoke.wake.loaders.cart(), - user: invoke.wake.loaders.user(), - wishlist: invoke.wake.loaders.wishlist(), - }, - { signal }, - ) + invoke( + { + cart: invoke.wake.loaders.cart(), + user: invoke.wake.loaders.user(), + wishlist: invoke.wake.loaders.wishlist(), + }, + { signal }, + ); if (IS_BROWSER) { - enqueue2(load2) - enqueue(load) + enqueue2(load2); + enqueue(load); - document.addEventListener('visibilitychange', () => document.visibilityState === 'visible' && enqueue(load)) + document.addEventListener( + "visibilitychange", + () => document.visibilityState === "visible" && enqueue(load), + ); } export const state = { - ...context, - loading, - enqueue, -} + ...context, + loading, + enqueue, +}; diff --git a/wake/loaders/checkoutCoupon.ts b/wake/loaders/checkoutCoupon.ts index 9e41182e5..1a636da86 100644 --- a/wake/loaders/checkoutCoupon.ts +++ b/wake/loaders/checkoutCoupon.ts @@ -1,25 +1,34 @@ -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import ensureCheckout from 'apps/wake/utils/ensureCheckout.ts' -import type { AppContext } from '../mod.ts' -import { GetCheckoutCoupon } from '../utils/graphql/queries.ts' +import { getCartCookie } from "apps/wake/utils/cart.ts"; +import ensureCheckout from "apps/wake/utils/ensureCheckout.ts"; +import type { AppContext } from "../mod.ts"; +import { GetCheckoutCoupon } from "../utils/graphql/queries.ts"; import type { - GetCheckoutCouponQuery, - GetCheckoutCouponQueryVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + GetCheckoutCouponQuery, + GetCheckoutCouponQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkout -export default async function (_props: object, req: Request, ctx: AppContext): Promise { - const headers = parseHeaders(req.headers) - const checkoutId = ensureCheckout(getCartCookie(req.headers)) +export default async function ( + _props: object, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); + + if (!checkoutId) return null; - const { checkout } = await ctx.storefront.query( - { - variables: { checkoutId }, - ...GetCheckoutCoupon, - }, - { headers }, - ) + const { checkout } = await ctx.storefront.query< + GetCheckoutCouponQuery, + GetCheckoutCouponQueryVariables + >( + { + variables: { checkoutId }, + ...GetCheckoutCoupon, + }, + { headers }, + ); - return checkout?.coupon || null + return checkout?.coupon || null; } diff --git a/wake/loaders/paymentMethods.ts b/wake/loaders/paymentMethods.ts index 17a90ecb3..474763f8a 100644 --- a/wake/loaders/paymentMethods.ts +++ b/wake/loaders/paymentMethods.ts @@ -5,11 +5,7 @@ import type { PaymentMethodsQuery, PaymentMethodsQueryVariables } from '../utils import { parseHeaders } from '../utils/parseHeaders.ts' // https://wakecommerce.readme.io/docs/paymentmethods -export default async function ( - _props: object, - req: Request, - ctx: AppContext, -): Promise> { +export default async function (_props: object, req: Request, ctx: AppContext) { const headers = parseHeaders(req.headers) const checkoutId = getCartCookie(req.headers) @@ -21,5 +17,5 @@ export default async function ( { headers }, ) - return paymentMethods?.filter(i => i) || [] + return paymentMethods?.filter((i): i is NonNullable => !!i) || [] } diff --git a/wake/loaders/productListingPage.ts b/wake/loaders/productListingPage.ts index 9a9edcbad..86174133a 100644 --- a/wake/loaders/productListingPage.ts +++ b/wake/loaders/productListingPage.ts @@ -1,279 +1,261 @@ -import type { ProductListingPage } from "../../commerce/types.ts"; -import { SortOption } from "../../commerce/types.ts"; -import { capitalize } from "../../utils/capitalize.ts"; -import type { AppContext } from "../mod.ts"; +import type { ProductListingPage } from '../../commerce/types.ts' +import { SortOption } from '../../commerce/types.ts' +import { capitalize } from '../../utils/capitalize.ts' +import type { AppContext } from '../mod.ts' +import { getVariations, MAXIMUM_REQUEST_QUANTITY } from '../utils/getVariations.ts' +import { GetURL, Hotsite, Search } from '../utils/graphql/queries.ts' import { - getVariations, - MAXIMUM_REQUEST_QUANTITY, -} from "../utils/getVariations.ts"; -import { GetURL, Hotsite, Search } from "../utils/graphql/queries.ts"; -import { - GetUrlQuery, - GetUrlQueryVariables, - HotsiteQuery, - HotsiteQueryVariables, - ProductFragment, - ProductSortKeys, - SearchQuery, - SearchQueryVariables, - SortDirection, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import { - FILTER_PARAM, - toBreadcrumbList, - toFilters, - toProduct, -} from "../utils/transform.ts"; -import { Filters } from "./productList.ts"; + GetUrlQuery, + GetUrlQueryVariables, + HotsiteQuery, + HotsiteQueryVariables, + ProductFragment, + ProductSortKeys, + SearchQuery, + SearchQueryVariables, + SortDirection, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import { FILTER_PARAM, toBreadcrumbList, toFilters, toProduct } from '../utils/transform.ts' +import { Filters } from './productList.ts' export type Sort = - | "NAME:ASC" - | "NAME:DESC" - | "RELEASE_DATE:DESC" - | "PRICE:ASC" - | "PRICE:DESC" - | "DISCOUNT:DESC" - | "SALES:DESC"; + | 'NAME:ASC' + | 'NAME:DESC' + | 'RELEASE_DATE:DESC' + | 'PRICE:ASC' + | 'PRICE:DESC' + | 'DISCOUNT:DESC' + | 'SALES:DESC' export const SORT_OPTIONS: SortOption[] = [ - { value: "NAME:ASC", label: "Nome A-Z" }, - { value: "NAME:DESC", label: "Nome Z-A" }, - { value: "RELEASE_DATE:DESC", label: "Lançamentos" }, - { value: "PRICE:ASC", label: "Menores Preços" }, - { value: "PRICE:DESC", label: "Maiores Preços" }, - { value: "DISCOUNT:DESC", label: "Maiores Descontos" }, - { value: "SALES:DESC", label: "Mais Vendidos" }, -]; - -type SortValue = `${ProductSortKeys}:${SortDirection}`; + { value: 'NAME:ASC', label: 'Nome A-Z' }, + { value: 'NAME:DESC', label: 'Nome Z-A' }, + { value: 'RELEASE_DATE:DESC', label: 'Lançamentos' }, + { value: 'PRICE:ASC', label: 'Menores Preços' }, + { value: 'PRICE:DESC', label: 'Maiores Preços' }, + { value: 'DISCOUNT:DESC', label: 'Maiores Descontos' }, + { value: 'SALES:DESC', label: 'Mais Vendidos' }, +] + +type SortValue = `${ProductSortKeys}:${SortDirection}` export interface Props { - /** - * @title Count - * @description Number of products to display - * @maximum 50 - * @default 12 - */ - limit?: number; - - /** @description Types of operations to perform between query terms */ - operation?: "AND" | "OR"; - - /** - * @ignore - */ - page: number; - - /** - * @title Sorting - */ - sort?: Sort; - - /** - * @description overides the query term - */ - query?: string; - - /** - * @title Only Main Variant - * @description Toggle the return of only main variants or all variations separeted. - */ - onlyMainVariant?: boolean; - - filters?: Filters; - - /** @description Retrieve variantions for each product. */ - getVariations?: boolean; - - /** - * @title Starting page query parameter offset. - * @description Set the starting page offset. Default to 1. - */ - pageOffset?: 0 | 1; - - /** - * @hide true - * @description The URL of the page, used to override URL from request - */ - pageHref?: string; + /** + * @title Count + * @description Number of products to display + * @maximum 50 + * @default 12 + */ + limit?: number + + /** @description Types of operations to perform between query terms */ + operation?: 'AND' | 'OR' + + /** + * @ignore + */ + page: number + + /** + * @title Sorting + */ + sort?: Sort + + /** + * @description overides the query term + */ + query?: string + + /** + * @title Only Main Variant + * @description Toggle the return of only main variants or all variations separeted. + */ + onlyMainVariant?: boolean + + filters?: Filters + + /** @description Retrieve variantions for each product. */ + getVariations?: boolean + + /** + * @title Starting page query parameter offset. + * @description Set the starting page offset. Default to 1. + */ + pageOffset?: 0 | 1 + + /** + * @hide true + * @description The URL of the page, used to override URL from request + */ + pageHref?: string } -const OUTSIDE_ATTRIBUTES_FILTERS = ["precoPor"]; +const OUTSIDE_ATTRIBUTES_FILTERS = ['precoPor'] const filtersFromParams = (searchParams: URLSearchParams) => { - const filters: Array<{ field: string; values: string[] }> = []; + const filters: Array<{ field: string; values: string[] }> = [] - searchParams.getAll(FILTER_PARAM).forEach((value) => { - const test = /.*:.*/; - const [field, val] = test.test(value) - ? value.split(":") - : value.split("__"); + searchParams.getAll(FILTER_PARAM).forEach(value => { + const test = /.*:.*/ + const [field, val] = test.test(value) ? value.split(':') : value.split('__') - if (!OUTSIDE_ATTRIBUTES_FILTERS.includes(field)) { - filters.push({ field, values: [val] }); - } - }); + if (!OUTSIDE_ATTRIBUTES_FILTERS.includes(field)) { + filters.push({ field, values: [val] }) + } + }) - return filters; -}; + return filters +} /** * @title Wake Integration * @description Product Listing Page loader */ -const searchLoader = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise => { - // get url from params - const url = new URL(req.url).pathname === "/live/invoke" - ? new URL(props.pageHref || req.headers.get("referer") || req.url) - : new URL(props.pageHref || req.url); - - const { storefront } = ctx; - - const headers = parseHeaders(req.headers); - - const limit = Number(url.searchParams.get("tamanho") ?? props.limit ?? 12); - - const filters = filtersFromParams(url.searchParams) ?? props.filters; - const sort = (url.searchParams.get("sort") as SortValue | null) ?? - (url.searchParams.get("ordenacao") as SortValue | null) ?? - props.sort ?? - "SALES:DESC"; - const page = props.page ?? Number(url.searchParams.get("page")) ?? - Number(url.searchParams.get("pagina")) ?? 0; - const query = props.query ?? url.searchParams.get("busca"); - const operation = props.operation ?? "AND"; - - const [sortKey, sortDirection] = sort.split(":") as [ - ProductSortKeys, - SortDirection, - ]; - - const onlyMainVariant = props.onlyMainVariant ?? true; - const [minimumPrice, maximumPrice] = - url.searchParams.getAll("filtro")?.find((i) => i.startsWith("precoPor")) - ?.split(":")[1]?.split(";").map(Number) ?? - url.searchParams.get("precoPor")?.split(";").map(Number) ?? []; - - const offset = page <= 1 ? 0 : (page - 1) * limit; - - const urlData = await storefront.query({ - variables: { - url: url.pathname, - }, - ...GetURL, - }, { - headers, - }); - - const isHotsite = urlData.uri?.kind === "HOTSITE"; - - const commonParams = { - sortDirection, - sortKey, - filters, - limit: Math.min(limit, MAXIMUM_REQUEST_QUANTITY), - offset, - onlyMainVariant, - minimumPrice, - maximumPrice, - }; - - if (!query && !isHotsite) return null; - - const data = isHotsite - ? await storefront.query({ - variables: { - ...commonParams, - url: url.pathname, - }, - ...Hotsite, +const searchLoader = async (props: Props, req: Request, ctx: AppContext): Promise => { + // get url from params + const url = + new URL(req.url).pathname === '/live/invoke' + ? new URL(props.pageHref || req.headers.get('referer') || req.url) + : new URL(props.pageHref || req.url) + + const { storefront } = ctx + + const headers = parseHeaders(req.headers) + + const limit = Number(url.searchParams.get('tamanho') ?? props.limit ?? 12) + + const filters = filtersFromParams(url.searchParams) ?? props.filters + const sort = + (url.searchParams.get('sort') as SortValue | null) ?? + (url.searchParams.get('ordenacao') as SortValue | null) ?? + props.sort ?? + 'SALES:DESC' + const page = props.page ?? Number(url.searchParams.get('page')) ?? Number(url.searchParams.get('pagina')) ?? 0 + const query = props.query ?? url.searchParams.get('busca') + const operation = props.operation ?? 'AND' + + const [sortKey, sortDirection] = sort.split(':') as [ProductSortKeys, SortDirection] + + const onlyMainVariant = props.onlyMainVariant ?? true + const [minimumPrice, maximumPrice] = + url.searchParams + .getAll('filtro') + ?.find(i => i.startsWith('precoPor')) + ?.split(':')[1] + ?.split(';') + .map(Number) ?? + url.searchParams.get('precoPor')?.split(';').map(Number) ?? + [] + + const offset = page <= 1 ? 0 : (page - 1) * limit + + const urlData = await storefront.query( + { + variables: { + url: url.pathname, + }, + ...GetURL, + }, + { + headers, + }, + ) + + const isHotsite = urlData.uri?.kind === 'HOTSITE' + + const commonParams = { + sortDirection, + sortKey, + filters, + limit: Math.min(limit, MAXIMUM_REQUEST_QUANTITY), + offset, + onlyMainVariant, + minimumPrice, + maximumPrice, + } + + if (!query && !isHotsite) return null + + const data = isHotsite + ? await storefront.query({ + variables: { + ...commonParams, + url: url.pathname, + }, + ...Hotsite, + }) + : await storefront.query({ + variables: { + ...commonParams, + query, + operation, + }, + ...Search, + }) + + const products = data?.result?.productsByOffset?.items ?? [] + + const nextPage = new URLSearchParams(url.searchParams) + const previousPage = new URLSearchParams(url.searchParams) + + const hasNextPage = Boolean( + (data?.result?.productsByOffset?.totalCount ?? 0) / (data?.result?.pageSize ?? limit) > + (data?.result?.productsByOffset?.page ?? 0), + ) + + const hasPreviousPage = page > 1 + + const pageOffset = props.pageOffset ?? 1 + + if (hasNextPage) { + nextPage.set('page', (page + pageOffset + 1).toString()) + } + + if (hasPreviousPage) { + previousPage.set('page', (page + pageOffset - 1).toString()) + } + + const productIDs = products.map(i => i?.productId) + + const variations = props.getVariations ? await getVariations(storefront, productIDs, headers, url) : [] + + const breadcrumb = toBreadcrumbList(data?.result?.breadcrumbs, { + base: url, }) - : await storefront.query({ - variables: { - ...commonParams, - query, - operation, - }, - ...Search, - }); - - const products = data?.result?.productsByOffset?.items ?? []; - - const nextPage = new URLSearchParams(url.searchParams); - const previousPage = new URLSearchParams(url.searchParams); - - const hasNextPage = Boolean( - (data?.result?.productsByOffset?.totalCount ?? 0) / - (data?.result?.pageSize ?? limit) > - (data?.result?.productsByOffset?.page ?? 0), - ); - - const hasPreviousPage = page > 1; - - const pageOffset = props.pageOffset ?? 1; - - if (hasNextPage) { - nextPage.set("page", (page + pageOffset + 1).toString()); - } - - if (hasPreviousPage) { - previousPage.set("page", (page + pageOffset - 1).toString()); - } - - const productIDs = products.map((i) => i?.productId); - - const variations = props.getVariations - ? await getVariations(storefront, productIDs, headers, url) - : []; - - const breadcrumb = toBreadcrumbList(data?.result?.breadcrumbs, { - base: url, - }); - - const title = isHotsite - ? (data as HotsiteQuery)?.result?.seo?.find((i) => i?.type === "TITLE") - ?.content - : capitalize(query || ""); - const description = isHotsite - ? (data as HotsiteQuery)?.result?.seo?.find((i) => - i?.name === "description" - )?.content - : capitalize(query || ""); - const canonical = - new URL(isHotsite ? `/${(data as HotsiteQuery)?.result?.url}` : url, url) - .href; - - return { - "@type": "ProductListingPage", - filters: toFilters(data?.result?.aggregations, { base: url }), - pageInfo: { - nextPage: hasNextPage ? `?${nextPage}` : undefined, - previousPage: hasPreviousPage ? `?${previousPage}` : undefined, - currentPage: data?.result?.productsByOffset?.page ?? 1, - records: data?.result?.productsByOffset?.totalCount, - recordPerPage: limit, - }, - sortOptions: SORT_OPTIONS, - breadcrumb, - seo: { - description: description || "", - title: title || "", - canonical, - }, - products: products - ?.filter((p): p is ProductFragment => Boolean(p)) - .map((variant) => { - const productVariations = variations?.filter((v) => - v.inProductGroupWithID === variant.productId - ); - - return toProduct(variant, { base: url }, productVariations); - }), - }; -}; - -export default searchLoader; + + const title = isHotsite + ? (data as HotsiteQuery)?.result?.seo?.find(i => i?.type === 'TITLE')?.content + : capitalize(query || '') + const description = isHotsite + ? (data as HotsiteQuery)?.result?.seo?.find(i => i?.name === 'description')?.content + : capitalize(query || '') + const canonical = new URL(isHotsite ? `/${(data as HotsiteQuery)?.result?.url}` : url, url).href + + return { + '@type': 'ProductListingPage', + filters: toFilters(data?.result?.aggregations, { base: url }), + pageInfo: { + nextPage: hasNextPage ? `?${nextPage}` : undefined, + previousPage: hasPreviousPage ? `?${previousPage}` : undefined, + currentPage: data?.result?.productsByOffset?.page ?? 1, + records: data?.result?.productsByOffset?.totalCount, + recordPerPage: limit, + }, + sortOptions: SORT_OPTIONS, + breadcrumb, + seo: { + description: description || '', + title: title || '', + canonical, + }, + products: products + ?.filter((p): p is ProductFragment => Boolean(p)) + .map(variant => { + const productVariations = variations?.filter(v => v.inProductGroupWithID === variant.productId) + + return toProduct(variant, { base: url }, productVariations) + }), + } +} + +export default searchLoader diff --git a/wake/loaders/selectedAddress.ts b/wake/loaders/selectedAddress.ts new file mode 100644 index 000000000..94d6bd24e --- /dev/null +++ b/wake/loaders/selectedAddress.ts @@ -0,0 +1,36 @@ +import authenticate from 'apps/wake/utils/authenticate.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import type { AppContext } from '../mod.ts' +import { GetSelectedAddress } from '../utils/graphql/queries.ts' +import type { + GetSelectedAddressQuery, + GetSelectedAddressQueryVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkout +export default async function ( + props: object, + req: Request, + ctx: AppContext, +): Promise['selectedAddress']> { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + const checkoutId = getCartCookie(req.headers) + + if (!customerAccessToken || !checkoutId) return null + + const { checkout } = await ctx.storefront.query( + { + variables: { + customerAccessToken, + checkoutId, + }, + ...GetSelectedAddress, + }, + { headers }, + ) + + return checkout?.selectedAddress ?? null +} diff --git a/wake/loaders/selectedShipping.ts b/wake/loaders/selectedShipping.ts new file mode 100644 index 000000000..04e7a3cb3 --- /dev/null +++ b/wake/loaders/selectedShipping.ts @@ -0,0 +1,41 @@ +import authenticate from 'apps/wake/utils/authenticate.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import type { AppContext } from '../mod.ts' +import { GetSelectedShipping } from '../utils/graphql/queries.ts' +import type { + GetSelectedShippingQuery, + GetSelectedShippingQueryVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkout +export default async function ( + props: object, + req: Request, + ctx: AppContext, +): Promise['selectedShipping']> { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + const checkoutId = getCartCookie(req.headers) + + if (!customerAccessToken || !checkoutId) return null + + const { checkout } = await ctx.storefront.query( + { + variables: { + customerAccessToken, + checkoutId, + }, + ...GetSelectedShipping, + }, + { headers }, + ) + + console.log(checkout, { + customerAccessToken, + checkoutId, + }) + + return checkout?.selectedShipping ?? null +} diff --git a/wake/loaders/useCustomCheckout.ts b/wake/loaders/useCustomCheckout.ts index f0f40d014..d49b652c1 100644 --- a/wake/loaders/useCustomCheckout.ts +++ b/wake/loaders/useCustomCheckout.ts @@ -1,5 +1,5 @@ -import type { AppContext } from '../mod.ts' +import type { AppContext } from "../mod.ts"; export default (_props: unknown, req: Request, ctx: AppContext) => { - return ctx.useCustomCheckout -} + return ctx.useCustomCheckout; +}; diff --git a/wake/loaders/user.ts b/wake/loaders/user.ts index edab50a83..63869bd70 100644 --- a/wake/loaders/user.ts +++ b/wake/loaders/user.ts @@ -1,46 +1,55 @@ -import type { Person } from '../../commerce/types.ts' -import type { AppContext } from '../mod.ts' -import authenticate from '../utils/authenticate.ts' -import { GetUser } from '../utils/graphql/queries.ts' -import type { GetUserQuery, GetUserQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { Person } from "../../commerce/types.ts"; +import type { AppContext } from "../mod.ts"; +import authenticate from "../utils/authenticate.ts"; +import { GetUser } from "../utils/graphql/queries.ts"; +import type { + GetUserQuery, + GetUserQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; /** * @title Wake Integration * @description User loader */ -const userLoader = async (_props: unknown, req: Request, ctx: AppContext): Promise => { - const { storefront } = ctx - - const headers = parseHeaders(req.headers) - - const customerAccessToken = await authenticate(req, ctx) - if (!customerAccessToken) return null - - try { - const data = await storefront.query( - { - variables: { customerAccessToken }, - ...GetUser, - }, - { - headers, - }, - ) - - const customer = data.customer - - if (!customer) return null - - return { - '@id': customer.id!, - email: customer.email!, - givenName: customer.customerName!, - gender: customer?.gender === 'Masculino' ? 'https://schema.org/Male' : 'https://schema.org/Female', - } - } catch (e) { - return null - } -} - -export default userLoader +const userLoader = async ( + _props: unknown, + req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; + + const headers = parseHeaders(req.headers); + + const customerAccessToken = await authenticate(req, ctx); + if (!customerAccessToken) return null; + + try { + const data = await storefront.query( + { + variables: { customerAccessToken }, + ...GetUser, + }, + { + headers, + }, + ); + + const customer = data.customer; + + if (!customer) return null; + + return { + "@id": customer.id!, + email: customer.email!, + givenName: customer.customerName!, + gender: customer?.gender === "Masculino" + ? "https://schema.org/Male" + : "https://schema.org/Female", + }; + } catch (e) { + return null; + } +}; + +export default userLoader; diff --git a/wake/loaders/userAddresses.ts b/wake/loaders/userAddresses.ts index 6a2fce58b..b8184faf9 100644 --- a/wake/loaders/userAddresses.ts +++ b/wake/loaders/userAddresses.ts @@ -1,28 +1,34 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' -import type { GetUserAddressesQuery, GetUserAddressesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { GetUserAddresses } from '../utils/graphql/queries.ts' -import authenticate from 'apps/wake/utils/authenticate.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + GetUserAddressesQuery, + GetUserAddressesQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { GetUserAddresses } from "../utils/graphql/queries.ts"; +import authenticate from "apps/wake/utils/authenticate.ts"; +import ensureCustomerToken from "apps/wake/utils/ensureCustomerToken.ts"; // https://wakecommerce.readme.io/docs/storefront-api-customer export default async function ( - _props: object, - req: Request, - ctx: AppContext, -): Promise['addresses']> { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + _props: object, + req: Request, + ctx: AppContext, +): Promise["addresses"]> { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - const { customer } = await ctx.storefront.query( - { - variables: { customerAccessToken }, - ...GetUserAddresses, - }, - { headers }, - ) + const { customer } = await ctx.storefront.query< + GetUserAddressesQuery, + GetUserAddressesQueryVariables + >( + { + variables: { customerAccessToken }, + ...GetUserAddresses, + }, + { headers }, + ); - return customer?.addresses || [] + return customer?.addresses || []; } diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 30e32777c..e1b85cce1 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -15,13 +15,15 @@ import * as $$$$$$$$$9 from "./actions/logout.ts"; import * as $$$$$$$$$10 from "./actions/newsletter/register.ts"; import * as $$$$$$$$$11 from "./actions/notifyme.ts"; import * as $$$$$$$$$12 from "./actions/review/create.ts"; -import * as $$$$$$$$$13 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$14 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$15 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$16 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$17 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$18 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$19 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$13 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$14 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$15 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$16 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$17 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$18 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$19 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$20 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$21 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/cart.ts"; import * as $$$1 from "./loaders/checkoutCoupon.ts"; @@ -31,12 +33,14 @@ import * as $$$4 from "./loaders/productList.ts"; import * as $$$5 from "./loaders/productListingPage.ts"; import * as $$$6 from "./loaders/proxy.ts"; import * as $$$7 from "./loaders/recommendations.ts"; -import * as $$$8 from "./loaders/shop.ts"; -import * as $$$9 from "./loaders/suggestion.ts"; -import * as $$$10 from "./loaders/useCustomCheckout.ts"; -import * as $$$11 from "./loaders/user.ts"; -import * as $$$12 from "./loaders/userAddresses.ts"; -import * as $$$13 from "./loaders/wishlist.ts"; +import * as $$$8 from "./loaders/selectedAddress.ts"; +import * as $$$9 from "./loaders/selectedShipping.ts"; +import * as $$$10 from "./loaders/shop.ts"; +import * as $$$11 from "./loaders/suggestion.ts"; +import * as $$$12 from "./loaders/useCustomCheckout.ts"; +import * as $$$13 from "./loaders/user.ts"; +import * as $$$14 from "./loaders/userAddresses.ts"; +import * as $$$15 from "./loaders/wishlist.ts"; const manifest = { "loaders": { @@ -48,12 +52,14 @@ const manifest = { "wake/loaders/productListingPage.ts": $$$5, "wake/loaders/proxy.ts": $$$6, "wake/loaders/recommendations.ts": $$$7, - "wake/loaders/shop.ts": $$$8, - "wake/loaders/suggestion.ts": $$$9, - "wake/loaders/useCustomCheckout.ts": $$$10, - "wake/loaders/user.ts": $$$11, - "wake/loaders/userAddresses.ts": $$$12, - "wake/loaders/wishlist.ts": $$$13, + "wake/loaders/selectedAddress.ts": $$$8, + "wake/loaders/selectedShipping.ts": $$$9, + "wake/loaders/shop.ts": $$$10, + "wake/loaders/suggestion.ts": $$$11, + "wake/loaders/useCustomCheckout.ts": $$$12, + "wake/loaders/user.ts": $$$13, + "wake/loaders/userAddresses.ts": $$$14, + "wake/loaders/wishlist.ts": $$$15, }, "handlers": { "wake/handlers/sitemap.ts": $$$$0, @@ -72,13 +78,15 @@ const manifest = { "wake/actions/newsletter/register.ts": $$$$$$$$$10, "wake/actions/notifyme.ts": $$$$$$$$$11, "wake/actions/review/create.ts": $$$$$$$$$12, - "wake/actions/shippingSimulation.ts": $$$$$$$$$13, - "wake/actions/signupCompany.ts": $$$$$$$$$14, - "wake/actions/signupPerson.ts": $$$$$$$$$15, - "wake/actions/submmitForm.ts": $$$$$$$$$16, - "wake/actions/updateAddress.ts": $$$$$$$$$17, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$18, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$19, + "wake/actions/selectAddress.ts": $$$$$$$$$13, + "wake/actions/selectShipping.ts": $$$$$$$$$14, + "wake/actions/shippingSimulation.ts": $$$$$$$$$15, + "wake/actions/signupCompany.ts": $$$$$$$$$16, + "wake/actions/signupPerson.ts": $$$$$$$$$17, + "wake/actions/submmitForm.ts": $$$$$$$$$18, + "wake/actions/updateAddress.ts": $$$$$$$$$19, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$20, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$21, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/mod.ts b/wake/mod.ts index 83dd21168..7050a5ba4 100644 --- a/wake/mod.ts +++ b/wake/mod.ts @@ -1,63 +1,63 @@ -import type { App, FnContext } from 'deco/mod.ts' -import { fetchSafe } from '../utils/fetch.ts' -import { createGraphqlClient } from '../utils/graphql.ts' -import { createHttpClient } from '../utils/http.ts' -import type { Secret } from '../website/loaders/secret.ts' -import manifest, { Manifest } from './manifest.gen.ts' -import { OpenAPI } from './utils/openapi/wake.openapi.gen.ts' -import { CheckoutApi } from './utils/client.ts' -import { previewFromMarkdown } from '../utils/preview.ts' +import type { App, FnContext } from "deco/mod.ts"; +import { fetchSafe } from "../utils/fetch.ts"; +import { createGraphqlClient } from "../utils/graphql.ts"; +import { createHttpClient } from "../utils/http.ts"; +import type { Secret } from "../website/loaders/secret.ts"; +import manifest, { Manifest } from "./manifest.gen.ts"; +import { OpenAPI } from "./utils/openapi/wake.openapi.gen.ts"; +import { CheckoutApi } from "./utils/client.ts"; +import { previewFromMarkdown } from "../utils/preview.ts"; -export type AppContext = FnContext +export type AppContext = FnContext; -export let state: null | State = null +export let state: null | State = null; /** @title Wake */ export interface Props { - /** - * @title Account Name - * @description erploja2 etc - */ - account: string - - /** - * @title Checkout Url - * @description https://checkout.erploja2.com.br - */ - checkoutUrl: string - - /** - * @title Wake Storefront Token - * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token - */ - storefrontToken: Secret - - /** - * @title Wake API token - * @description The token for accessing wake commerce - */ - token?: Secret - - /** - * @description Use Wake as backend platform - */ - platform: 'wake' - - /** - * @title Use Custom Checkout - * @description Use wake headless api for checkout - */ - useCustomCheckout?: boolean + /** + * @title Account Name + * @description erploja2 etc + */ + account: string; + + /** + * @title Checkout Url + * @description https://checkout.erploja2.com.br + */ + checkoutUrl: string; + + /** + * @title Wake Storefront Token + * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token + */ + storefrontToken: Secret; + + /** + * @title Wake API token + * @description The token for accessing wake commerce + */ + token?: Secret; + + /** + * @description Use Wake as backend platform + */ + platform: "wake"; + + /** + * @title Use Custom Checkout + * @description Use wake headless api for checkout + */ + useCustomCheckout?: boolean; } export interface State extends Props { - api: ReturnType> - checkoutApi: ReturnType> - storefront: ReturnType - useCustomCheckout: boolean + api: ReturnType>; + checkoutApi: ReturnType>; + storefront: ReturnType; + useCustomCheckout: boolean; } -export const color = 0xb600ee +export const color = 0xb600ee; /** * @title Wake @@ -66,43 +66,53 @@ export const color = 0xb600ee * @logo https://raw.githubusercontent.com/deco-cx/apps/main/wake/logo.png */ export default function App(props: Props): App { - const { token, storefrontToken, account, checkoutUrl, useCustomCheckout = false } = props - - if (!token || !storefrontToken) { - console.warn( - 'Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work', - ) - } - - // HEAD - // - const stringToken = typeof token === 'string' ? token : token?.get?.() ?? '' - const stringStorefrontToken = typeof storefrontToken === 'string' ? storefrontToken : storefrontToken?.get?.() ?? '' - - const api = createHttpClient({ - base: 'https://api.fbits.net', - headers: new Headers({ Authorization: `Basic ${stringToken}` }), - fetcher: fetchSafe, - }) - - //22e714b360b7ef187fe4bdb93385dd0a85686e2a - const storefront = createGraphqlClient({ - endpoint: 'https://storefront-api.fbits.net/graphql', - headers: new Headers({ 'TCS-Access-Token': `${stringStorefrontToken}` }), - fetcher: fetchSafe, - }) - - const checkoutApi = createHttpClient({ - base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, - fetcher: fetchSafe, - }) - - state = { ...props, api, storefront, checkoutApi, useCustomCheckout } - - return { - state, - manifest, - } + const { + token, + storefrontToken, + account, + checkoutUrl, + useCustomCheckout = false, + } = props; + + if (!token || !storefrontToken) { + console.warn( + "Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work", + ); + } + + // HEAD + // + const stringToken = typeof token === "string" ? token : token?.get?.() ?? ""; + const stringStorefrontToken = typeof storefrontToken === "string" + ? storefrontToken + : storefrontToken?.get?.() ?? ""; + + const api = createHttpClient({ + base: "https://api.fbits.net", + headers: new Headers({ Authorization: `Basic ${stringToken}` }), + fetcher: fetchSafe, + }); + + //22e714b360b7ef187fe4bdb93385dd0a85686e2a + const storefront = createGraphqlClient({ + endpoint: "https://storefront-api.fbits.net/graphql", + headers: new Headers({ "TCS-Access-Token": `${stringStorefrontToken}` }), + fetcher: fetchSafe, + }); + + const checkoutApi = createHttpClient({ + base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, + fetcher: fetchSafe, + }); + + state = { ...props, api, storefront, checkoutApi, useCustomCheckout }; + + return { + state, + manifest, + }; } -export const preview = previewFromMarkdown(new URL('./README.md', import.meta.url)) +export const preview = previewFromMarkdown( + new URL("./README.md", import.meta.url), +); diff --git a/wake/utils/authenticate.ts b/wake/utils/authenticate.ts index fe76218c5..eb7ac93d5 100644 --- a/wake/utils/authenticate.ts +++ b/wake/utils/authenticate.ts @@ -15,10 +15,8 @@ const authenticate = async (req: Request, ctx: AppContext): Promise r.json()) + const data = await checkoutApi['GET /api/Login/Get']( + {}, + { + headers: req.headers, + }, + ).then(r => r.json()) if (!data?.CustomerAccessToken) return null return data?.CustomerAccessToken diff --git a/wake/utils/ensureCheckout.ts b/wake/utils/ensureCheckout.ts index 2d6ed0917..51eb2f67c 100644 --- a/wake/utils/ensureCheckout.ts +++ b/wake/utils/ensureCheckout.ts @@ -1,5 +1,5 @@ export default function (token: string | undefined) { - if (!token) throw new Error('No checkout cookie') + if (!token) console.error("No checkout cookie"); - return token + return token; } diff --git a/wake/utils/ensureCustomerToken.ts b/wake/utils/ensureCustomerToken.ts index 87a8ad646..fad829d43 100644 --- a/wake/utils/ensureCustomerToken.ts +++ b/wake/utils/ensureCustomerToken.ts @@ -1,5 +1,7 @@ export default function (token: string | null) { - if (!token) throw new Error('No customer access token cookie, are you logged in?') + if (!token) { + console.error('No customer access token cookie, are you logged in?') + } return token } diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index e108c3af6..7e12c15c4 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1457,3 +1457,81 @@ export const GetCheckoutCoupon = { } }`, }; + +export const CheckoutAddressAssociate = { + query: + gql`mutation checkoutAddressAssociate($customerAccessToken: String!, $addressId: ID!, $checkoutId: Uuid!) { + checkoutAddressAssociate( + customerAccessToken: $customerAccessToken + addressId: $addressId + checkoutId: $checkoutId + ) { + cep + checkoutId + url + updateDate + } + }`, +}; + +export const GetSelectedAddress = { + query: + gql`query GetSelectedAddress($checkoutId: String!, $customerAccessToken: String!) { + checkout(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) { + selectedAddress { + addressNumber + cep + city + id + neighborhood + referencePoint + state + street + } + } + }`, +}; + +export const CheckoutSelectShippingQuote = { + query: + gql`mutation checkoutSelectShippingQuote($checkoutId: Uuid!, $shippingQuoteId: Uuid!) { + checkoutSelectShippingQuote( + checkoutId: $checkoutId + shippingQuoteId: $shippingQuoteId + ) { + cep + checkoutId + shippingFee + selectedShipping { + deadline + name + shippingQuoteId + type + value + } + } + }`, +}; + +export const GetSelectedShipping = { + query: + gql`query GetSelectedShipping($checkoutId: String!, $customerAccessToken: String!) { + checkout(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) { + selectedShipping { + deadline + deadlineInHours + deliverySchedule { + date + endDateTime + endTime + startDateTime + startTime + } + name + shippingQuoteId + type + value + } + } + }`, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 47bdebee7..aacfe4ed4 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5214,3 +5214,36 @@ export type GetCheckoutCouponQueryVariables = Exact<{ export type GetCheckoutCouponQuery = { checkout?: { coupon?: string | null } | null }; + +export type CheckoutAddressAssociateMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + addressId: Scalars['ID']['input']; + checkoutId: Scalars['Uuid']['input']; +}>; + + +export type CheckoutAddressAssociateMutation = { checkoutAddressAssociate?: { cep?: number | null, checkoutId: any, url?: string | null, updateDate: any } | null }; + +export type GetSelectedAddressQueryVariables = Exact<{ + checkoutId: Scalars['String']['input']; + customerAccessToken: Scalars['String']['input']; +}>; + + +export type GetSelectedAddressQuery = { checkout?: { selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null } | null }; + +export type CheckoutSelectShippingQuoteMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; + shippingQuoteId: Scalars['Uuid']['input']; +}>; + + +export type CheckoutSelectShippingQuoteMutation = { checkoutSelectShippingQuote?: { cep?: number | null, checkoutId: any, shippingFee: any, selectedShipping?: { deadline: number, name?: string | null, shippingQuoteId: any, type?: string | null, value: number } | null } | null }; + +export type GetSelectedShippingQueryVariables = Exact<{ + checkoutId: Scalars['String']['input']; + customerAccessToken: Scalars['String']['input']; +}>; + + +export type GetSelectedShippingQuery = { checkout?: { selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null }; diff --git a/wake/utils/user.ts b/wake/utils/user.ts index 04e21406c..5222aa462 100644 --- a/wake/utils/user.ts +++ b/wake/utils/user.ts @@ -15,12 +15,6 @@ export const setUserCookie = (headers: Headers, token: string, expires: Date): v name: 'customerToken', path: '/', value: token as string, - expires: _1_YEAR, - }) - setCookie(headers, { - name: 'customerTokenHasNOTexpired', - path: '/', - value: '_', expires, }) } From 1533345356d3621732c0ee0de53edb82c59041b1 Mon Sep 17 00:00:00 2001 From: Luigi Date: Thu, 13 Jun 2024 22:28:53 -0300 Subject: [PATCH 06/37] ... --- wake/actions/finishCheckout.ts | 52 +++++++ wake/actions/selectPayment.ts | 38 +++++ wake/loaders/calculatePrices.ts | 37 +++++ wake/loaders/selectedShipping.ts | 5 - wake/manifest.gen.ts | 126 ++++++++-------- wake/utils/graphql/queries.ts | 149 ++++++++++++++++++- wake/utils/graphql/storefront.graphql.gen.ts | 30 ++++ 7 files changed, 371 insertions(+), 66 deletions(-) create mode 100644 wake/actions/finishCheckout.ts create mode 100644 wake/actions/selectPayment.ts create mode 100644 wake/loaders/calculatePrices.ts diff --git a/wake/actions/finishCheckout.ts b/wake/actions/finishCheckout.ts new file mode 100644 index 000000000..72571e996 --- /dev/null +++ b/wake/actions/finishCheckout.ts @@ -0,0 +1,52 @@ +import authenticate from 'apps/wake/utils/authenticate.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import type { AppContext } from '../mod.ts' +import { CheckoutAddressAssociate } from '../utils/graphql/queries.ts' +import type { + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/checkoutcomplete +export default async function ( + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + const checkoutId = getCartCookie(req.headers) + + if (!customerAccessToken) return null + + const { checkoutComplete } = await ctx.storefront.query< + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables + >( + { + variables: { + paymentData: props.paymentData, + comments: props.comments, + customerAccessToken, + checkoutId, + }, + ...CheckoutAddressAssociate, + }, + { headers }, + ) + + return checkoutComplete +} + +interface Props { + /** + * Informações adicionais de pagamento + */ + paymentData: string + /** + * Comentários + */ + comments?: string +} diff --git a/wake/actions/selectPayment.ts b/wake/actions/selectPayment.ts new file mode 100644 index 000000000..a3b94ab2c --- /dev/null +++ b/wake/actions/selectPayment.ts @@ -0,0 +1,38 @@ +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import type { AppContext } from '../mod.ts' +import { CheckoutSelectPaymentMethod } from '../utils/graphql/queries.ts' +import type { + CheckoutSelectPaymentMethodMutation, + CheckoutSelectPaymentMethodMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/checkoutselectpaymentmethod +export default async function ( + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const checkoutId = getCartCookie(req.headers) + + const { checkoutSelectPaymentMethod } = await ctx.storefront.query< + CheckoutSelectPaymentMethodMutation, + CheckoutSelectPaymentMethodMutationVariables + >( + { + variables: { + paymentMethodId: props.paymentMethodId, + checkoutId, + }, + ...CheckoutSelectPaymentMethod, + }, + { headers }, + ) + + return checkoutSelectPaymentMethod +} + +interface Props { + paymentMethodId: string +} diff --git a/wake/loaders/calculatePrices.ts b/wake/loaders/calculatePrices.ts new file mode 100644 index 000000000..d830b2a52 --- /dev/null +++ b/wake/loaders/calculatePrices.ts @@ -0,0 +1,37 @@ +import authenticate from 'apps/wake/utils/authenticate.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import type { AppContext } from '../mod.ts' +import { CalculatePrices } from '../utils/graphql/queries.ts' +import type { CalculatePricesQuery, CalculatePricesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-calculateprices +export default async function ( + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + + const { calculatePrices } = await ctx.storefront.query( + { + variables: { + partnerAccessToken: props.partnerAccessToken ?? '', + products: props.products, + }, + ...CalculatePrices, + }, + { headers }, + ) + + return calculatePrices +} + +type Props = { + partnerAccessToken?: string + products: { + productVariantId: number + quantity: number + }[] +} diff --git a/wake/loaders/selectedShipping.ts b/wake/loaders/selectedShipping.ts index 04e7a3cb3..5f4cdce5d 100644 --- a/wake/loaders/selectedShipping.ts +++ b/wake/loaders/selectedShipping.ts @@ -32,10 +32,5 @@ export default async function ( { headers }, ) - console.log(checkout, { - customerAccessToken, - checkoutId, - }) - return checkout?.selectedShipping ?? null } diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index e1b85cce1..420f8d04b 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -10,56 +10,60 @@ import * as $$$$$$$$$4 from "./actions/cart/updateItemQuantity.ts"; import * as $$$$$$$$$5 from "./actions/createAddress.ts"; import * as $$$$$$$$$6 from "./actions/createCheckout.ts"; import * as $$$$$$$$$7 from "./actions/deleteAddress.ts"; -import * as $$$$$$$$$8 from "./actions/login.ts"; -import * as $$$$$$$$$9 from "./actions/logout.ts"; -import * as $$$$$$$$$10 from "./actions/newsletter/register.ts"; -import * as $$$$$$$$$11 from "./actions/notifyme.ts"; -import * as $$$$$$$$$12 from "./actions/review/create.ts"; -import * as $$$$$$$$$13 from "./actions/selectAddress.ts"; -import * as $$$$$$$$$14 from "./actions/selectShipping.ts"; -import * as $$$$$$$$$15 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$16 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$17 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$18 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$19 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$20 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$21 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$8 from "./actions/finishCheckout.ts"; +import * as $$$$$$$$$9 from "./actions/login.ts"; +import * as $$$$$$$$$10 from "./actions/logout.ts"; +import * as $$$$$$$$$11 from "./actions/newsletter/register.ts"; +import * as $$$$$$$$$12 from "./actions/notifyme.ts"; +import * as $$$$$$$$$13 from "./actions/review/create.ts"; +import * as $$$$$$$$$14 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$15 from "./actions/selectPayment.ts"; +import * as $$$$$$$$$16 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$17 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$18 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$19 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$20 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$21 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$22 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$23 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; -import * as $$$0 from "./loaders/cart.ts"; -import * as $$$1 from "./loaders/checkoutCoupon.ts"; -import * as $$$2 from "./loaders/paymentMethods.ts"; -import * as $$$3 from "./loaders/productDetailsPage.ts"; -import * as $$$4 from "./loaders/productList.ts"; -import * as $$$5 from "./loaders/productListingPage.ts"; -import * as $$$6 from "./loaders/proxy.ts"; -import * as $$$7 from "./loaders/recommendations.ts"; -import * as $$$8 from "./loaders/selectedAddress.ts"; -import * as $$$9 from "./loaders/selectedShipping.ts"; -import * as $$$10 from "./loaders/shop.ts"; -import * as $$$11 from "./loaders/suggestion.ts"; -import * as $$$12 from "./loaders/useCustomCheckout.ts"; -import * as $$$13 from "./loaders/user.ts"; -import * as $$$14 from "./loaders/userAddresses.ts"; -import * as $$$15 from "./loaders/wishlist.ts"; +import * as $$$0 from "./loaders/calculatePrices.ts"; +import * as $$$1 from "./loaders/cart.ts"; +import * as $$$2 from "./loaders/checkoutCoupon.ts"; +import * as $$$3 from "./loaders/paymentMethods.ts"; +import * as $$$4 from "./loaders/productDetailsPage.ts"; +import * as $$$5 from "./loaders/productList.ts"; +import * as $$$6 from "./loaders/productListingPage.ts"; +import * as $$$7 from "./loaders/proxy.ts"; +import * as $$$8 from "./loaders/recommendations.ts"; +import * as $$$9 from "./loaders/selectedAddress.ts"; +import * as $$$10 from "./loaders/selectedShipping.ts"; +import * as $$$11 from "./loaders/shop.ts"; +import * as $$$12 from "./loaders/suggestion.ts"; +import * as $$$13 from "./loaders/useCustomCheckout.ts"; +import * as $$$14 from "./loaders/user.ts"; +import * as $$$15 from "./loaders/userAddresses.ts"; +import * as $$$16 from "./loaders/wishlist.ts"; const manifest = { "loaders": { - "wake/loaders/cart.ts": $$$0, - "wake/loaders/checkoutCoupon.ts": $$$1, - "wake/loaders/paymentMethods.ts": $$$2, - "wake/loaders/productDetailsPage.ts": $$$3, - "wake/loaders/productList.ts": $$$4, - "wake/loaders/productListingPage.ts": $$$5, - "wake/loaders/proxy.ts": $$$6, - "wake/loaders/recommendations.ts": $$$7, - "wake/loaders/selectedAddress.ts": $$$8, - "wake/loaders/selectedShipping.ts": $$$9, - "wake/loaders/shop.ts": $$$10, - "wake/loaders/suggestion.ts": $$$11, - "wake/loaders/useCustomCheckout.ts": $$$12, - "wake/loaders/user.ts": $$$13, - "wake/loaders/userAddresses.ts": $$$14, - "wake/loaders/wishlist.ts": $$$15, + "wake/loaders/calculatePrices.ts": $$$0, + "wake/loaders/cart.ts": $$$1, + "wake/loaders/checkoutCoupon.ts": $$$2, + "wake/loaders/paymentMethods.ts": $$$3, + "wake/loaders/productDetailsPage.ts": $$$4, + "wake/loaders/productList.ts": $$$5, + "wake/loaders/productListingPage.ts": $$$6, + "wake/loaders/proxy.ts": $$$7, + "wake/loaders/recommendations.ts": $$$8, + "wake/loaders/selectedAddress.ts": $$$9, + "wake/loaders/selectedShipping.ts": $$$10, + "wake/loaders/shop.ts": $$$11, + "wake/loaders/suggestion.ts": $$$12, + "wake/loaders/useCustomCheckout.ts": $$$13, + "wake/loaders/user.ts": $$$14, + "wake/loaders/userAddresses.ts": $$$15, + "wake/loaders/wishlist.ts": $$$16, }, "handlers": { "wake/handlers/sitemap.ts": $$$$0, @@ -73,20 +77,22 @@ const manifest = { "wake/actions/createAddress.ts": $$$$$$$$$5, "wake/actions/createCheckout.ts": $$$$$$$$$6, "wake/actions/deleteAddress.ts": $$$$$$$$$7, - "wake/actions/login.ts": $$$$$$$$$8, - "wake/actions/logout.ts": $$$$$$$$$9, - "wake/actions/newsletter/register.ts": $$$$$$$$$10, - "wake/actions/notifyme.ts": $$$$$$$$$11, - "wake/actions/review/create.ts": $$$$$$$$$12, - "wake/actions/selectAddress.ts": $$$$$$$$$13, - "wake/actions/selectShipping.ts": $$$$$$$$$14, - "wake/actions/shippingSimulation.ts": $$$$$$$$$15, - "wake/actions/signupCompany.ts": $$$$$$$$$16, - "wake/actions/signupPerson.ts": $$$$$$$$$17, - "wake/actions/submmitForm.ts": $$$$$$$$$18, - "wake/actions/updateAddress.ts": $$$$$$$$$19, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$20, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$21, + "wake/actions/finishCheckout.ts": $$$$$$$$$8, + "wake/actions/login.ts": $$$$$$$$$9, + "wake/actions/logout.ts": $$$$$$$$$10, + "wake/actions/newsletter/register.ts": $$$$$$$$$11, + "wake/actions/notifyme.ts": $$$$$$$$$12, + "wake/actions/review/create.ts": $$$$$$$$$13, + "wake/actions/selectAddress.ts": $$$$$$$$$14, + "wake/actions/selectPayment.ts": $$$$$$$$$15, + "wake/actions/selectShipping.ts": $$$$$$$$$16, + "wake/actions/shippingSimulation.ts": $$$$$$$$$17, + "wake/actions/signupCompany.ts": $$$$$$$$$18, + "wake/actions/signupPerson.ts": $$$$$$$$$19, + "wake/actions/submmitForm.ts": $$$$$$$$$20, + "wake/actions/updateAddress.ts": $$$$$$$$$21, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$22, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$23, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 7e12c15c4..5139da1c6 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -859,7 +859,95 @@ fragment SingleProductPart on SingleProduct { stamp title } - +} +`; + +const CheckoutCloseFields = gql` +fragment CheckoutCloseFields on Checkout { + checkoutId + completed + orders { + adjustments { + name + type + value + } + date + discountValue + interestValue + orderId + orderStatus + products { + adjustments { + name + additionalInformation + type + value + } + attributes { + name + value + } + imageUrl + name + productVariantId + quantity + value + } + shippingValue + totalValue + delivery { + address { + address + cep + city + complement + name + isPickupStore + neighborhood + pickupStoreText + } + cost + deliveryTime + name + } + dispatchTimeText + payment { + invoice { + digitableLine + paymentLink + } + name + pix { + qrCode + qrCodeExpirationDate + qrCodeUrl + } + } + } +} +`; + +const SelectPayment = gql` +fragment SelectPayment on Checkout { + checkoutId + total + subtotal + selectedPaymentMethod { + id + installments { + adjustment + number + total + value + } + selectedInstallment { + adjustment + number + total + value + } + } } `; @@ -1535,3 +1623,62 @@ export const GetSelectedShipping = { } }`, }; + +export const CheckoutComplete = { + fragments: [CheckoutCloseFields], + query: gql`mutation checkoutComplete( + $checkoutId: Uuid! + $paymentData: String! + $comments: String + $customerAccessToken: String + ) { + checkoutComplete( + checkoutId: $checkoutId + paymentData: $paymentData + comments: $comments + customerAccessToken: $customerAccessToken + ) { + ...CheckoutCloseFields + } + }`, +}; + +export const CheckoutSelectPaymentMethod = { + fragments: [SelectPayment], + query: + gql`mutation checkoutSelectPaymentMethod($checkoutId: Uuid!, $paymentMethodId: ID!) { + checkoutSelectPaymentMethod( + checkoutId: $checkoutId + paymentMethodId: $paymentMethodId + ) { + ...SelectPayment + } + }`, +}; + +export const CalculatePrices = { + query: + gql`query calculatePrices($partnerAccessToken: String!, $products: [CalculatePricesProductsInput]!) { + calculatePrices(partnerAccessToken: $partnerAccessToken, products: $products) { + bestInstallment { + displayName + name + } + discountPercentage + discounted + installmentPlans { + displayName + name + installments{ + discount + fees + number + value + } + } + listPrice + multiplicationFactor + price + } + }`, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index aacfe4ed4..c1b3d4857 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -4909,6 +4909,10 @@ export type BuyListFragment = { mainVariant?: boolean | null, productName?: stri export type SingleProductPartFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; +export type CheckoutCloseFieldsFragment = { checkoutId: any, completed: boolean, orders?: Array<{ date: any, discountValue: any, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, dispatchTimeText?: string | null, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, value: any, adjustments?: Array<{ name?: string | null, additionalInformation?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null, delivery?: { cost: any, deliveryTime: number, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, name?: string | null, isPickupStore: boolean, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null } | null> | null }; + +export type SelectPaymentFragment = { checkoutId: any, total: any, subtotal: any, selectedPaymentMethod?: { id: any, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null } | null }; + export type SingleProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, collection?: string | null, numberOfVotes?: number | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, sku?: string | null, stock?: any | null, variantName?: string | null, parallelOptions?: Array | null, urlVideo?: string | null, buyTogether?: Array<{ productId?: any | null } | null> | null, attributes?: Array<{ name?: string | null, type?: string | null, value?: string | null, attributeId: any, displayType?: string | null, id?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, breadcrumbs?: Array<{ text?: string | null, link?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, seo?: Array<{ name?: string | null, scheme?: string | null, type?: string | null, httpEquiv?: string | null, content?: string | null } | null> | null, reviews?: Array<{ rating: number, review?: string | null, reviewDate: any, email?: string | null, customer?: string | null } | null> | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, attributeSelections?: { canBeMatrix: boolean, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, value?: string | null, selected: boolean, printUrl?: string | null } | null> | null } | null> | null, matrix?: { column?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null } | null> | null } | null, data?: Array | null> | null, row?: { displayType?: string | null, name?: string | null, values?: Array<{ value?: string | null, printUrl?: string | null } | null> | null } | null } | null, selectedVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null, candidateVariant?: { aggregatedStock?: any | null, alias?: string | null, available?: boolean | null, ean?: string | null, id?: string | null, productId?: any | null, productVariantId?: any | null, productVariantName?: string | null, sku?: string | null, stock?: any | null, attributes?: Array<{ attributeId: any, displayType?: string | null, id?: string | null, name?: string | null, type?: string | null, value?: string | null } | null> | null, images?: Array<{ fileName?: string | null, mini: boolean, order: number, print: boolean, url?: string | null } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null } | null, offers?: Array<{ name?: string | null, productVariantId?: any | null, prices?: { listPrice?: any | null, price?: any | null, installmentPlans?: Array<{ displayName?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null } | null } | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; export type RestockAlertNodeFragment = { email?: string | null, name?: string | null, productVariantId: any, requestDate: any }; @@ -5247,3 +5251,29 @@ export type GetSelectedShippingQueryVariables = Exact<{ export type GetSelectedShippingQuery = { checkout?: { selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null }; + +export type CheckoutCompleteMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; + paymentData: Scalars['String']['input']; + comments?: InputMaybe; + customerAccessToken?: InputMaybe; +}>; + + +export type CheckoutCompleteMutation = { checkoutComplete?: { checkoutId: any, completed: boolean, orders?: Array<{ date: any, discountValue: any, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, dispatchTimeText?: string | null, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, value: any, adjustments?: Array<{ name?: string | null, additionalInformation?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null, delivery?: { cost: any, deliveryTime: number, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, name?: string | null, isPickupStore: boolean, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null } | null> | null } | null }; + +export type CheckoutSelectPaymentMethodMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; + paymentMethodId: Scalars['ID']['input']; +}>; + + +export type CheckoutSelectPaymentMethodMutation = { checkoutSelectPaymentMethod?: { checkoutId: any, total: any, subtotal: any, selectedPaymentMethod?: { id: any, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null } | null } | null }; + +export type CalculatePricesQueryVariables = Exact<{ + partnerAccessToken: Scalars['String']['input']; + products: Array> | InputMaybe; +}>; + + +export type CalculatePricesQuery = { calculatePrices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { displayName?: string | null, name?: string | null } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null }; From 4a0bff9171e2bf5c719436b0f146dd7908dcdff1 Mon Sep 17 00:00:00 2001 From: Luigi Date: Fri, 14 Jun 2024 12:38:18 -0300 Subject: [PATCH 07/37] ... --- wake/actions/login.ts | 101 +++++++++---------- wake/actions/logout.ts | 1 + wake/utils/authenticate.ts | 7 +- wake/utils/graphql/queries.ts | 1 + wake/utils/graphql/storefront.graphql.gen.ts | 2 +- wake/utils/user.ts | 13 ++- 6 files changed, 66 insertions(+), 59 deletions(-) diff --git a/wake/actions/login.ts b/wake/actions/login.ts index 376fd2097..c93ca5364 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -1,64 +1,59 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' import type { - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { - CheckoutCustomerAssociate, - CustomerAuthenticatedLogin, -} from "../utils/graphql/queries.ts"; -import { setCookie } from "std/http/cookie.ts"; -import { getCartCookie } from "apps/wake/utils/cart.ts"; -import { setUserCookie } from "apps/wake/utils/user.ts"; + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' +import { setCookie } from 'std/http/cookie.ts' +import { getCartCookie } from 'apps/wake/utils/cart.ts' +import { setUserCookie } from 'apps/wake/utils/user.ts' export default async function ( - props: Props, - req: Request, - { storefront, response }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); + props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise { + const headers = parseHeaders(req.headers) - const { customerAuthenticatedLogin } = await storefront.query< - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables - >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) - if (customerAuthenticatedLogin) { - setUserCookie( - response.headers, - customerAuthenticatedLogin.token as string, - new Date(customerAuthenticatedLogin.validUntil), - ); + if (customerAuthenticatedLogin) { + setUserCookie( + response.headers, + customerAuthenticatedLogin.token as string, + customerAuthenticatedLogin.legacyToken as string, + new Date(customerAuthenticatedLogin.validUntil), + ) - // associate account to checkout - await storefront.query< - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables - >( - { - variables: { - customerAccessToken: customerAuthenticatedLogin.token as string, - checkoutId: getCartCookie(req.headers), - }, - ...CheckoutCustomerAssociate, - }, - { headers }, - ); - } + // associate account to checkout + await storefront.query( + { + variables: { + customerAccessToken: customerAuthenticatedLogin.token as string, + checkoutId: getCartCookie(req.headers), + }, + ...CheckoutCustomerAssociate, + }, + { headers }, + ) + } - return customerAuthenticatedLogin; + return customerAuthenticatedLogin } export interface Props { - /** - * Email - */ - input: string; - /** - * Senha - */ - pass: string; + /** + * Email + */ + input: string + /** + * Senha + */ + pass: string } diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index c26a0e422..868995ad2 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -4,5 +4,6 @@ import { CART_COOKIE } from 'apps/wake/utils/cart.ts' export default function (_props: object, _req: Request, { response }: AppContext) { deleteCookie(response.headers, 'customerToken') + deleteCookie(response.headers, 'fbits-login') deleteCookie(response.headers, CART_COOKIE) } diff --git a/wake/utils/authenticate.ts b/wake/utils/authenticate.ts index eb7ac93d5..ab8aef134 100644 --- a/wake/utils/authenticate.ts +++ b/wake/utils/authenticate.ts @@ -34,7 +34,12 @@ const authenticate = async (req: Request, ctx: AppContext): Promise; -export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, type?: LoginType | null, validUntil: any } | null }; +export type CustomerAuthenticatedLoginMutation = { customerAuthenticatedLogin?: { isMaster: boolean, token?: string | null, legacyToken?: string | null, type?: LoginType | null, validUntil: any } | null }; export type CustomerAccessTokenRenewMutationVariables = Exact<{ customerAccessToken: Scalars['String']['input']; diff --git a/wake/utils/user.ts b/wake/utils/user.ts index 5222aa462..95e2c201a 100644 --- a/wake/utils/user.ts +++ b/wake/utils/user.ts @@ -2,19 +2,24 @@ import { getCookies, setCookie } from 'std/http/cookie.ts' export const LOGIN_COOKIE = 'fbits-login' -const _1_YEAR = new Date(Date.now() + 1000 * 60 * 60 * 24 * 365) - export const getUserCookie = (headers: Headers): string | undefined => { const cookies = getCookies(headers) return cookies[LOGIN_COOKIE] } -export const setUserCookie = (headers: Headers, token: string, expires: Date): void => { +export const setUserCookie = (headers: Headers, token: string, legacyToken: string, expires: Date): void => { setCookie(headers, { name: 'customerToken', path: '/', - value: token as string, + value: token, expires, }) + setCookie(headers, { + name: 'fbits-login', + path: '/', + value: legacyToken, + // 1 year + expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365), + }) } From 2cf06b5f2063357bc5233f979026770509afe190 Mon Sep 17 00:00:00 2001 From: Luigi Date: Mon, 17 Jun 2024 22:26:05 -0300 Subject: [PATCH 08/37] ... --- wake/hooks/context.ts | 235 +++++++++++++++++++------------------- wake/hooks/useAddress.ts | 25 ++++ wake/hooks/useShipping.ts | 25 ++++ wake/mod.ts | 186 ++++++++++++++---------------- 4 files changed, 255 insertions(+), 216 deletions(-) create mode 100644 wake/hooks/useAddress.ts create mode 100644 wake/hooks/useShipping.ts diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 3e09c6287..fdf5ad3e9 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -1,141 +1,140 @@ -import { IS_BROWSER } from "$fresh/runtime.ts"; -import { signal } from "@preact/signals"; -import { invoke } from "../runtime.ts"; +import { IS_BROWSER } from '$fresh/runtime.ts' +import { signal } from '@preact/signals' +import type { Person } from '../../commerce/types.ts' +import { invoke } from '../runtime.ts' +import { setClientCookie } from '../utils/cart.ts' import type { - CheckoutFragment, - WishlistReducedProductFragment, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { Person } from "../../commerce/types.ts"; -import { setClientCookie } from "../utils/cart.ts"; -import { ShopQuery } from "../utils/graphql/storefront.graphql.gen.ts"; + CheckoutFragment, + ShopQuery, + WishlistReducedProductFragment, +} from '../utils/graphql/storefront.graphql.gen.ts' export interface Context { - cart: Partial; - user: Person | null; - wishlist: WishlistReducedProductFragment[] | null; + cart: Partial + user: Person | null + wishlist: WishlistReducedProductFragment[] | null + selectedShipping: Awaited> + selectedAddress: Awaited> } -const loading = signal(true); +const loading = signal(true) const context = { - cart: signal>({}), - user: signal(null), - wishlist: signal(null), - shop: signal(null), -}; - -let queue2 = Promise.resolve(); -let abort2 = () => {}; - -let queue = Promise.resolve(); -let abort = () => {}; -const enqueue = ( - cb: (signal: AbortSignal) => Promise> | Partial, -) => { - abort(); - - loading.value = true; - const controller = new AbortController(); - - queue = queue.then(async () => { - try { - const { cart, user, wishlist } = await cb(controller.signal); - - if (controller.signal.aborted) { - throw { name: "AbortError" }; - } - - context.cart.value = { ...context.cart.value, ...cart }; - context.user.value = user || context.user.value; - context.wishlist.value = wishlist || context.wishlist.value; - - loading.value = false; - } catch (error) { - if (error.name === "AbortError") return; - - console.error(error); - loading.value = false; - } - }); - - abort = () => controller.abort(); - - return queue; -}; - -const enqueue2 = ( - cb: (signal: AbortSignal) => Promise> | Partial, -) => { - abort2(); - - loading.value = true; - const controller = new AbortController(); - - queue2 = queue2.then(async () => { - try { - const { shop } = await cb(controller.signal); - const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout(); - const isLocalhost = window.location.hostname === "localhost"; - - if (!isLocalhost && !useCustomCheckout) { - const url = new URL("/api/carrinho", shop.checkoutUrl); - - const { Id } = await fetch(url, { credentials: "include" }).then((r) => - r.json() - ); - - if (controller.signal.aborted) { - throw { name: "AbortError" }; + cart: signal>({}), + user: signal(null), + wishlist: signal(null), + shop: signal(null), + selectedShipping: signal>>(null), + selectedAddress: signal>>(null), +} + +let queue2 = Promise.resolve() +let abort2 = () => {} + +let queue = Promise.resolve() +let abort = () => {} +const enqueue = (cb: (signal: AbortSignal) => Promise> | Partial) => { + abort() + + loading.value = true + const controller = new AbortController() + + queue = queue.then(async () => { + try { + const { cart, user, wishlist, selectedShipping, selectedAddress } = await cb(controller.signal) + + if (controller.signal.aborted) { + throw { name: 'AbortError' } + } + + context.cart.value = { ...context.cart.value, ...cart } + context.user.value = user || context.user.value + context.wishlist.value = wishlist || context.wishlist.value + context.selectedShipping.value = selectedShipping || context.selectedShipping.value + context.selectedAddress.value = selectedAddress || context.selectedAddress.value + + loading.value = false + } catch (error) { + if (error.name === 'AbortError') return + + console.error(error) + loading.value = false } + }) - setClientCookie(Id); - } + abort = () => controller.abort() + + return queue +} - enqueue(load); +const enqueue2 = (cb: (signal: AbortSignal) => Promise> | Partial) => { + abort2() - loading.value = false; - } catch (error) { - if (error.name === "AbortError") return; + loading.value = true + const controller = new AbortController() - console.error(error); - loading.value = false; - } - }); + queue2 = queue2.then(async () => { + try { + const { shop } = await cb(controller.signal) + const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout() + const isLocalhost = window.location.hostname === 'localhost' - abort2 = () => controller.abort(); + if (!isLocalhost && !useCustomCheckout) { + const url = new URL('/api/carrinho', shop.checkoutUrl) - return queue2; -}; + const { Id } = await fetch(url, { credentials: 'include' }).then(r => r.json()) + + if (controller.signal.aborted) { + throw { name: 'AbortError' } + } + + setClientCookie(Id) + } + + enqueue(load) + + loading.value = false + } catch (error) { + if (error.name === 'AbortError') return + + console.error(error) + loading.value = false + } + }) + + abort2 = () => controller.abort() + + return queue2 +} const load2 = (signal: AbortSignal) => - invoke( - { - shop: invoke.wake.loaders.shop(), - }, - { signal }, - ); + invoke( + { + shop: invoke.wake.loaders.shop(), + }, + { signal }, + ) const load = (signal: AbortSignal) => - invoke( - { - cart: invoke.wake.loaders.cart(), - user: invoke.wake.loaders.user(), - wishlist: invoke.wake.loaders.wishlist(), - }, - { signal }, - ); + invoke( + { + cart: invoke.wake.loaders.cart(), + user: invoke.wake.loaders.user(), + wishlist: invoke.wake.loaders.wishlist(), + selectedShipping: invoke.wake.loaders.selectedShipping(), + selectedAddress: invoke.wake.loaders.selectedAddress(), + }, + { signal }, + ) if (IS_BROWSER) { - enqueue2(load2); - enqueue(load); + enqueue2(load2) + enqueue(load) - document.addEventListener( - "visibilitychange", - () => document.visibilityState === "visible" && enqueue(load), - ); + document.addEventListener('visibilitychange', () => document.visibilityState === 'visible' && enqueue(load)) } export const state = { - ...context, - loading, - enqueue, -}; + ...context, + loading, + enqueue, +} diff --git a/wake/hooks/useAddress.ts b/wake/hooks/useAddress.ts new file mode 100644 index 000000000..c98d0c29f --- /dev/null +++ b/wake/hooks/useAddress.ts @@ -0,0 +1,25 @@ +import { state as storeState } from './context.ts' +import type { Product } from '../../commerce/types.ts' +import type { Manifest } from '../manifest.gen.ts' +import { invoke } from '../runtime.ts' + +const { selectedAddress, loading } = storeState + +type EnqueuableActions = Manifest['actions'][K]['default'] extends ( + ...args: any[] +) => Promise + ? K + : never + +const enqueue = + (key: EnqueuableActions) => + (props: Parameters[0]) => + storeState.enqueue(signal => invoke({ selectedAddress: { key, props } } as any, { signal }) as any) + +const state = { + selectedAddress, + loading, + selectAddress: enqueue('wake/actions/selectAddress.ts'), +} + +export const useAddress = () => state diff --git a/wake/hooks/useShipping.ts b/wake/hooks/useShipping.ts new file mode 100644 index 000000000..f47340bbc --- /dev/null +++ b/wake/hooks/useShipping.ts @@ -0,0 +1,25 @@ +import { state as storeState } from './context.ts' +import type { Product } from '../../commerce/types.ts' +import type { Manifest } from '../manifest.gen.ts' +import { invoke } from '../runtime.ts' + +const { selectedShipping, loading } = storeState + +type EnqueuableActions = Manifest['actions'][K]['default'] extends ( + ...args: any[] +) => Promise + ? K + : never + +const enqueue = + (key: EnqueuableActions) => + (props: Parameters[0]) => + storeState.enqueue(signal => invoke({ selectedShipping: { key, props } } as any, { signal }) as any) + +const state = { + selectedShipping, + loading, + selectShipping: enqueue('wake/actions/selectShipping.ts'), +} + +export const useShipping = () => state diff --git a/wake/mod.ts b/wake/mod.ts index 7050a5ba4..83dd21168 100644 --- a/wake/mod.ts +++ b/wake/mod.ts @@ -1,63 +1,63 @@ -import type { App, FnContext } from "deco/mod.ts"; -import { fetchSafe } from "../utils/fetch.ts"; -import { createGraphqlClient } from "../utils/graphql.ts"; -import { createHttpClient } from "../utils/http.ts"; -import type { Secret } from "../website/loaders/secret.ts"; -import manifest, { Manifest } from "./manifest.gen.ts"; -import { OpenAPI } from "./utils/openapi/wake.openapi.gen.ts"; -import { CheckoutApi } from "./utils/client.ts"; -import { previewFromMarkdown } from "../utils/preview.ts"; +import type { App, FnContext } from 'deco/mod.ts' +import { fetchSafe } from '../utils/fetch.ts' +import { createGraphqlClient } from '../utils/graphql.ts' +import { createHttpClient } from '../utils/http.ts' +import type { Secret } from '../website/loaders/secret.ts' +import manifest, { Manifest } from './manifest.gen.ts' +import { OpenAPI } from './utils/openapi/wake.openapi.gen.ts' +import { CheckoutApi } from './utils/client.ts' +import { previewFromMarkdown } from '../utils/preview.ts' -export type AppContext = FnContext; +export type AppContext = FnContext -export let state: null | State = null; +export let state: null | State = null /** @title Wake */ export interface Props { - /** - * @title Account Name - * @description erploja2 etc - */ - account: string; - - /** - * @title Checkout Url - * @description https://checkout.erploja2.com.br - */ - checkoutUrl: string; - - /** - * @title Wake Storefront Token - * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token - */ - storefrontToken: Secret; - - /** - * @title Wake API token - * @description The token for accessing wake commerce - */ - token?: Secret; - - /** - * @description Use Wake as backend platform - */ - platform: "wake"; - - /** - * @title Use Custom Checkout - * @description Use wake headless api for checkout - */ - useCustomCheckout?: boolean; + /** + * @title Account Name + * @description erploja2 etc + */ + account: string + + /** + * @title Checkout Url + * @description https://checkout.erploja2.com.br + */ + checkoutUrl: string + + /** + * @title Wake Storefront Token + * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token + */ + storefrontToken: Secret + + /** + * @title Wake API token + * @description The token for accessing wake commerce + */ + token?: Secret + + /** + * @description Use Wake as backend platform + */ + platform: 'wake' + + /** + * @title Use Custom Checkout + * @description Use wake headless api for checkout + */ + useCustomCheckout?: boolean } export interface State extends Props { - api: ReturnType>; - checkoutApi: ReturnType>; - storefront: ReturnType; - useCustomCheckout: boolean; + api: ReturnType> + checkoutApi: ReturnType> + storefront: ReturnType + useCustomCheckout: boolean } -export const color = 0xb600ee; +export const color = 0xb600ee /** * @title Wake @@ -66,53 +66,43 @@ export const color = 0xb600ee; * @logo https://raw.githubusercontent.com/deco-cx/apps/main/wake/logo.png */ export default function App(props: Props): App { - const { - token, - storefrontToken, - account, - checkoutUrl, - useCustomCheckout = false, - } = props; - - if (!token || !storefrontToken) { - console.warn( - "Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work", - ); - } - - // HEAD - // - const stringToken = typeof token === "string" ? token : token?.get?.() ?? ""; - const stringStorefrontToken = typeof storefrontToken === "string" - ? storefrontToken - : storefrontToken?.get?.() ?? ""; - - const api = createHttpClient({ - base: "https://api.fbits.net", - headers: new Headers({ Authorization: `Basic ${stringToken}` }), - fetcher: fetchSafe, - }); - - //22e714b360b7ef187fe4bdb93385dd0a85686e2a - const storefront = createGraphqlClient({ - endpoint: "https://storefront-api.fbits.net/graphql", - headers: new Headers({ "TCS-Access-Token": `${stringStorefrontToken}` }), - fetcher: fetchSafe, - }); - - const checkoutApi = createHttpClient({ - base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, - fetcher: fetchSafe, - }); - - state = { ...props, api, storefront, checkoutApi, useCustomCheckout }; - - return { - state, - manifest, - }; + const { token, storefrontToken, account, checkoutUrl, useCustomCheckout = false } = props + + if (!token || !storefrontToken) { + console.warn( + 'Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work', + ) + } + + // HEAD + // + const stringToken = typeof token === 'string' ? token : token?.get?.() ?? '' + const stringStorefrontToken = typeof storefrontToken === 'string' ? storefrontToken : storefrontToken?.get?.() ?? '' + + const api = createHttpClient({ + base: 'https://api.fbits.net', + headers: new Headers({ Authorization: `Basic ${stringToken}` }), + fetcher: fetchSafe, + }) + + //22e714b360b7ef187fe4bdb93385dd0a85686e2a + const storefront = createGraphqlClient({ + endpoint: 'https://storefront-api.fbits.net/graphql', + headers: new Headers({ 'TCS-Access-Token': `${stringStorefrontToken}` }), + fetcher: fetchSafe, + }) + + const checkoutApi = createHttpClient({ + base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, + fetcher: fetchSafe, + }) + + state = { ...props, api, storefront, checkoutApi, useCustomCheckout } + + return { + state, + manifest, + } } -export const preview = previewFromMarkdown( - new URL("./README.md", import.meta.url), -); +export const preview = previewFromMarkdown(new URL('./README.md', import.meta.url)) From 568e6d405d9594253b54e710b61ca0bc4c7da185 Mon Sep 17 00:00:00 2001 From: Luigi Date: Wed, 19 Jun 2024 22:52:49 -0300 Subject: [PATCH 09/37] ... --- wake/actions/cart/addCoupon.ts | 68 +++++++------- wake/actions/cart/addItem.ts | 20 ++-- wake/actions/cart/addItems.ts | 76 +++++++-------- wake/actions/cart/removeCoupon.ts | 66 ++++++------- wake/actions/cart/updateItemQuantity.ts | 7 +- ...{finishCheckout.ts => completeCheckout.ts} | 14 +-- wake/actions/createAddress.ts | 4 +- wake/actions/deleteAddress.ts | 4 +- wake/actions/login.ts | 9 +- wake/actions/logout.ts | 2 +- wake/actions/newsletter/register.ts | 62 ++++++------ wake/actions/notifyme.ts | 56 +++++------ wake/actions/review/create.ts | 60 ++++++------ wake/actions/selectAddress.ts | 6 +- wake/actions/selectPayment.ts | 2 +- wake/actions/selectShipping.ts | 2 +- wake/actions/submmitForm.ts | 4 +- wake/actions/updateAddress.ts | 4 +- wake/actions/wishlist/addProduct.ts | 86 ++++++++--------- wake/actions/wishlist/removeProduct.ts | 86 ++++++++--------- wake/hooks/context.ts | 14 +-- wake/hooks/useAddress.ts | 25 ----- wake/hooks/useCart.ts | 4 +- wake/hooks/useShipping.ts | 25 ----- wake/hooks/useWishlist.ts | 8 +- wake/loaders/calculatePrices.ts | 5 +- wake/loaders/cart.ts | 80 ++++++++-------- wake/loaders/checkoutCoupon.ts | 4 +- wake/loaders/paymentMethods.ts | 2 +- wake/loaders/productDetailsPage.ts | 4 +- wake/loaders/productList.ts | 2 +- wake/loaders/productListingPage.ts | 6 +- wake/loaders/proxy.ts | 4 +- wake/loaders/recommendations.ts | 4 +- wake/loaders/selectedAddress.ts | 36 ------- wake/loaders/selectedShipping.ts | 36 ------- wake/loaders/shop.ts | 2 +- wake/loaders/suggestion.ts | 6 +- wake/loaders/user.ts | 94 +++++++++---------- wake/loaders/userAddresses.ts | 47 ++++------ wake/loaders/wishlist.ts | 4 +- wake/manifest.gen.ts | 44 ++++----- wake/mod.ts | 6 +- wake/runtime.ts | 2 +- wake/utils/authenticate.ts | 6 +- wake/utils/cart.ts | 4 +- wake/utils/getVariations.ts | 2 +- wake/utils/graphql/queries.ts | 6 +- wake/utils/graphql/storefront.graphql.gen.ts | 7 +- wake/utils/nonNullable.ts | 3 + wake/utils/transform.ts | 2 +- 51 files changed, 484 insertions(+), 648 deletions(-) rename wake/actions/{finishCheckout.ts => completeCheckout.ts} (75%) delete mode 100644 wake/hooks/useAddress.ts delete mode 100644 wake/hooks/useShipping.ts delete mode 100644 wake/loaders/selectedAddress.ts delete mode 100644 wake/loaders/selectedShipping.ts create mode 100644 wake/utils/nonNullable.ts diff --git a/wake/actions/cart/addCoupon.ts b/wake/actions/cart/addCoupon.ts index d4a72a879..4e79433b4 100644 --- a/wake/actions/cart/addCoupon.ts +++ b/wake/actions/cart/addCoupon.ts @@ -1,46 +1,42 @@ -import { HttpError } from "../../../utils/http.ts"; -import { AppContext } from "../../mod.ts"; -import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; -import { AddCoupon } from "../../utils/graphql/queries.ts"; -import { - AddCouponMutation, - AddCouponMutationVariables, - CheckoutFragment, -} from "../../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import { HttpError } from '../../../utils/http.ts' +import type { AppContext } from '../../mod.ts' +import { getCartCookie, setCartCookie } from '../../utils/cart.ts' +import { AddCoupon } from '../../utils/graphql/queries.ts' +import type { + AddCouponMutation, + AddCouponMutationVariables, + CheckoutFragment, +} from '../../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' export interface Props { - coupon: string; + coupon: string } -const action = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise> => { - const { storefront } = ctx; - const cartId = getCartCookie(req.headers); - const headers = parseHeaders(req.headers); +const action = async (props: Props, req: Request, ctx: AppContext): Promise> => { + const { storefront } = ctx + const cartId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers) - if (!cartId) { - throw new HttpError(400, "Missing cart cookie"); - } + if (!cartId) { + throw new HttpError(400, 'Missing cart cookie') + } - const data = await storefront.query< - AddCouponMutation, - AddCouponMutationVariables - >({ - variables: { checkoutId: cartId, ...props }, - ...AddCoupon, - }, { headers }); + const data = await storefront.query( + { + variables: { checkoutId: cartId, ...props }, + ...AddCoupon, + }, + { headers }, + ) - const checkoutId = data.checkout?.checkoutId; + const checkoutId = data.checkout?.checkoutId - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId); - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId) + } - return data.checkout ?? {}; -}; + return data.checkout ?? {} +} -export default action; +export default action diff --git a/wake/actions/cart/addItem.ts b/wake/actions/cart/addItem.ts index 51939d286..24f91d096 100644 --- a/wake/actions/cart/addItem.ts +++ b/wake/actions/cart/addItem.ts @@ -1,15 +1,11 @@ -import { AppContext } from "../../mod.ts"; -import { CheckoutFragment } from "../../utils/graphql/storefront.graphql.gen.ts"; -import { CartItem as Props } from "./addItems.ts"; +import type { AppContext } from '../../mod.ts' +import type { CheckoutFragment } from '../../utils/graphql/storefront.graphql.gen.ts' +import type { CartItem as Props } from './addItems.ts' -export type { CartItem as Props } from "./addItems.ts"; +export type { CartItem as Props } from './addItems.ts' -const action = async ( - props: Props, - _req: Request, - ctx: AppContext, -): Promise> => { - return await ctx.invoke.wake.actions.cart.addItems({ products: [props] }); -}; +const action = async (props: Props, _req: Request, ctx: AppContext): Promise> => { + return await ctx.invoke.wake.actions.cart.addItems({ products: [props] }) +} -export default action; +export default action diff --git a/wake/actions/cart/addItems.ts b/wake/actions/cart/addItems.ts index 30325ddf9..0a61ccbb9 100644 --- a/wake/actions/cart/addItems.ts +++ b/wake/actions/cart/addItems.ts @@ -1,53 +1,49 @@ -import { HttpError } from "../../../utils/http.ts"; -import { AppContext } from "../../mod.ts"; -import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; -import { AddItemToCart } from "../../utils/graphql/queries.ts"; -import { - AddItemToCartMutation, - AddItemToCartMutationVariables, - CheckoutFragment, -} from "../../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import { HttpError } from '../../../utils/http.ts' +import type { AppContext } from '../../mod.ts' +import { getCartCookie, setCartCookie } from '../../utils/cart.ts' +import { AddItemToCart } from '../../utils/graphql/queries.ts' +import type { + AddItemToCartMutation, + AddItemToCartMutationVariables, + CheckoutFragment, +} from '../../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' export interface CartItem { - productVariantId: number; - quantity: number; - customization?: { customizationId: number; value: string }[]; - subscription?: { subscriptionGroupId: number; recurringTypeId: number }; + productVariantId: number + quantity: number + customization?: { customizationId: number; value: string }[] + subscription?: { subscriptionGroupId: number; recurringTypeId: number } } export interface Props { - products: CartItem[]; + products: CartItem[] } -const action = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise> => { - const { storefront } = ctx; - const cartId = getCartCookie(req.headers); - const headers = parseHeaders(req.headers); +const action = async (props: Props, req: Request, ctx: AppContext): Promise> => { + const { storefront } = ctx + const cartId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers) - if (!cartId) { - throw new HttpError(400, "Missing cart cookie"); - } + if (!cartId) { + throw new HttpError(400, 'Missing cart cookie') + } - const data = await storefront.query< - AddItemToCartMutation, - AddItemToCartMutationVariables - >({ - variables: { input: { id: cartId, products: props.products } }, - ...AddItemToCart, - }, { headers }); + const data = await storefront.query( + { + variables: { input: { id: cartId, products: props.products } }, + ...AddItemToCart, + }, + { headers }, + ) - const checkoutId = data.checkout?.checkoutId; + const checkoutId = data.checkout?.checkoutId - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId); - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId) + } - return data.checkout ?? {}; -}; + return data.checkout ?? {} +} -export default action; +export default action diff --git a/wake/actions/cart/removeCoupon.ts b/wake/actions/cart/removeCoupon.ts index 94d70a8e7..c66933d27 100644 --- a/wake/actions/cart/removeCoupon.ts +++ b/wake/actions/cart/removeCoupon.ts @@ -1,42 +1,38 @@ -import { HttpError } from "../../../utils/http.ts"; -import { AppContext } from "../../mod.ts"; -import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; -import { RemoveCoupon } from "../../utils/graphql/queries.ts"; -import { - CheckoutFragment, - RemoveCouponMutation, - RemoveCouponMutationVariables, -} from "../../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import { HttpError } from '../../../utils/http.ts' +import type { AppContext } from '../../mod.ts' +import { getCartCookie, setCartCookie } from '../../utils/cart.ts' +import { RemoveCoupon } from '../../utils/graphql/queries.ts' +import type { + CheckoutFragment, + RemoveCouponMutation, + RemoveCouponMutationVariables, +} from '../../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' -const action = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise> => { - const { storefront } = ctx; - const cartId = getCartCookie(req.headers); - const headers = parseHeaders(req.headers); +const action = async (_props: unknown, req: Request, ctx: AppContext): Promise> => { + const { storefront } = ctx + const cartId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers) - if (!cartId) { - throw new HttpError(400, "Missing cart cookie"); - } + if (!cartId) { + throw new HttpError(400, 'Missing cart cookie') + } - const data = await storefront.query< - RemoveCouponMutation, - RemoveCouponMutationVariables - >({ - variables: { checkoutId: cartId }, - ...RemoveCoupon, - }, { headers }); + const data = await storefront.query( + { + variables: { checkoutId: cartId }, + ...RemoveCoupon, + }, + { headers }, + ) - const checkoutId = data.checkout?.checkoutId; + const checkoutId = data.checkout?.checkoutId - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId); - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId) + } - return data.checkout ?? {}; -}; + return data.checkout ?? {} +} -export default action; +export default action diff --git a/wake/actions/cart/updateItemQuantity.ts b/wake/actions/cart/updateItemQuantity.ts index 49c81aed3..f15f456a6 100644 --- a/wake/actions/cart/updateItemQuantity.ts +++ b/wake/actions/cart/updateItemQuantity.ts @@ -1,8 +1,13 @@ import { HttpError } from "../../../utils/http.ts"; import { AppContext } from "../../mod.ts"; import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; -import { RemoveItemFromCart } from "../../utils/graphql/queries.ts"; import { + AddItemToCart, + RemoveItemFromCart, +} from "../../utils/graphql/queries.ts"; +import type { + AddItemToCartMutation, + AddItemToCartMutationVariables, CheckoutFragment, RemoveItemFromCartMutation, RemoveItemFromCartMutationVariables, diff --git a/wake/actions/finishCheckout.ts b/wake/actions/completeCheckout.ts similarity index 75% rename from wake/actions/finishCheckout.ts rename to wake/actions/completeCheckout.ts index 72571e996..add1e6e8d 100644 --- a/wake/actions/finishCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -1,8 +1,8 @@ -import authenticate from 'apps/wake/utils/authenticate.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import authenticate from '../utils/authenticate.ts' +import { getCartCookie } from '../utils/cart.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' import type { AppContext } from '../mod.ts' -import { CheckoutAddressAssociate } from '../utils/graphql/queries.ts' +import { CheckoutComplete } from '../utils/graphql/queries.ts' import type { CheckoutCompleteMutation, CheckoutCompleteMutationVariables, @@ -27,12 +27,12 @@ export default async function ( >( { variables: { - paymentData: props.paymentData, + paymentData: new URLSearchParams(props.paymentData).toString(), comments: props.comments, customerAccessToken, checkoutId, }, - ...CheckoutAddressAssociate, + ...CheckoutComplete, }, { headers }, ) @@ -44,7 +44,7 @@ interface Props { /** * Informações adicionais de pagamento */ - paymentData: string + paymentData: Record /** * Comentários */ diff --git a/wake/actions/createAddress.ts b/wake/actions/createAddress.ts index bfef7f56f..7a1c8f5a5 100644 --- a/wake/actions/createAddress.ts +++ b/wake/actions/createAddress.ts @@ -5,8 +5,8 @@ import type { CustomerAddressCreateMutationVariables, } from '../utils/graphql/storefront.graphql.gen.ts' import { CustomerAddressCreate } from '../utils/graphql/queries.ts' -import authenticate from 'apps/wake/utils/authenticate.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import authenticate from '../utils/authenticate.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/customeraddresscreate export default async function ( diff --git a/wake/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts index ae7fc0967..9bbda9773 100644 --- a/wake/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -5,8 +5,8 @@ import type { CustomerAddressRemoveMutationVariables, } from '../utils/graphql/storefront.graphql.gen.ts' import { CustomerAddressRemove } from '../utils/graphql/queries.ts' -import authenticate from 'apps/wake/utils/authenticate.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import authenticate from '../utils/authenticate.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/customeraddressremove export default async function ( diff --git a/wake/actions/login.ts b/wake/actions/login.ts index c93ca5364..09923cba9 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -1,15 +1,14 @@ import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import { getCartCookie } from '../utils/cart.ts' +import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' import type { CheckoutCustomerAssociateMutation, CheckoutCustomerAssociateMutationVariables, CustomerAuthenticatedLoginMutation, CustomerAuthenticatedLoginMutationVariables, } from '../utils/graphql/storefront.graphql.gen.ts' -import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' -import { setCookie } from 'std/http/cookie.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import { setUserCookie } from 'apps/wake/utils/user.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import { setUserCookie } from '../utils/user.ts' export default async function ( props: Props, diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index 868995ad2..90f8d95e5 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -1,6 +1,6 @@ import type { AppContext } from '../mod.ts' import { deleteCookie } from 'std/http/cookie.ts' -import { CART_COOKIE } from 'apps/wake/utils/cart.ts' +import { CART_COOKIE } from '../utils/cart.ts' export default function (_props: object, _req: Request, { response }: AppContext) { deleteCookie(response.headers, 'customerToken') diff --git a/wake/actions/newsletter/register.ts b/wake/actions/newsletter/register.ts index 643012fe1..7886a2c60 100644 --- a/wake/actions/newsletter/register.ts +++ b/wake/actions/newsletter/register.ts @@ -1,41 +1,37 @@ -import { HttpError } from "../../../utils/http.ts"; -import { AppContext } from "../../mod.ts"; -import { CreateNewsletterRegister } from "../../utils/graphql/queries.ts"; -import { - CreateNewsletterRegisterMutation, - CreateNewsletterRegisterMutationVariables, - NewsletterNode, -} from "../../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import { HttpError } from '../../../utils/http.ts' +import type { AppContext } from '../../mod.ts' +import { CreateNewsletterRegister } from '../../utils/graphql/queries.ts' +import type { + CreateNewsletterRegisterMutation, + CreateNewsletterRegisterMutationVariables, + NewsletterNode, +} from '../../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' export interface Props { - email: string; - name: string; + email: string + name: string } -const action = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise => { - const { storefront } = ctx; - const headers = parseHeaders(req.headers); +const action = async (props: Props, req: Request, ctx: AppContext): Promise => { + const { storefront } = ctx + const headers = parseHeaders(req.headers) - const data = await storefront.query< - CreateNewsletterRegisterMutation, - CreateNewsletterRegisterMutationVariables - >({ - variables: { input: { ...props } }, - ...CreateNewsletterRegister, - }, { - headers, - }); + const data = await storefront.query( + { + variables: { input: { ...props } }, + ...CreateNewsletterRegister, + }, + { + headers, + }, + ) - if (!data.createNewsletterRegister) { - throw new HttpError(400, "Error on Register"); - } + if (!data.createNewsletterRegister) { + throw new HttpError(400, 'Error on Register') + } - return data.createNewsletterRegister; -}; + return data.createNewsletterRegister +} -export default action; +export default action diff --git a/wake/actions/notifyme.ts b/wake/actions/notifyme.ts index 880191501..9d697ac99 100644 --- a/wake/actions/notifyme.ts +++ b/wake/actions/notifyme.ts @@ -1,38 +1,34 @@ -import { AppContext } from "../mod.ts"; -import { ProductRestockAlert } from "../utils/graphql/queries.ts"; -import { - ProductRestockAlertMutation, - ProductRestockAlertMutationVariables, - RestockAlertNode, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { ProductRestockAlert } from '../utils/graphql/queries.ts' +import type { + ProductRestockAlertMutation, + ProductRestockAlertMutationVariables, + RestockAlertNode, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' export interface Props { - email: string; - name: string; - productVariantId: number; + email: string + name: string + productVariantId: number } -const action = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise => { - const { storefront } = ctx; +const action = async (props: Props, req: Request, ctx: AppContext): Promise => { + const { storefront } = ctx - const headers = parseHeaders(req.headers); + const headers = parseHeaders(req.headers) - const data = await storefront.query< - ProductRestockAlertMutation, - ProductRestockAlertMutationVariables - >({ - variables: { input: props }, - ...ProductRestockAlert, - }, { - headers, - }); + const data = await storefront.query( + { + variables: { input: props }, + ...ProductRestockAlert, + }, + { + headers, + }, + ) - return data.productRestockAlert ?? null; -}; + return data.productRestockAlert ?? null +} -export default action; +export default action diff --git a/wake/actions/review/create.ts b/wake/actions/review/create.ts index 10f441f2a..0a0baaca4 100644 --- a/wake/actions/review/create.ts +++ b/wake/actions/review/create.ts @@ -1,40 +1,36 @@ -import { AppContext } from "../../mod.ts"; -import { CreateProductReview } from "../../utils/graphql/queries.ts"; -import { - CreateProductReviewMutation, - CreateProductReviewMutationVariables, - Review, -} from "../../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import type { AppContext } from '../../mod.ts' +import { CreateProductReview } from '../../utils/graphql/queries.ts' +import type { + CreateProductReviewMutation, + CreateProductReviewMutationVariables, + Review, +} from '../../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' export interface Props { - email: string; - name: string; - productVariantId: number; - rating: number; - review: string; + email: string + name: string + productVariantId: number + rating: number + review: string } -const action = async ( - props: Props, - req: Request, - ctx: AppContext, -): Promise => { - const { storefront } = ctx; +const action = async (props: Props, req: Request, ctx: AppContext): Promise => { + const { storefront } = ctx - const headers = parseHeaders(req.headers); + const headers = parseHeaders(req.headers) - const data = await storefront.query< - CreateProductReviewMutation, - CreateProductReviewMutationVariables - >({ - variables: props, - ...CreateProductReview, - }, { - headers, - }); + const data = await storefront.query( + { + variables: props, + ...CreateProductReview, + }, + { + headers, + }, + ) - return data.createProductReview ?? null; -}; + return data.createProductReview ?? null +} -export default action; +export default action diff --git a/wake/actions/selectAddress.ts b/wake/actions/selectAddress.ts index 27de4be7e..be26dc97d 100644 --- a/wake/actions/selectAddress.ts +++ b/wake/actions/selectAddress.ts @@ -5,9 +5,9 @@ import type { CheckoutAddressAssociateMutationVariables, } from '../utils/graphql/storefront.graphql.gen.ts' import { CheckoutAddressAssociate } from '../utils/graphql/queries.ts' -import authenticate from 'apps/wake/utils/authenticate.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' +import authenticate from '../utils/authenticate.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' +import { getCartCookie } from '../utils/cart.ts' // https://wakecommerce.readme.io/docs/storefront-api-checkoutaddressassociate export default async function ( diff --git a/wake/actions/selectPayment.ts b/wake/actions/selectPayment.ts index a3b94ab2c..e1cfd93b4 100644 --- a/wake/actions/selectPayment.ts +++ b/wake/actions/selectPayment.ts @@ -1,4 +1,4 @@ -import { getCartCookie } from 'apps/wake/utils/cart.ts' +import { getCartCookie } from '../utils/cart.ts' import type { AppContext } from '../mod.ts' import { CheckoutSelectPaymentMethod } from '../utils/graphql/queries.ts' import type { diff --git a/wake/actions/selectShipping.ts b/wake/actions/selectShipping.ts index e97cf398d..547e28f17 100644 --- a/wake/actions/selectShipping.ts +++ b/wake/actions/selectShipping.ts @@ -1,4 +1,4 @@ -import { getCartCookie } from 'apps/wake/utils/cart.ts' +import { getCartCookie } from '../utils/cart.ts' import type { AppContext } from '../mod.ts' import { CheckoutSelectShippingQuote } from '../utils/graphql/queries.ts' import type { diff --git a/wake/actions/submmitForm.ts b/wake/actions/submmitForm.ts index beac2c3bf..37d2e5e37 100644 --- a/wake/actions/submmitForm.ts +++ b/wake/actions/submmitForm.ts @@ -1,6 +1,6 @@ -import { AppContext } from "../mod.ts"; +import type { AppContext } from "../mod.ts"; import { SendGenericForm } from "../utils/graphql/queries.ts"; -import { +import type { SendGenericFormMutation, SendGenericFormMutationVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; diff --git a/wake/actions/updateAddress.ts b/wake/actions/updateAddress.ts index 45233a497..d8ec3126e 100644 --- a/wake/actions/updateAddress.ts +++ b/wake/actions/updateAddress.ts @@ -5,8 +5,8 @@ import type { CustomerAddressUpdateMutationVariables, } from '../utils/graphql/storefront.graphql.gen.ts' import { CustomerAddressUpdate } from '../utils/graphql/queries.ts' -import authenticate from 'apps/wake/utils/authenticate.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' +import authenticate from '../utils/authenticate.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' // https://wakecommerce.readme.io/docs/customeraddressupdate export default async function ( diff --git a/wake/actions/wishlist/addProduct.ts b/wake/actions/wishlist/addProduct.ts index 93ebf7115..6838ba8ac 100644 --- a/wake/actions/wishlist/addProduct.ts +++ b/wake/actions/wishlist/addProduct.ts @@ -1,50 +1,50 @@ -import { AppContext } from "../../mod.ts"; -import authenticate from "../../utils/authenticate.ts"; -import { WishlistAddProduct } from "../../utils/graphql/queries.ts"; -import { ProductFragment } from "../../utils/graphql/storefront.graphql.gen.ts"; -import { - WishlistAddProductMutation, - WishlistAddProductMutationVariables, - WishlistReducedProductFragment, -} from "../../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import type { AppContext } from '../../mod.ts' +import authenticate from '../../utils/authenticate.ts' +import { WishlistAddProduct } from '../../utils/graphql/queries.ts' +import type { ProductFragment } from '../../utils/graphql/storefront.graphql.gen.ts' +import type { + WishlistAddProductMutation, + WishlistAddProductMutationVariables, + WishlistReducedProductFragment, +} from '../../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' export interface Props { - productId: number; + productId: number } const action = async ( - props: Props, - req: Request, - ctx: AppContext, + props: Props, + req: Request, + ctx: AppContext, ): Promise => { - const { storefront } = ctx; - const { productId } = props; - const customerAccessToken = await authenticate(req, ctx); - const headers = parseHeaders(req.headers); - - if (!customerAccessToken) return []; + const { storefront } = ctx + const { productId } = props + const customerAccessToken = await authenticate(req, ctx) + const headers = parseHeaders(req.headers) + + if (!customerAccessToken) return [] + + const data = await storefront.query( + { + variables: { customerAccessToken, productId }, + ...WishlistAddProduct, + }, + { headers }, + ) + + const products = data.wishlistAddProduct + + if (!Array.isArray(products)) { + return null + } + + return products + .filter((node): node is ProductFragment => Boolean(node)) + .map(({ productId, productName }) => ({ + productId, + productName, + })) +} - const data = await storefront.query< - WishlistAddProductMutation, - WishlistAddProductMutationVariables - >({ - variables: { customerAccessToken, productId }, - ...WishlistAddProduct, - }, { headers }); - - const products = data.wishlistAddProduct; - - if (!Array.isArray(products)) { - return null; - } - - return products - .filter((node): node is ProductFragment => Boolean(node)) - .map(({ productId, productName }) => ({ - productId, - productName, - })); -}; - -export default action; +export default action diff --git a/wake/actions/wishlist/removeProduct.ts b/wake/actions/wishlist/removeProduct.ts index 3102238e6..be8d17ff9 100644 --- a/wake/actions/wishlist/removeProduct.ts +++ b/wake/actions/wishlist/removeProduct.ts @@ -1,53 +1,53 @@ -import { AppContext } from "../../mod.ts"; -import { WishlistRemoveProduct } from "../../utils/graphql/queries.ts"; -import { - WishlistReducedProductFragment, - WishlistRemoveProductMutation, - WishlistRemoveProductMutationVariables, -} from "../../utils/graphql/storefront.graphql.gen.ts"; - -import { ProductFragment } from "../../utils/graphql/storefront.graphql.gen.ts"; -import authenticate from "../../utils/authenticate.ts"; -import { parseHeaders } from "../../utils/parseHeaders.ts"; +import type { AppContext } from '../../mod.ts' +import { WishlistRemoveProduct } from '../../utils/graphql/queries.ts' +import type { + WishlistReducedProductFragment, + WishlistRemoveProductMutation, + WishlistRemoveProductMutationVariables, +} from '../../utils/graphql/storefront.graphql.gen.ts' + +import type { ProductFragment } from '../../utils/graphql/storefront.graphql.gen.ts' +import authenticate from '../../utils/authenticate.ts' +import { parseHeaders } from '../../utils/parseHeaders.ts' export interface Props { - productId: number; + productId: number } const action = async ( - props: Props, - req: Request, - ctx: AppContext, + props: Props, + req: Request, + ctx: AppContext, ): Promise => { - const { storefront } = ctx; - const { productId } = props; + const { storefront } = ctx + const { productId } = props - const headers = parseHeaders(req.headers); + const headers = parseHeaders(req.headers) - const customerAccessToken = await authenticate(req, ctx); + const customerAccessToken = await authenticate(req, ctx) - if (!customerAccessToken) return []; + if (!customerAccessToken) return [] - const data = await storefront.query< - WishlistRemoveProductMutation, - WishlistRemoveProductMutationVariables - >({ - variables: { customerAccessToken, productId }, - ...WishlistRemoveProduct, - }, { headers }); - - const products = data.wishlistRemoveProduct; - - if (!Array.isArray(products)) { - return null; - } - - return products - .filter((node): node is ProductFragment => Boolean(node)) - .map(({ productId, productName }) => ({ - productId, - productName, - })); -}; - -export default action; + const data = await storefront.query( + { + variables: { customerAccessToken, productId }, + ...WishlistRemoveProduct, + }, + { headers }, + ) + + const products = data.wishlistRemoveProduct + + if (!Array.isArray(products)) { + return null + } + + return products + .filter((node): node is ProductFragment => Boolean(node)) + .map(({ productId, productName }) => ({ + productId, + productName, + })) +} + +export default action diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index fdf5ad3e9..69910ff55 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -11,20 +11,16 @@ import type { export interface Context { cart: Partial - user: Person | null + user: (Person & { cpf: string | null }) | null wishlist: WishlistReducedProductFragment[] | null - selectedShipping: Awaited> - selectedAddress: Awaited> } const loading = signal(true) const context = { cart: signal>({}), - user: signal(null), + user: signal<(Person & { cpf: string | null }) | null>(null), wishlist: signal(null), shop: signal(null), - selectedShipping: signal>>(null), - selectedAddress: signal>>(null), } let queue2 = Promise.resolve() @@ -40,7 +36,7 @@ const enqueue = (cb: (signal: AbortSignal) => Promise> | Partia queue = queue.then(async () => { try { - const { cart, user, wishlist, selectedShipping, selectedAddress } = await cb(controller.signal) + const { cart, user, wishlist } = await cb(controller.signal) if (controller.signal.aborted) { throw { name: 'AbortError' } @@ -49,8 +45,6 @@ const enqueue = (cb: (signal: AbortSignal) => Promise> | Partia context.cart.value = { ...context.cart.value, ...cart } context.user.value = user || context.user.value context.wishlist.value = wishlist || context.wishlist.value - context.selectedShipping.value = selectedShipping || context.selectedShipping.value - context.selectedAddress.value = selectedAddress || context.selectedAddress.value loading.value = false } catch (error) { @@ -120,8 +114,6 @@ const load = (signal: AbortSignal) => cart: invoke.wake.loaders.cart(), user: invoke.wake.loaders.user(), wishlist: invoke.wake.loaders.wishlist(), - selectedShipping: invoke.wake.loaders.selectedShipping(), - selectedAddress: invoke.wake.loaders.selectedAddress(), }, { signal }, ) diff --git a/wake/hooks/useAddress.ts b/wake/hooks/useAddress.ts deleted file mode 100644 index c98d0c29f..000000000 --- a/wake/hooks/useAddress.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { state as storeState } from './context.ts' -import type { Product } from '../../commerce/types.ts' -import type { Manifest } from '../manifest.gen.ts' -import { invoke } from '../runtime.ts' - -const { selectedAddress, loading } = storeState - -type EnqueuableActions = Manifest['actions'][K]['default'] extends ( - ...args: any[] -) => Promise - ? K - : never - -const enqueue = - (key: EnqueuableActions) => - (props: Parameters[0]) => - storeState.enqueue(signal => invoke({ selectedAddress: { key, props } } as any, { signal }) as any) - -const state = { - selectedAddress, - loading, - selectAddress: enqueue('wake/actions/selectAddress.ts'), -} - -export const useAddress = () => state diff --git a/wake/hooks/useCart.ts b/wake/hooks/useCart.ts index 5a251ea3c..672001dfb 100644 --- a/wake/hooks/useCart.ts +++ b/wake/hooks/useCart.ts @@ -2,8 +2,8 @@ import type { AnalyticsItem } from "../../commerce/types.ts"; import type { Manifest } from "../manifest.gen.ts"; import { invoke } from "../runtime.ts"; -import { CheckoutFragment } from "../utils/graphql/storefront.graphql.gen.ts"; -import { Context, state as storeState } from "./context.ts"; +import type { CheckoutFragment } from "../utils/graphql/storefront.graphql.gen.ts"; +import { type Context, state as storeState } from "./context.ts"; const { cart, loading } = storeState; diff --git a/wake/hooks/useShipping.ts b/wake/hooks/useShipping.ts deleted file mode 100644 index f47340bbc..000000000 --- a/wake/hooks/useShipping.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { state as storeState } from './context.ts' -import type { Product } from '../../commerce/types.ts' -import type { Manifest } from '../manifest.gen.ts' -import { invoke } from '../runtime.ts' - -const { selectedShipping, loading } = storeState - -type EnqueuableActions = Manifest['actions'][K]['default'] extends ( - ...args: any[] -) => Promise - ? K - : never - -const enqueue = - (key: EnqueuableActions) => - (props: Parameters[0]) => - storeState.enqueue(signal => invoke({ selectedShipping: { key, props } } as any, { signal }) as any) - -const state = { - selectedShipping, - loading, - selectShipping: enqueue('wake/actions/selectShipping.ts'), -} - -export const useShipping = () => state diff --git a/wake/hooks/useWishlist.ts b/wake/hooks/useWishlist.ts index 460df6379..963ffe517 100644 --- a/wake/hooks/useWishlist.ts +++ b/wake/hooks/useWishlist.ts @@ -1,8 +1,8 @@ // deno-lint-ignore-file no-explicit-any -import { Product } from "../../commerce/types.ts"; -import { Manifest } from "../manifest.gen.ts"; +import type { Product } from "../../commerce/types.ts"; +import type { Manifest } from "../manifest.gen.ts"; import { invoke } from "../runtime.ts"; -import { WishlistReducedProductFragment } from "../utils/graphql/storefront.graphql.gen.ts"; +import type { WishlistReducedProductFragment } from "../utils/graphql/storefront.graphql.gen.ts"; import { state as storeState } from "./context.ts"; const { wishlist, loading } = storeState; @@ -21,7 +21,7 @@ const enqueue = < ); const getItem = (item: Omit) => - wishlist.value?.find((id) => id.productId == item.productId); + wishlist.value?.find((id) => id.productId === item.productId); const state = { wishlist, diff --git a/wake/loaders/calculatePrices.ts b/wake/loaders/calculatePrices.ts index d830b2a52..87535ea0d 100644 --- a/wake/loaders/calculatePrices.ts +++ b/wake/loaders/calculatePrices.ts @@ -1,6 +1,3 @@ -import authenticate from 'apps/wake/utils/authenticate.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' import type { AppContext } from '../mod.ts' import { CalculatePrices } from '../utils/graphql/queries.ts' import type { CalculatePricesQuery, CalculatePricesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' @@ -25,7 +22,7 @@ export default async function ( { headers }, ) - return calculatePrices + return calculatePrices || null } type Props = { diff --git a/wake/loaders/cart.ts b/wake/loaders/cart.ts index 97350b25d..3aa271608 100644 --- a/wake/loaders/cart.ts +++ b/wake/loaders/cart.ts @@ -1,48 +1,52 @@ -import { AppContext } from "../mod.ts"; -import { getCartCookie, setCartCookie } from "../utils/cart.ts"; -import { CreateCart, GetCart } from "../utils/graphql/queries.ts"; -import { - CheckoutFragment, - CreateCartMutation, - CreateCartMutationVariables, - GetCartQuery, - GetCartQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import authenticate from '../utils/authenticate.ts' +import type { AppContext } from '../mod.ts' +import { getCartCookie, setCartCookie } from '../utils/cart.ts' +import { CreateCart, GetCart } from '../utils/graphql/queries.ts' +import type { + CheckoutFragment, + CreateCartMutation, + CreateCartMutationVariables, + GetCartQuery, + GetCartQueryVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' /** * @title VNDA Integration * @description Cart loader */ -const loader = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise> => { - const { storefront } = ctx; - const cartId = getCartCookie(req.headers); - const headers = parseHeaders(req.headers); +const loader = async (_props: unknown, req: Request, ctx: AppContext): Promise> => { + const { storefront } = ctx + const cartId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers) + const customerAccessToken = await authenticate(req, ctx) - const data = cartId - ? await storefront.query({ - variables: { checkoutId: cartId }, - ...GetCart, - }, { - headers, - }) - : await storefront.query({ - ...CreateCart, - }, { - headers, - }); + const data = cartId + ? await storefront.query( + { + variables: { checkoutId: cartId, customerAccessToken }, + ...GetCart, + }, + { + headers, + }, + ) + : await storefront.query( + { + ...CreateCart, + }, + { + headers, + }, + ) - const checkoutId = data.checkout?.checkoutId; + const checkoutId = data.checkout?.checkoutId - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId); - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId) + } - return data.checkout ?? {}; -}; + return data.checkout ?? {} +} -export default loader; +export default loader diff --git a/wake/loaders/checkoutCoupon.ts b/wake/loaders/checkoutCoupon.ts index 1a636da86..c7dc57f61 100644 --- a/wake/loaders/checkoutCoupon.ts +++ b/wake/loaders/checkoutCoupon.ts @@ -1,5 +1,5 @@ -import { getCartCookie } from "apps/wake/utils/cart.ts"; -import ensureCheckout from "apps/wake/utils/ensureCheckout.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; import type { AppContext } from "../mod.ts"; import { GetCheckoutCoupon } from "../utils/graphql/queries.ts"; import type { diff --git a/wake/loaders/paymentMethods.ts b/wake/loaders/paymentMethods.ts index 474763f8a..c518e68be 100644 --- a/wake/loaders/paymentMethods.ts +++ b/wake/loaders/paymentMethods.ts @@ -1,4 +1,4 @@ -import { getCartCookie } from 'apps/wake/utils/cart.ts' +import { getCartCookie } from '../utils/cart.ts' import type { AppContext } from '../mod.ts' import { PaymentMethods } from '../utils/graphql/queries.ts' import type { PaymentMethodsQuery, PaymentMethodsQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' diff --git a/wake/loaders/productDetailsPage.ts b/wake/loaders/productDetailsPage.ts index 560e93a15..1316a98a1 100644 --- a/wake/loaders/productDetailsPage.ts +++ b/wake/loaders/productDetailsPage.ts @@ -1,14 +1,14 @@ import type { Product, ProductDetailsPage } from "../../commerce/types.ts"; import type { RequestURLParam } from "../../website/functions/requestToParam.ts"; -import { AppContext } from "../mod.ts"; +import type { AppContext } from "../mod.ts"; import { MAXIMUM_REQUEST_QUANTITY } from "../utils/getVariations.ts"; -import { GetBuyList, GetProduct } from "../utils/graphql/queries.ts"; import { BuyListQuery, BuyListQueryVariables, GetProductQuery, GetProductQueryVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; +import { GetBuyList, GetProduct } from "../utils/graphql/queries.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; import { parseSlug, toBreadcrumbList, toProduct } from "../utils/transform.ts"; diff --git a/wake/loaders/productList.ts b/wake/loaders/productList.ts index b529f10b6..19c7d367a 100644 --- a/wake/loaders/productList.ts +++ b/wake/loaders/productList.ts @@ -2,7 +2,7 @@ import type { Product } from "../../commerce/types.ts"; import type { AppContext } from "../mod.ts"; import { getVariations } from "../utils/getVariations.ts"; import { GetProducts } from "../utils/graphql/queries.ts"; -import { +import type { GetProductsQuery, GetProductsQueryVariables, ProductFragment, diff --git a/wake/loaders/productListingPage.ts b/wake/loaders/productListingPage.ts index 86174133a..7ac5d3a61 100644 --- a/wake/loaders/productListingPage.ts +++ b/wake/loaders/productListingPage.ts @@ -1,10 +1,10 @@ import type { ProductListingPage } from '../../commerce/types.ts' -import { SortOption } from '../../commerce/types.ts' +import type { SortOption } from '../../commerce/types.ts' import { capitalize } from '../../utils/capitalize.ts' import type { AppContext } from '../mod.ts' import { getVariations, MAXIMUM_REQUEST_QUANTITY } from '../utils/getVariations.ts' import { GetURL, Hotsite, Search } from '../utils/graphql/queries.ts' -import { +import type { GetUrlQuery, GetUrlQueryVariables, HotsiteQuery, @@ -17,7 +17,7 @@ import { } from '../utils/graphql/storefront.graphql.gen.ts' import { parseHeaders } from '../utils/parseHeaders.ts' import { FILTER_PARAM, toBreadcrumbList, toFilters, toProduct } from '../utils/transform.ts' -import { Filters } from './productList.ts' +import type { Filters } from './productList.ts' export type Sort = | 'NAME:ASC' diff --git a/wake/loaders/proxy.ts b/wake/loaders/proxy.ts index 580124ada..464514538 100644 --- a/wake/loaders/proxy.ts +++ b/wake/loaders/proxy.ts @@ -1,5 +1,5 @@ -import { Route } from "../../website/flags/audience.ts"; -import { AppContext } from "../mod.ts"; +import type { Route } from "../../website/flags/audience.ts"; +import type { AppContext } from "../mod.ts"; const PATHS_TO_PROXY = [ ["/checkout", "/checkout"], diff --git a/wake/loaders/recommendations.ts b/wake/loaders/recommendations.ts index 2a7b37431..26ebcabb1 100644 --- a/wake/loaders/recommendations.ts +++ b/wake/loaders/recommendations.ts @@ -1,8 +1,8 @@ import type { Product } from "../../commerce/types.ts"; -import { RequestURLParam } from "../../website/functions/requestToParam.ts"; +import type { RequestURLParam } from "../../website/functions/requestToParam.ts"; import type { AppContext } from "../mod.ts"; import { ProductRecommendations } from "../utils/graphql/queries.ts"; -import { +import type { ProductFragment, ProductRecommendationsQuery, ProductRecommendationsQueryVariables, diff --git a/wake/loaders/selectedAddress.ts b/wake/loaders/selectedAddress.ts deleted file mode 100644 index 94d6bd24e..000000000 --- a/wake/loaders/selectedAddress.ts +++ /dev/null @@ -1,36 +0,0 @@ -import authenticate from 'apps/wake/utils/authenticate.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' -import type { AppContext } from '../mod.ts' -import { GetSelectedAddress } from '../utils/graphql/queries.ts' -import type { - GetSelectedAddressQuery, - GetSelectedAddressQueryVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' - -// https://wakecommerce.readme.io/docs/storefront-api-checkout -export default async function ( - props: object, - req: Request, - ctx: AppContext, -): Promise['selectedAddress']> { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const checkoutId = getCartCookie(req.headers) - - if (!customerAccessToken || !checkoutId) return null - - const { checkout } = await ctx.storefront.query( - { - variables: { - customerAccessToken, - checkoutId, - }, - ...GetSelectedAddress, - }, - { headers }, - ) - - return checkout?.selectedAddress ?? null -} diff --git a/wake/loaders/selectedShipping.ts b/wake/loaders/selectedShipping.ts deleted file mode 100644 index 5f4cdce5d..000000000 --- a/wake/loaders/selectedShipping.ts +++ /dev/null @@ -1,36 +0,0 @@ -import authenticate from 'apps/wake/utils/authenticate.ts' -import { getCartCookie } from 'apps/wake/utils/cart.ts' -import ensureCustomerToken from 'apps/wake/utils/ensureCustomerToken.ts' -import type { AppContext } from '../mod.ts' -import { GetSelectedShipping } from '../utils/graphql/queries.ts' -import type { - GetSelectedShippingQuery, - GetSelectedShippingQueryVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' - -// https://wakecommerce.readme.io/docs/storefront-api-checkout -export default async function ( - props: object, - req: Request, - ctx: AppContext, -): Promise['selectedShipping']> { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const checkoutId = getCartCookie(req.headers) - - if (!customerAccessToken || !checkoutId) return null - - const { checkout } = await ctx.storefront.query( - { - variables: { - customerAccessToken, - checkoutId, - }, - ...GetSelectedShipping, - }, - { headers }, - ) - - return checkout?.selectedShipping ?? null -} diff --git a/wake/loaders/shop.ts b/wake/loaders/shop.ts index 124d0ba5b..57cc61f13 100644 --- a/wake/loaders/shop.ts +++ b/wake/loaders/shop.ts @@ -1,6 +1,6 @@ import type { AppContext } from "../mod.ts"; import { Shop } from "../utils/graphql/queries.ts"; -import { +import type { ShopQuery, ShopQueryVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; diff --git a/wake/loaders/suggestion.ts b/wake/loaders/suggestion.ts index ee63c0d35..9e4ba33cf 100644 --- a/wake/loaders/suggestion.ts +++ b/wake/loaders/suggestion.ts @@ -1,7 +1,7 @@ -import { Suggestion } from "../../commerce/types.ts"; -import { AppContext } from "../mod.ts"; +import type { Suggestion } from "../../commerce/types.ts"; +import type { AppContext } from "../mod.ts"; import { Autocomplete } from "../utils/graphql/queries.ts"; -import { +import type { AutocompleteQuery, AutocompleteQueryVariables, ProductFragment, diff --git a/wake/loaders/user.ts b/wake/loaders/user.ts index 63869bd70..e112031fb 100644 --- a/wake/loaders/user.ts +++ b/wake/loaders/user.ts @@ -1,55 +1,51 @@ -import type { Person } from "../../commerce/types.ts"; -import type { AppContext } from "../mod.ts"; -import authenticate from "../utils/authenticate.ts"; -import { GetUser } from "../utils/graphql/queries.ts"; -import type { - GetUserQuery, - GetUserQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { Person } from '../../commerce/types.ts' +import type { AppContext } from '../mod.ts' +import authenticate from '../utils/authenticate.ts' +import { GetUser } from '../utils/graphql/queries.ts' +import type { GetUserQuery, GetUserQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' /** * @title Wake Integration * @description User loader */ const userLoader = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise => { - const { storefront } = ctx; - - const headers = parseHeaders(req.headers); - - const customerAccessToken = await authenticate(req, ctx); - if (!customerAccessToken) return null; - - try { - const data = await storefront.query( - { - variables: { customerAccessToken }, - ...GetUser, - }, - { - headers, - }, - ); - - const customer = data.customer; - - if (!customer) return null; - - return { - "@id": customer.id!, - email: customer.email!, - givenName: customer.customerName!, - gender: customer?.gender === "Masculino" - ? "https://schema.org/Male" - : "https://schema.org/Female", - }; - } catch (e) { - return null; - } -}; - -export default userLoader; + _props: unknown, + req: Request, + ctx: AppContext, +): Promise<(Person & { cpf: string | null }) | null> => { + const { storefront } = ctx + + const headers = parseHeaders(req.headers) + + const customerAccessToken = await authenticate(req, ctx) + if (!customerAccessToken) return null + + try { + const data = await storefront.query( + { + variables: { customerAccessToken }, + ...GetUser, + }, + { + headers, + }, + ) + + const customer = data.customer + + if (!customer) return null + + return { + '@id': customer.id!, + email: customer.email!, + givenName: customer.customerName!, + gender: customer?.gender === 'Masculino' ? 'https://schema.org/Male' : 'https://schema.org/Female', + cpf: customer.cpf || null, + } + } catch (e) { + return null + } +} + +export default userLoader diff --git a/wake/loaders/userAddresses.ts b/wake/loaders/userAddresses.ts index b8184faf9..9edd73511 100644 --- a/wake/loaders/userAddresses.ts +++ b/wake/loaders/userAddresses.ts @@ -1,34 +1,25 @@ -import type { AppContext } from "../mod.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import type { - GetUserAddressesQuery, - GetUserAddressesQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { GetUserAddresses } from "../utils/graphql/queries.ts"; -import authenticate from "apps/wake/utils/authenticate.ts"; -import ensureCustomerToken from "apps/wake/utils/ensureCustomerToken.ts"; +import type { AppContext } from '../mod.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import type { GetUserAddressesQuery, GetUserAddressesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { GetUserAddresses } from '../utils/graphql/queries.ts' +import authenticate from '../utils/authenticate.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' +import nonNullable from '../utils/nonNullable.ts' // https://wakecommerce.readme.io/docs/storefront-api-customer -export default async function ( - _props: object, - req: Request, - ctx: AppContext, -): Promise["addresses"]> { - const headers = parseHeaders(req.headers); - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); +export default async function (_props: object, req: Request, ctx: AppContext) { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - if (!customerAccessToken) return null; + if (!customerAccessToken) return [] - const { customer } = await ctx.storefront.query< - GetUserAddressesQuery, - GetUserAddressesQueryVariables - >( - { - variables: { customerAccessToken }, - ...GetUserAddresses, - }, - { headers }, - ); + const { customer } = await ctx.storefront.query( + { + variables: { customerAccessToken }, + ...GetUserAddresses, + }, + { headers }, + ) - return customer?.addresses || []; + return (customer?.addresses || []).filter(nonNullable) } diff --git a/wake/loaders/wishlist.ts b/wake/loaders/wishlist.ts index 7c93f0527..e933bb804 100644 --- a/wake/loaders/wishlist.ts +++ b/wake/loaders/wishlist.ts @@ -1,7 +1,7 @@ -import { AppContext } from "../mod.ts"; +import type { AppContext } from "../mod.ts"; import authenticate from "../utils/authenticate.ts"; import { GetWishlist } from "../utils/graphql/queries.ts"; -import { +import type { GetWislistQuery, GetWislistQueryVariables, WishlistReducedProductFragment, diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 420f8d04b..ce4762419 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -7,10 +7,10 @@ import * as $$$$$$$$$1 from "./actions/cart/addItem.ts"; import * as $$$$$$$$$2 from "./actions/cart/addItems.ts"; import * as $$$$$$$$$3 from "./actions/cart/removeCoupon.ts"; import * as $$$$$$$$$4 from "./actions/cart/updateItemQuantity.ts"; -import * as $$$$$$$$$5 from "./actions/createAddress.ts"; -import * as $$$$$$$$$6 from "./actions/createCheckout.ts"; -import * as $$$$$$$$$7 from "./actions/deleteAddress.ts"; -import * as $$$$$$$$$8 from "./actions/finishCheckout.ts"; +import * as $$$$$$$$$5 from "./actions/completeCheckout.ts"; +import * as $$$$$$$$$6 from "./actions/createAddress.ts"; +import * as $$$$$$$$$7 from "./actions/createCheckout.ts"; +import * as $$$$$$$$$8 from "./actions/deleteAddress.ts"; import * as $$$$$$$$$9 from "./actions/login.ts"; import * as $$$$$$$$$10 from "./actions/logout.ts"; import * as $$$$$$$$$11 from "./actions/newsletter/register.ts"; @@ -36,14 +36,12 @@ import * as $$$5 from "./loaders/productList.ts"; import * as $$$6 from "./loaders/productListingPage.ts"; import * as $$$7 from "./loaders/proxy.ts"; import * as $$$8 from "./loaders/recommendations.ts"; -import * as $$$9 from "./loaders/selectedAddress.ts"; -import * as $$$10 from "./loaders/selectedShipping.ts"; -import * as $$$11 from "./loaders/shop.ts"; -import * as $$$12 from "./loaders/suggestion.ts"; -import * as $$$13 from "./loaders/useCustomCheckout.ts"; -import * as $$$14 from "./loaders/user.ts"; -import * as $$$15 from "./loaders/userAddresses.ts"; -import * as $$$16 from "./loaders/wishlist.ts"; +import * as $$$9 from "./loaders/shop.ts"; +import * as $$$10 from "./loaders/suggestion.ts"; +import * as $$$11 from "./loaders/useCustomCheckout.ts"; +import * as $$$12 from "./loaders/user.ts"; +import * as $$$13 from "./loaders/userAddresses.ts"; +import * as $$$14 from "./loaders/wishlist.ts"; const manifest = { "loaders": { @@ -56,14 +54,12 @@ const manifest = { "wake/loaders/productListingPage.ts": $$$6, "wake/loaders/proxy.ts": $$$7, "wake/loaders/recommendations.ts": $$$8, - "wake/loaders/selectedAddress.ts": $$$9, - "wake/loaders/selectedShipping.ts": $$$10, - "wake/loaders/shop.ts": $$$11, - "wake/loaders/suggestion.ts": $$$12, - "wake/loaders/useCustomCheckout.ts": $$$13, - "wake/loaders/user.ts": $$$14, - "wake/loaders/userAddresses.ts": $$$15, - "wake/loaders/wishlist.ts": $$$16, + "wake/loaders/shop.ts": $$$9, + "wake/loaders/suggestion.ts": $$$10, + "wake/loaders/useCustomCheckout.ts": $$$11, + "wake/loaders/user.ts": $$$12, + "wake/loaders/userAddresses.ts": $$$13, + "wake/loaders/wishlist.ts": $$$14, }, "handlers": { "wake/handlers/sitemap.ts": $$$$0, @@ -74,10 +70,10 @@ const manifest = { "wake/actions/cart/addItems.ts": $$$$$$$$$2, "wake/actions/cart/removeCoupon.ts": $$$$$$$$$3, "wake/actions/cart/updateItemQuantity.ts": $$$$$$$$$4, - "wake/actions/createAddress.ts": $$$$$$$$$5, - "wake/actions/createCheckout.ts": $$$$$$$$$6, - "wake/actions/deleteAddress.ts": $$$$$$$$$7, - "wake/actions/finishCheckout.ts": $$$$$$$$$8, + "wake/actions/completeCheckout.ts": $$$$$$$$$5, + "wake/actions/createAddress.ts": $$$$$$$$$6, + "wake/actions/createCheckout.ts": $$$$$$$$$7, + "wake/actions/deleteAddress.ts": $$$$$$$$$8, "wake/actions/login.ts": $$$$$$$$$9, "wake/actions/logout.ts": $$$$$$$$$10, "wake/actions/newsletter/register.ts": $$$$$$$$$11, diff --git a/wake/mod.ts b/wake/mod.ts index 83dd21168..31af8c570 100644 --- a/wake/mod.ts +++ b/wake/mod.ts @@ -3,9 +3,9 @@ import { fetchSafe } from '../utils/fetch.ts' import { createGraphqlClient } from '../utils/graphql.ts' import { createHttpClient } from '../utils/http.ts' import type { Secret } from '../website/loaders/secret.ts' -import manifest, { Manifest } from './manifest.gen.ts' -import { OpenAPI } from './utils/openapi/wake.openapi.gen.ts' -import { CheckoutApi } from './utils/client.ts' +import manifest, { type Manifest } from './manifest.gen.ts' +import type { OpenAPI } from './utils/openapi/wake.openapi.gen.ts' +import type { CheckoutApi } from './utils/client.ts' import { previewFromMarkdown } from '../utils/preview.ts' export type AppContext = FnContext diff --git a/wake/runtime.ts b/wake/runtime.ts index 41d65a98d..338318205 100644 --- a/wake/runtime.ts +++ b/wake/runtime.ts @@ -1,4 +1,4 @@ import { proxy } from "deco/clients/withManifest.ts"; -import { Manifest } from "./manifest.gen.ts"; +import type { Manifest } from "./manifest.gen.ts"; export const invoke = proxy(); diff --git a/wake/utils/authenticate.ts b/wake/utils/authenticate.ts index ab8aef134..6c83ae82f 100644 --- a/wake/utils/authenticate.ts +++ b/wake/utils/authenticate.ts @@ -4,9 +4,9 @@ import { getUserCookie, setUserCookie } from '../utils/user.ts' import type { CustomerAccessTokenRenewMutation, CustomerAccessTokenRenewMutationVariables, -} from 'apps/wake/utils/graphql/storefront.graphql.gen.ts' -import { CustomerAccessTokenRenew } from 'apps/wake/utils/graphql/queries.ts' -import { parseHeaders } from 'apps/wake/utils/parseHeaders.ts' +} from '../utils/graphql/storefront.graphql.gen.ts' +import { CustomerAccessTokenRenew } from '../utils/graphql/queries.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' const authenticate = async (req: Request, ctx: AppContext): Promise => { const { checkoutApi, useCustomCheckout } = ctx diff --git a/wake/utils/cart.ts b/wake/utils/cart.ts index 5d041ae0f..3673ffa6c 100644 --- a/wake/utils/cart.ts +++ b/wake/utils/cart.ts @@ -22,7 +22,7 @@ export const setClientCookie = (value: string) => { let expires = ""; const date = new Date(Date.now() + TEN_DAYS_MS); - expires = "; expires=" + date.toUTCString(); + expires = `; expires=${date.toUTCString()}`; - document.cookie = CART_COOKIE + "=" + (value || "") + expires + "; path=/"; + document.cookie = `${CART_COOKIE}=${value || ""}${expires}; path=/`; }; diff --git a/wake/utils/getVariations.ts b/wake/utils/getVariations.ts index 7c228c9ba..4e5cab570 100644 --- a/wake/utils/getVariations.ts +++ b/wake/utils/getVariations.ts @@ -1,5 +1,5 @@ import { GetProducts } from "../utils/graphql/queries.ts"; -import { +import type { GetProductsQuery, GetProductsQueryVariables, ProductFragment, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 40d035d4e..f39f0cdb2 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1005,6 +1005,7 @@ const ShippingQuote = gql` export const Customer = gql` fragment Customer on Customer { id + cpf email gender customerId @@ -1038,8 +1039,9 @@ export const GetProduct = { export const GetCart = { fragments: [Checkout], - query: gql`query GetCart($checkoutId: String!) { - checkout(checkoutId: $checkoutId) { ...Checkout } + query: + gql`query GetCart($checkoutId: String!, $customerAccessToken: String) { + checkout(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) { ...Checkout } }`, }; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 85c753467..51184d3f7 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -4921,7 +4921,7 @@ export type NewsletterNodeFragment = { email?: string | null, name?: string | nu export type ShippingQuoteFragment = { id?: string | null, type?: string | null, name?: string | null, value: number, deadline: number, shippingQuoteId: any, deliverySchedules?: Array<{ date: any, periods?: Array<{ end?: string | null, id: any, start?: string | null } | null> | null } | null> | null, products?: Array<{ productVariantId: number, value: number } | null> | null }; -export type CustomerFragment = { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null }; +export type CustomerFragment = { id?: string | null, cpf?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null }; export type WishlistReducedProductFragment = { productId?: any | null, productName?: string | null }; @@ -4935,6 +4935,7 @@ export type GetProductQuery = { product?: { mainVariant?: boolean | null, produc export type GetCartQueryVariables = Exact<{ checkoutId: Scalars['String']['input']; + customerAccessToken?: InputMaybe; }>; @@ -5066,7 +5067,7 @@ export type GetUserQueryVariables = Exact<{ }>; -export type GetUserQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; +export type GetUserQuery = { customer?: { id?: string | null, cpf?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; export type GetWislistQueryVariables = Exact<{ customerAccessToken?: InputMaybe; @@ -5188,7 +5189,7 @@ export type GetUserAddressesQueryVariables = Exact<{ }>; -export type GetUserAddressesQuery = { customer?: { id?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; +export type GetUserAddressesQuery = { customer?: { id?: string | null, cpf?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; export type CreateCheckoutMutationVariables = Exact<{ products: Array> | InputMaybe; diff --git a/wake/utils/nonNullable.ts b/wake/utils/nonNullable.ts new file mode 100644 index 000000000..071aad3ad --- /dev/null +++ b/wake/utils/nonNullable.ts @@ -0,0 +1,3 @@ +export default function (val: T | null | undefined): val is T { + return val !== null && val !== undefined +} diff --git a/wake/utils/transform.ts b/wake/utils/transform.ts index cab4b9fb8..968bbd50f 100644 --- a/wake/utils/transform.ts +++ b/wake/utils/transform.ts @@ -1,4 +1,4 @@ -import { +import type { BreadcrumbList, FilterRange, ListItem, From 765121e099d91eccda837387a035e88a2bb7c115 Mon Sep 17 00:00:00 2001 From: Luigi Date: Fri, 21 Jun 2024 10:43:12 -0300 Subject: [PATCH 10/37] ... --- deno.json | 2 +- utils/graphql.ts | 140 +++---- wake/actions/cart/addCoupon.ts | 69 ++-- wake/actions/cart/addItem.ts | 20 +- wake/actions/cart/addItems.ts | 77 ++-- wake/actions/cart/removeCoupon.ts | 67 ++-- wake/actions/cart/updateItemQuantity.ts | 28 +- wake/actions/completeCheckout.ts | 82 ++-- wake/actions/createAddress.ts | 154 +++---- wake/actions/deleteAddress.ts | 162 ++++---- wake/actions/login.ts | 100 ++--- wake/actions/logout.ts | 18 +- wake/actions/newsletter/register.ts | 63 +-- wake/actions/notifyme.ts | 57 +-- wake/actions/review/create.ts | 61 +-- wake/actions/selectAddress.ts | 67 ++-- wake/actions/selectPayment.ts | 56 +-- wake/actions/selectShipping.ts | 43 +- wake/actions/updateAddress.ts | 164 ++++---- wake/actions/wishlist/addProduct.ts | 87 ++-- wake/actions/wishlist/removeProduct.ts | 85 ++-- wake/hooks/context.ts | 227 ++++++----- wake/hooks/useCart.ts | 89 +++-- wake/loaders/calculatePrices.ts | 58 +-- wake/loaders/cart.ts | 86 ++-- wake/loaders/paymentMethods.ts | 36 +- wake/loaders/productListingPage.ts | 509 +++++++++++++----------- wake/loaders/user.ts | 93 +++-- wake/loaders/userAddresses.ts | 42 +- wake/mod.ts | 186 +++++---- wake/utils/authenticate.ts | 125 +++--- wake/utils/ensureCustomerToken.ts | 8 +- wake/utils/graphql/queries.ts | 1 - wake/utils/nonNullable.ts | 2 +- wake/utils/user.ts | 45 ++- 35 files changed, 1629 insertions(+), 1480 deletions(-) diff --git a/deno.json b/deno.json index 91784fede..51450e729 100644 --- a/deno.json +++ b/deno.json @@ -37,7 +37,7 @@ }, "lock": false, "tasks": { - "check": "echo 1", + "check": "deno fmt && deno lint && deno check **/mod.ts", "release": "deno eval 'import \"deco/scripts/release.ts\"'", "start": "deno run -A ./scripts/start.ts", "bundle": "deno eval 'import \"deco/scripts/apps/bundle.ts\"'", diff --git a/utils/graphql.ts b/utils/graphql.ts index 8f1a63b03..826ee63ca 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -1,85 +1,87 @@ // deno-lint-ignore-file no-explicit-any -import { createHttpClient, HttpClientOptions } from './http.ts' +import { createHttpClient, HttpClientOptions } from "./http.ts"; -interface GraphqlClientOptions extends Omit { - endpoint: string +interface GraphqlClientOptions extends Omit { + endpoint: string; } interface GraphQLResponse { - data: D - errors: unknown[] + data: D; + errors: unknown[]; } type GraphQLAPI = Record< - string, - { - response: GraphQLResponse - body: { - query: string - variables?: Record - operationName?: string - } - } -> + string, + { + response: GraphQLResponse; + body: { + query: string; + variables?: Record; + operationName?: string; + }; + } +>; export const gql = (query: TemplateStringsArray, ...fragments: string[]) => - query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`) + query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`); -export const createGraphqlClient = ({ endpoint, ...rest }: GraphqlClientOptions) => { - const url = new URL(endpoint) - const key = `POST ${url.pathname}` +export const createGraphqlClient = ( + { endpoint, ...rest }: GraphqlClientOptions, +) => { + const url = new URL(endpoint); + const key = `POST ${url.pathname}`; - const defaultHeaders = new Headers(rest.headers) - defaultHeaders.set('content-type', 'application/json') - defaultHeaders.set('accept', 'application/json') + const defaultHeaders = new Headers(rest.headers); + defaultHeaders.set("content-type", "application/json"); + defaultHeaders.set("accept", "application/json"); - const http = createHttpClient({ - ...rest, - base: url.origin, - headers: defaultHeaders, - }) + const http = createHttpClient({ + ...rest, + base: url.origin, + headers: defaultHeaders, + }); - return { - query: async ( - { - query = '', - fragments = [], - variables, - operationName, - }: { - query: string - fragments?: string[] - variables?: V - operationName?: string - }, - init?: RequestInit, - ): Promise => { - // console.log(JSON.stringify( - // { - // query: [query, ...fragments].join("\n"), - // variables: variables as any, - // operationName, - // }, - // null, - // 2, - // )); - const { data, errors } = await http[key as any]( - {}, - { - ...init, - body: { - query: [query, ...fragments].join('\n'), - variables: variables as any, - operationName, - }, - }, - ).then(res => res.json()) + return { + query: async ( + { + query = "", + fragments = [], + variables, + operationName, + }: { + query: string; + fragments?: string[]; + variables?: V; + operationName?: string; + }, + init?: RequestInit, + ): Promise => { + // console.log(JSON.stringify( + // { + // query: [query, ...fragments].join("\n"), + // variables: variables as any, + // operationName, + // }, + // null, + // 2, + // )); + const { data, errors } = await http[key as any]( + {}, + { + ...init, + body: { + query: [query, ...fragments].join("\n"), + variables: variables as any, + operationName, + }, + }, + ).then((res) => res.json()); - if (Array.isArray(errors) && errors.length > 0) { - throw errors - } + if (Array.isArray(errors) && errors.length > 0) { + throw errors; + } - return data as D - }, - } -} + return data as D; + }, + }; +}; diff --git a/wake/actions/cart/addCoupon.ts b/wake/actions/cart/addCoupon.ts index 4e79433b4..8bb8be80a 100644 --- a/wake/actions/cart/addCoupon.ts +++ b/wake/actions/cart/addCoupon.ts @@ -1,42 +1,49 @@ -import { HttpError } from '../../../utils/http.ts' -import type { AppContext } from '../../mod.ts' -import { getCartCookie, setCartCookie } from '../../utils/cart.ts' -import { AddCoupon } from '../../utils/graphql/queries.ts' +import { HttpError } from "../../../utils/http.ts"; +import type { AppContext } from "../../mod.ts"; +import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; +import { AddCoupon } from "../../utils/graphql/queries.ts"; import type { - AddCouponMutation, - AddCouponMutationVariables, - CheckoutFragment, -} from '../../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' + AddCouponMutation, + AddCouponMutationVariables, + CheckoutFragment, +} from "../../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; export interface Props { - coupon: string + coupon: string; } -const action = async (props: Props, req: Request, ctx: AppContext): Promise> => { - const { storefront } = ctx - const cartId = getCartCookie(req.headers) - const headers = parseHeaders(req.headers) +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise> => { + const { storefront } = ctx; + const cartId = getCartCookie(req.headers); + const headers = parseHeaders(req.headers); - if (!cartId) { - throw new HttpError(400, 'Missing cart cookie') - } + if (!cartId) { + throw new HttpError(400, "Missing cart cookie"); + } - const data = await storefront.query( - { - variables: { checkoutId: cartId, ...props }, - ...AddCoupon, - }, - { headers }, - ) + const data = await storefront.query< + AddCouponMutation, + AddCouponMutationVariables + >( + { + variables: { checkoutId: cartId, ...props }, + ...AddCoupon, + }, + { headers }, + ); - const checkoutId = data.checkout?.checkoutId + const checkoutId = data.checkout?.checkoutId; - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId) - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId); + } - return data.checkout ?? {} -} + return data.checkout ?? {}; +}; -export default action +export default action; diff --git a/wake/actions/cart/addItem.ts b/wake/actions/cart/addItem.ts index 24f91d096..a6ffb2e93 100644 --- a/wake/actions/cart/addItem.ts +++ b/wake/actions/cart/addItem.ts @@ -1,11 +1,15 @@ -import type { AppContext } from '../../mod.ts' -import type { CheckoutFragment } from '../../utils/graphql/storefront.graphql.gen.ts' -import type { CartItem as Props } from './addItems.ts' +import type { AppContext } from "../../mod.ts"; +import type { CheckoutFragment } from "../../utils/graphql/storefront.graphql.gen.ts"; +import type { CartItem as Props } from "./addItems.ts"; -export type { CartItem as Props } from './addItems.ts' +export type { CartItem as Props } from "./addItems.ts"; -const action = async (props: Props, _req: Request, ctx: AppContext): Promise> => { - return await ctx.invoke.wake.actions.cart.addItems({ products: [props] }) -} +const action = async ( + props: Props, + _req: Request, + ctx: AppContext, +): Promise> => { + return await ctx.invoke.wake.actions.cart.addItems({ products: [props] }); +}; -export default action +export default action; diff --git a/wake/actions/cart/addItems.ts b/wake/actions/cart/addItems.ts index 0a61ccbb9..a3155ff61 100644 --- a/wake/actions/cart/addItems.ts +++ b/wake/actions/cart/addItems.ts @@ -1,49 +1,56 @@ -import { HttpError } from '../../../utils/http.ts' -import type { AppContext } from '../../mod.ts' -import { getCartCookie, setCartCookie } from '../../utils/cart.ts' -import { AddItemToCart } from '../../utils/graphql/queries.ts' +import { HttpError } from "../../../utils/http.ts"; +import type { AppContext } from "../../mod.ts"; +import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; +import { AddItemToCart } from "../../utils/graphql/queries.ts"; import type { - AddItemToCartMutation, - AddItemToCartMutationVariables, - CheckoutFragment, -} from '../../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' + AddItemToCartMutation, + AddItemToCartMutationVariables, + CheckoutFragment, +} from "../../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; export interface CartItem { - productVariantId: number - quantity: number - customization?: { customizationId: number; value: string }[] - subscription?: { subscriptionGroupId: number; recurringTypeId: number } + productVariantId: number; + quantity: number; + customization?: { customizationId: number; value: string }[]; + subscription?: { subscriptionGroupId: number; recurringTypeId: number }; } export interface Props { - products: CartItem[] + products: CartItem[]; } -const action = async (props: Props, req: Request, ctx: AppContext): Promise> => { - const { storefront } = ctx - const cartId = getCartCookie(req.headers) - const headers = parseHeaders(req.headers) +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise> => { + const { storefront } = ctx; + const cartId = getCartCookie(req.headers); + const headers = parseHeaders(req.headers); - if (!cartId) { - throw new HttpError(400, 'Missing cart cookie') - } + if (!cartId) { + throw new HttpError(400, "Missing cart cookie"); + } - const data = await storefront.query( - { - variables: { input: { id: cartId, products: props.products } }, - ...AddItemToCart, - }, - { headers }, - ) + const data = await storefront.query< + AddItemToCartMutation, + AddItemToCartMutationVariables + >( + { + variables: { input: { id: cartId, products: props.products } }, + ...AddItemToCart, + }, + { headers }, + ); - const checkoutId = data.checkout?.checkoutId + const checkoutId = data.checkout?.checkoutId; - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId) - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId); + } - return data.checkout ?? {} -} + return data.checkout ?? {}; +}; -export default action +export default action; diff --git a/wake/actions/cart/removeCoupon.ts b/wake/actions/cart/removeCoupon.ts index c66933d27..1802aae4a 100644 --- a/wake/actions/cart/removeCoupon.ts +++ b/wake/actions/cart/removeCoupon.ts @@ -1,38 +1,45 @@ -import { HttpError } from '../../../utils/http.ts' -import type { AppContext } from '../../mod.ts' -import { getCartCookie, setCartCookie } from '../../utils/cart.ts' -import { RemoveCoupon } from '../../utils/graphql/queries.ts' +import { HttpError } from "../../../utils/http.ts"; +import type { AppContext } from "../../mod.ts"; +import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; +import { RemoveCoupon } from "../../utils/graphql/queries.ts"; import type { - CheckoutFragment, - RemoveCouponMutation, - RemoveCouponMutationVariables, -} from '../../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' + CheckoutFragment, + RemoveCouponMutation, + RemoveCouponMutationVariables, +} from "../../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; -const action = async (_props: unknown, req: Request, ctx: AppContext): Promise> => { - const { storefront } = ctx - const cartId = getCartCookie(req.headers) - const headers = parseHeaders(req.headers) +const action = async ( + _props: unknown, + req: Request, + ctx: AppContext, +): Promise> => { + const { storefront } = ctx; + const cartId = getCartCookie(req.headers); + const headers = parseHeaders(req.headers); - if (!cartId) { - throw new HttpError(400, 'Missing cart cookie') - } + if (!cartId) { + throw new HttpError(400, "Missing cart cookie"); + } - const data = await storefront.query( - { - variables: { checkoutId: cartId }, - ...RemoveCoupon, - }, - { headers }, - ) + const data = await storefront.query< + RemoveCouponMutation, + RemoveCouponMutationVariables + >( + { + variables: { checkoutId: cartId }, + ...RemoveCoupon, + }, + { headers }, + ); - const checkoutId = data.checkout?.checkoutId + const checkoutId = data.checkout?.checkoutId; - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId) - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId); + } - return data.checkout ?? {} -} + return data.checkout ?? {}; +}; -export default action +export default action; diff --git a/wake/actions/cart/updateItemQuantity.ts b/wake/actions/cart/updateItemQuantity.ts index f15f456a6..5bd3d4985 100644 --- a/wake/actions/cart/updateItemQuantity.ts +++ b/wake/actions/cart/updateItemQuantity.ts @@ -1,13 +1,8 @@ import { HttpError } from "../../../utils/http.ts"; -import { AppContext } from "../../mod.ts"; +import type { AppContext } from "../../mod.ts"; import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; -import { - AddItemToCart, - RemoveItemFromCart, -} from "../../utils/graphql/queries.ts"; +import { RemoveItemFromCart } from "../../utils/graphql/queries.ts"; import type { - AddItemToCartMutation, - AddItemToCartMutationVariables, CheckoutFragment, RemoveItemFromCartMutation, RemoveItemFromCartMutationVariables, @@ -30,12 +25,15 @@ const removeFromCart = ( ctx.storefront.query< RemoveItemFromCartMutation, RemoveItemFromCartMutationVariables - >({ - variables: { - input: { id: cartId, products: [props] }, + >( + { + variables: { + input: { id: cartId, products: [props] }, + }, + ...RemoveItemFromCart, }, - ...RemoveItemFromCart, - }, { headers }); + { headers }, + ); const action = async ( props: Props, @@ -56,14 +54,14 @@ const action = async ( * calculate the difference between the current item amount and requested new amount */ - const cart = await ctx.invoke.wake.loaders.cart(props, req); + const cart = await ctx.invoke.wake.loaders.cart({}, req); const item = cart.products?.find((item) => item?.productVariantId === props.productVariantId ); const quantityItem = item?.quantity ?? 0; const quantity = props.quantity - quantityItem; - let checkout; + let checkout: Partial | null = null; if (props.quantity > 0 && quantity > 0) { checkout = await ctx.invoke.wake.actions.cart.addItem({ @@ -77,7 +75,7 @@ const action = async ( ctx, headers, ); - checkout = data.checkout; + checkout = data.checkout ?? null; } const checkoutId = checkout?.checkoutId; diff --git a/wake/actions/completeCheckout.ts b/wake/actions/completeCheckout.ts index add1e6e8d..4b0ec4036 100644 --- a/wake/actions/completeCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -1,52 +1,52 @@ -import authenticate from '../utils/authenticate.ts' -import { getCartCookie } from '../utils/cart.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' -import type { AppContext } from '../mod.ts' -import { CheckoutComplete } from '../utils/graphql/queries.ts' +import authenticate from "../utils/authenticate.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; +import type { AppContext } from "../mod.ts"; +import { CheckoutComplete } from "../utils/graphql/queries.ts"; import type { - CheckoutCompleteMutation, - CheckoutCompleteMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/checkoutcomplete export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const checkoutId = getCartCookie(req.headers) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); + const checkoutId = getCartCookie(req.headers); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - const { checkoutComplete } = await ctx.storefront.query< - CheckoutCompleteMutation, - CheckoutCompleteMutationVariables - >( - { - variables: { - paymentData: new URLSearchParams(props.paymentData).toString(), - comments: props.comments, - customerAccessToken, - checkoutId, - }, - ...CheckoutComplete, - }, - { headers }, - ) + const { checkoutComplete } = await ctx.storefront.query< + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables + >( + { + variables: { + paymentData: new URLSearchParams(props.paymentData).toString(), + comments: props.comments, + customerAccessToken, + checkoutId, + }, + ...CheckoutComplete, + }, + { headers }, + ); - return checkoutComplete + return checkoutComplete; } interface Props { - /** - * Informações adicionais de pagamento - */ - paymentData: Record - /** - * Comentários - */ - comments?: string + /** + * Informações adicionais de pagamento + */ + paymentData: Record; + /** + * Comentários + */ + comments?: string; } diff --git a/wake/actions/createAddress.ts b/wake/actions/createAddress.ts index 7a1c8f5a5..040b655f8 100644 --- a/wake/actions/createAddress.ts +++ b/wake/actions/createAddress.ts @@ -1,88 +1,88 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; import type { - CustomerAddressCreateMutation, - CustomerAddressCreateMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { CustomerAddressCreate } from '../utils/graphql/queries.ts' -import authenticate from '../utils/authenticate.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' + CustomerAddressCreateMutation, + CustomerAddressCreateMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAddressCreate } from "../utils/graphql/queries.ts"; +import authenticate from "../utils/authenticate.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; // https://wakecommerce.readme.io/docs/customeraddresscreate export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - const { customerAddressCreate } = await ctx.storefront.query< - CustomerAddressCreateMutation, - CustomerAddressCreateMutationVariables - >( - { - variables: { - address: props, - customerAccessToken, - }, - ...CustomerAddressCreate, - }, - { headers }, - ) + const { customerAddressCreate } = await ctx.storefront.query< + CustomerAddressCreateMutation, + CustomerAddressCreateMutationVariables + >( + { + variables: { + address: props, + customerAccessToken, + }, + ...CustomerAddressCreate, + }, + { headers }, + ); - return customerAddressCreate + return customerAddressCreate; } interface Props { - /** - * Detalhes do endereço - */ - addressDetails: string - /** - * Número do endereço - */ - addressNumber: string - /** - * Cep do endereço - */ - cep: string - /** - * Cidade do endereço - */ - city: string - /** - * País do endereço, ex. BR - */ - country: string - /** - * E-mail do usuário - */ - email: string - /** - * Nome do usuário - */ - name: string - /** - * Bairro do endereço - */ - neighborhood: string - /** - * Telefone do usuário - */ - phone: string - /** - * Ponto de referência do endereço - */ - referencePoint?: string - /** - * Estado do endereço - */ - state: string - /** - * Rua do endereço - */ - street: string + /** + * Detalhes do endereço + */ + addressDetails: string; + /** + * Número do endereço + */ + addressNumber: string; + /** + * Cep do endereço + */ + cep: string; + /** + * Cidade do endereço + */ + city: string; + /** + * País do endereço, ex. BR + */ + country: string; + /** + * E-mail do usuário + */ + email: string; + /** + * Nome do usuário + */ + name: string; + /** + * Bairro do endereço + */ + neighborhood: string; + /** + * Telefone do usuário + */ + phone: string; + /** + * Ponto de referência do endereço + */ + referencePoint?: string; + /** + * Estado do endereço + */ + state: string; + /** + * Rua do endereço + */ + street: string; } diff --git a/wake/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts index 9bbda9773..47b94b9f9 100644 --- a/wake/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -1,94 +1,94 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; import type { - CustomerAddressRemoveMutation, - CustomerAddressRemoveMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { CustomerAddressRemove } from '../utils/graphql/queries.ts' -import authenticate from '../utils/authenticate.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' + CustomerAddressRemoveMutation, + CustomerAddressRemoveMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAddressRemove } from "../utils/graphql/queries.ts"; +import authenticate from "../utils/authenticate.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; // https://wakecommerce.readme.io/docs/customeraddressremove export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - const { customerAddressRemove } = await ctx.storefront.query< - CustomerAddressRemoveMutation, - CustomerAddressRemoveMutationVariables - >( - { - variables: { - id: props.addressId, - customerAccessToken, - }, - ...CustomerAddressRemove, - }, - { headers }, - ) + const { customerAddressRemove } = await ctx.storefront.query< + CustomerAddressRemoveMutation, + CustomerAddressRemoveMutationVariables + >( + { + variables: { + id: props.addressId, + customerAccessToken, + }, + ...CustomerAddressRemove, + }, + { headers }, + ); - return customerAddressRemove + return customerAddressRemove; } interface Props { + /** + * ID do endereço + */ + addressId: string; + address: { + /** + * Detalhes do endereço + */ + addressDetails?: string; + /** + * Número do endereço + */ + addressNumber?: string; + /** + * Cep do endereço + */ + cep?: string; + /** + * Cidade do endereço + */ + city?: string; + /** + * País do endereço, ex. BR + */ + country?: string; + /** + * E-mail do usuário + */ + email?: string; + /** + * Nome do usuário + */ + name?: string; + /** + * Bairro do endereço + */ + neighborhood?: string; + /** + * Telefone do usuário + */ + phone?: string; + /** + * Ponto de referência do endereço + */ + referencePoint?: string; + /** + * Estado do endereço + */ + state?: string; /** - * ID do endereço + * Rua do endereço */ - addressId: string - address: { - /** - * Detalhes do endereço - */ - addressDetails?: string - /** - * Número do endereço - */ - addressNumber?: string - /** - * Cep do endereço - */ - cep?: string - /** - * Cidade do endereço - */ - city?: string - /** - * País do endereço, ex. BR - */ - country?: string - /** - * E-mail do usuário - */ - email?: string - /** - * Nome do usuário - */ - name?: string - /** - * Bairro do endereço - */ - neighborhood?: string - /** - * Telefone do usuário - */ - phone?: string - /** - * Ponto de referência do endereço - */ - referencePoint?: string - /** - * Estado do endereço - */ - state?: string - /** - * Rua do endereço - */ - street?: string - } + street?: string; + }; } diff --git a/wake/actions/login.ts b/wake/actions/login.ts index 09923cba9..b4ee179f0 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -1,58 +1,64 @@ -import type { AppContext } from '../mod.ts' -import { getCartCookie } from '../utils/cart.ts' -import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import { + CheckoutCustomerAssociate, + CustomerAuthenticatedLogin, +} from "../utils/graphql/queries.ts"; import type { - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' -import { setUserCookie } from '../utils/user.ts' + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { setUserCookie } from "../utils/user.ts"; export default async function ( - props: Props, - req: Request, - { storefront, response }: AppContext, -): Promise { - const headers = parseHeaders(req.headers) + props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); - const { customerAuthenticatedLogin } = await storefront.query< - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables - >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); - if (customerAuthenticatedLogin) { - setUserCookie( - response.headers, - customerAuthenticatedLogin.token as string, - customerAuthenticatedLogin.legacyToken as string, - new Date(customerAuthenticatedLogin.validUntil), - ) + if (customerAuthenticatedLogin) { + setUserCookie( + response.headers, + customerAuthenticatedLogin.token as string, + customerAuthenticatedLogin.legacyToken as string, + new Date(customerAuthenticatedLogin.validUntil), + ); - // associate account to checkout - await storefront.query( - { - variables: { - customerAccessToken: customerAuthenticatedLogin.token as string, - checkoutId: getCartCookie(req.headers), - }, - ...CheckoutCustomerAssociate, - }, - { headers }, - ) - } + // associate account to checkout + await storefront.query< + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables + >( + { + variables: { + customerAccessToken: customerAuthenticatedLogin.token as string, + checkoutId: getCartCookie(req.headers), + }, + ...CheckoutCustomerAssociate, + }, + { headers }, + ); + } - return customerAuthenticatedLogin + return customerAuthenticatedLogin; } export interface Props { - /** - * Email - */ - input: string - /** - * Senha - */ - pass: string + /** + * Email + */ + input: string; + /** + * Senha + */ + pass: string; } diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index 90f8d95e5..2c3f64d41 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -1,9 +1,13 @@ -import type { AppContext } from '../mod.ts' -import { deleteCookie } from 'std/http/cookie.ts' -import { CART_COOKIE } from '../utils/cart.ts' +import type { AppContext } from "../mod.ts"; +import { deleteCookie } from "std/http/cookie.ts"; +import { CART_COOKIE } from "../utils/cart.ts"; -export default function (_props: object, _req: Request, { response }: AppContext) { - deleteCookie(response.headers, 'customerToken') - deleteCookie(response.headers, 'fbits-login') - deleteCookie(response.headers, CART_COOKIE) +export default function ( + _props: object, + _req: Request, + { response }: AppContext, +) { + deleteCookie(response.headers, "customerToken"); + deleteCookie(response.headers, "fbits-login"); + deleteCookie(response.headers, CART_COOKIE); } diff --git a/wake/actions/newsletter/register.ts b/wake/actions/newsletter/register.ts index 7886a2c60..a01d60edc 100644 --- a/wake/actions/newsletter/register.ts +++ b/wake/actions/newsletter/register.ts @@ -1,37 +1,44 @@ -import { HttpError } from '../../../utils/http.ts' -import type { AppContext } from '../../mod.ts' -import { CreateNewsletterRegister } from '../../utils/graphql/queries.ts' +import { HttpError } from "../../../utils/http.ts"; +import type { AppContext } from "../../mod.ts"; +import { CreateNewsletterRegister } from "../../utils/graphql/queries.ts"; import type { - CreateNewsletterRegisterMutation, - CreateNewsletterRegisterMutationVariables, - NewsletterNode, -} from '../../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' + CreateNewsletterRegisterMutation, + CreateNewsletterRegisterMutationVariables, + NewsletterNode, +} from "../../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; export interface Props { - email: string - name: string + email: string; + name: string; } -const action = async (props: Props, req: Request, ctx: AppContext): Promise => { - const { storefront } = ctx - const headers = parseHeaders(req.headers) +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; + const headers = parseHeaders(req.headers); - const data = await storefront.query( - { - variables: { input: { ...props } }, - ...CreateNewsletterRegister, - }, - { - headers, - }, - ) + const data = await storefront.query< + CreateNewsletterRegisterMutation, + CreateNewsletterRegisterMutationVariables + >( + { + variables: { input: { ...props } }, + ...CreateNewsletterRegister, + }, + { + headers, + }, + ); - if (!data.createNewsletterRegister) { - throw new HttpError(400, 'Error on Register') - } + if (!data.createNewsletterRegister) { + throw new HttpError(400, "Error on Register"); + } - return data.createNewsletterRegister -} + return data.createNewsletterRegister; +}; -export default action +export default action; diff --git a/wake/actions/notifyme.ts b/wake/actions/notifyme.ts index 9d697ac99..fd15e4586 100644 --- a/wake/actions/notifyme.ts +++ b/wake/actions/notifyme.ts @@ -1,34 +1,41 @@ -import type { AppContext } from '../mod.ts' -import { ProductRestockAlert } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import { ProductRestockAlert } from "../utils/graphql/queries.ts"; import type { - ProductRestockAlertMutation, - ProductRestockAlertMutationVariables, - RestockAlertNode, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + ProductRestockAlertMutation, + ProductRestockAlertMutationVariables, + RestockAlertNode, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; export interface Props { - email: string - name: string - productVariantId: number + email: string; + name: string; + productVariantId: number; } -const action = async (props: Props, req: Request, ctx: AppContext): Promise => { - const { storefront } = ctx +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; - const headers = parseHeaders(req.headers) + const headers = parseHeaders(req.headers); - const data = await storefront.query( - { - variables: { input: props }, - ...ProductRestockAlert, - }, - { - headers, - }, - ) + const data = await storefront.query< + ProductRestockAlertMutation, + ProductRestockAlertMutationVariables + >( + { + variables: { input: props }, + ...ProductRestockAlert, + }, + { + headers, + }, + ); - return data.productRestockAlert ?? null -} + return data.productRestockAlert ?? null; +}; -export default action +export default action; diff --git a/wake/actions/review/create.ts b/wake/actions/review/create.ts index 0a0baaca4..4e4d03ee4 100644 --- a/wake/actions/review/create.ts +++ b/wake/actions/review/create.ts @@ -1,36 +1,43 @@ -import type { AppContext } from '../../mod.ts' -import { CreateProductReview } from '../../utils/graphql/queries.ts' +import type { AppContext } from "../../mod.ts"; +import { CreateProductReview } from "../../utils/graphql/queries.ts"; import type { - CreateProductReviewMutation, - CreateProductReviewMutationVariables, - Review, -} from '../../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' + CreateProductReviewMutation, + CreateProductReviewMutationVariables, + Review, +} from "../../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; export interface Props { - email: string - name: string - productVariantId: number - rating: number - review: string + email: string; + name: string; + productVariantId: number; + rating: number; + review: string; } -const action = async (props: Props, req: Request, ctx: AppContext): Promise => { - const { storefront } = ctx +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; - const headers = parseHeaders(req.headers) + const headers = parseHeaders(req.headers); - const data = await storefront.query( - { - variables: props, - ...CreateProductReview, - }, - { - headers, - }, - ) + const data = await storefront.query< + CreateProductReviewMutation, + CreateProductReviewMutationVariables + >( + { + variables: props, + ...CreateProductReview, + }, + { + headers, + }, + ); - return data.createProductReview ?? null -} + return data.createProductReview ?? null; +}; -export default action +export default action; diff --git a/wake/actions/selectAddress.ts b/wake/actions/selectAddress.ts index be26dc97d..1d3830956 100644 --- a/wake/actions/selectAddress.ts +++ b/wake/actions/selectAddress.ts @@ -1,42 +1,45 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; import type { - CheckoutAddressAssociateMutation, - CheckoutAddressAssociateMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { CheckoutAddressAssociate } from '../utils/graphql/queries.ts' -import authenticate from '../utils/authenticate.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' -import { getCartCookie } from '../utils/cart.ts' + CheckoutAddressAssociateMutation, + CheckoutAddressAssociateMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CheckoutAddressAssociate } from "../utils/graphql/queries.ts"; +import authenticate from "../utils/authenticate.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; +import { getCartCookie } from "../utils/cart.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutaddressassociate export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const checkoutId = getCartCookie(req.headers) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); + const checkoutId = getCartCookie(req.headers); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - await ctx.storefront.query( - { - variables: { - addressId: props.addressId, - customerAccessToken, - checkoutId, - }, - ...CheckoutAddressAssociate, - }, - { headers }, - ) + await ctx.storefront.query< + CheckoutAddressAssociateMutation, + CheckoutAddressAssociateMutationVariables + >( + { + variables: { + addressId: props.addressId, + customerAccessToken, + checkoutId, + }, + ...CheckoutAddressAssociate, + }, + { headers }, + ); } interface Props { - /** - * ID do endereço - */ - addressId: string + /** + * ID do endereço + */ + addressId: string; } diff --git a/wake/actions/selectPayment.ts b/wake/actions/selectPayment.ts index e1cfd93b4..bba56fcc1 100644 --- a/wake/actions/selectPayment.ts +++ b/wake/actions/selectPayment.ts @@ -1,38 +1,38 @@ -import { getCartCookie } from '../utils/cart.ts' -import type { AppContext } from '../mod.ts' -import { CheckoutSelectPaymentMethod } from '../utils/graphql/queries.ts' +import { getCartCookie } from "../utils/cart.ts"; +import type { AppContext } from "../mod.ts"; +import { CheckoutSelectPaymentMethod } from "../utils/graphql/queries.ts"; import type { - CheckoutSelectPaymentMethodMutation, - CheckoutSelectPaymentMethodMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutSelectPaymentMethodMutation, + CheckoutSelectPaymentMethodMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/checkoutselectpaymentmethod export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const checkoutId = getCartCookie(req.headers) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const checkoutId = getCartCookie(req.headers); - const { checkoutSelectPaymentMethod } = await ctx.storefront.query< - CheckoutSelectPaymentMethodMutation, - CheckoutSelectPaymentMethodMutationVariables - >( - { - variables: { - paymentMethodId: props.paymentMethodId, - checkoutId, - }, - ...CheckoutSelectPaymentMethod, - }, - { headers }, - ) + const { checkoutSelectPaymentMethod } = await ctx.storefront.query< + CheckoutSelectPaymentMethodMutation, + CheckoutSelectPaymentMethodMutationVariables + >( + { + variables: { + paymentMethodId: props.paymentMethodId, + checkoutId, + }, + ...CheckoutSelectPaymentMethod, + }, + { headers }, + ); - return checkoutSelectPaymentMethod + return checkoutSelectPaymentMethod; } interface Props { - paymentMethodId: string + paymentMethodId: string; } diff --git a/wake/actions/selectShipping.ts b/wake/actions/selectShipping.ts index 547e28f17..a457034ae 100644 --- a/wake/actions/selectShipping.ts +++ b/wake/actions/selectShipping.ts @@ -1,29 +1,32 @@ -import { getCartCookie } from '../utils/cart.ts' -import type { AppContext } from '../mod.ts' -import { CheckoutSelectShippingQuote } from '../utils/graphql/queries.ts' +import { getCartCookie } from "../utils/cart.ts"; +import type { AppContext } from "../mod.ts"; +import { CheckoutSelectShippingQuote } from "../utils/graphql/queries.ts"; import type { - CheckoutSelectShippingQuoteMutation, - CheckoutSelectShippingQuoteMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutSelectShippingQuoteMutation, + CheckoutSelectShippingQuoteMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutselectshippingquote export default async function (props: Props, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers) - const checkoutId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers); + const checkoutId = getCartCookie(req.headers); - await ctx.storefront.query( - { - variables: { - shippingQuoteId: props.shippingQuoteId, - checkoutId, - }, - ...CheckoutSelectShippingQuote, - }, - { headers }, - ) + await ctx.storefront.query< + CheckoutSelectShippingQuoteMutation, + CheckoutSelectShippingQuoteMutationVariables + >( + { + variables: { + shippingQuoteId: props.shippingQuoteId, + checkoutId, + }, + ...CheckoutSelectShippingQuote, + }, + { headers }, + ); } interface Props { - shippingQuoteId: string + shippingQuoteId: string; } diff --git a/wake/actions/updateAddress.ts b/wake/actions/updateAddress.ts index d8ec3126e..39747ce77 100644 --- a/wake/actions/updateAddress.ts +++ b/wake/actions/updateAddress.ts @@ -1,95 +1,95 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; import type { - CustomerAddressUpdateMutation, - CustomerAddressUpdateMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { CustomerAddressUpdate } from '../utils/graphql/queries.ts' -import authenticate from '../utils/authenticate.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' + CustomerAddressUpdateMutation, + CustomerAddressUpdateMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAddressUpdate } from "../utils/graphql/queries.ts"; +import authenticate from "../utils/authenticate.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; // https://wakecommerce.readme.io/docs/customeraddressupdate export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - const { customerAddressUpdate } = await ctx.storefront.query< - CustomerAddressUpdateMutation, - CustomerAddressUpdateMutationVariables - >( - { - variables: { - address: props.address, - id: props.addressId, - customerAccessToken, - }, - ...CustomerAddressUpdate, - }, - { headers }, - ) + const { customerAddressUpdate } = await ctx.storefront.query< + CustomerAddressUpdateMutation, + CustomerAddressUpdateMutationVariables + >( + { + variables: { + address: props.address, + id: props.addressId, + customerAccessToken, + }, + ...CustomerAddressUpdate, + }, + { headers }, + ); - return customerAddressUpdate + return customerAddressUpdate; } interface Props { + /** + * ID do endereço + */ + addressId: string; + address: { + /** + * Detalhes do endereço + */ + addressDetails?: string; + /** + * Número do endereço + */ + addressNumber?: string; + /** + * Cep do endereço + */ + cep?: string; + /** + * Cidade do endereço + */ + city?: string; + /** + * País do endereço, ex. BR + */ + country?: string; + /** + * E-mail do usuário + */ + email?: string; + /** + * Nome do usuário + */ + name?: string; + /** + * Bairro do endereço + */ + neighborhood?: string; + /** + * Telefone do usuário + */ + phone?: string; + /** + * Ponto de referência do endereço + */ + referencePoint?: string; + /** + * Estado do endereço + */ + state?: string; /** - * ID do endereço + * Rua do endereço */ - addressId: string - address: { - /** - * Detalhes do endereço - */ - addressDetails?: string - /** - * Número do endereço - */ - addressNumber?: string - /** - * Cep do endereço - */ - cep?: string - /** - * Cidade do endereço - */ - city?: string - /** - * País do endereço, ex. BR - */ - country?: string - /** - * E-mail do usuário - */ - email?: string - /** - * Nome do usuário - */ - name?: string - /** - * Bairro do endereço - */ - neighborhood?: string - /** - * Telefone do usuário - */ - phone?: string - /** - * Ponto de referência do endereço - */ - referencePoint?: string - /** - * Estado do endereço - */ - state?: string - /** - * Rua do endereço - */ - street?: string - } + street?: string; + }; } diff --git a/wake/actions/wishlist/addProduct.ts b/wake/actions/wishlist/addProduct.ts index 6838ba8ac..6d5811dda 100644 --- a/wake/actions/wishlist/addProduct.ts +++ b/wake/actions/wishlist/addProduct.ts @@ -1,50 +1,53 @@ -import type { AppContext } from '../../mod.ts' -import authenticate from '../../utils/authenticate.ts' -import { WishlistAddProduct } from '../../utils/graphql/queries.ts' -import type { ProductFragment } from '../../utils/graphql/storefront.graphql.gen.ts' +import type { AppContext } from "../../mod.ts"; +import authenticate from "../../utils/authenticate.ts"; +import { WishlistAddProduct } from "../../utils/graphql/queries.ts"; +import type { ProductFragment } from "../../utils/graphql/storefront.graphql.gen.ts"; import type { - WishlistAddProductMutation, - WishlistAddProductMutationVariables, - WishlistReducedProductFragment, -} from '../../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' + WishlistAddProductMutation, + WishlistAddProductMutationVariables, + WishlistReducedProductFragment, +} from "../../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; export interface Props { - productId: number + productId: number; } const action = async ( - props: Props, - req: Request, - ctx: AppContext, + props: Props, + req: Request, + ctx: AppContext, ): Promise => { - const { storefront } = ctx - const { productId } = props - const customerAccessToken = await authenticate(req, ctx) - const headers = parseHeaders(req.headers) - - if (!customerAccessToken) return [] - - const data = await storefront.query( - { - variables: { customerAccessToken, productId }, - ...WishlistAddProduct, - }, - { headers }, - ) - - const products = data.wishlistAddProduct - - if (!Array.isArray(products)) { - return null - } - - return products - .filter((node): node is ProductFragment => Boolean(node)) - .map(({ productId, productName }) => ({ - productId, - productName, - })) -} + const { storefront } = ctx; + const { productId } = props; + const customerAccessToken = await authenticate(req, ctx); + const headers = parseHeaders(req.headers); -export default action + if (!customerAccessToken) return []; + + const data = await storefront.query< + WishlistAddProductMutation, + WishlistAddProductMutationVariables + >( + { + variables: { customerAccessToken, productId }, + ...WishlistAddProduct, + }, + { headers }, + ); + + const products = data.wishlistAddProduct; + + if (!Array.isArray(products)) { + return null; + } + + return products + .filter((node): node is ProductFragment => Boolean(node)) + .map(({ productId, productName }) => ({ + productId, + productName, + })); +}; + +export default action; diff --git a/wake/actions/wishlist/removeProduct.ts b/wake/actions/wishlist/removeProduct.ts index be8d17ff9..c1ab95c21 100644 --- a/wake/actions/wishlist/removeProduct.ts +++ b/wake/actions/wishlist/removeProduct.ts @@ -1,53 +1,56 @@ -import type { AppContext } from '../../mod.ts' -import { WishlistRemoveProduct } from '../../utils/graphql/queries.ts' +import type { AppContext } from "../../mod.ts"; +import { WishlistRemoveProduct } from "../../utils/graphql/queries.ts"; import type { - WishlistReducedProductFragment, - WishlistRemoveProductMutation, - WishlistRemoveProductMutationVariables, -} from '../../utils/graphql/storefront.graphql.gen.ts' + WishlistReducedProductFragment, + WishlistRemoveProductMutation, + WishlistRemoveProductMutationVariables, +} from "../../utils/graphql/storefront.graphql.gen.ts"; -import type { ProductFragment } from '../../utils/graphql/storefront.graphql.gen.ts' -import authenticate from '../../utils/authenticate.ts' -import { parseHeaders } from '../../utils/parseHeaders.ts' +import type { ProductFragment } from "../../utils/graphql/storefront.graphql.gen.ts"; +import authenticate from "../../utils/authenticate.ts"; +import { parseHeaders } from "../../utils/parseHeaders.ts"; export interface Props { - productId: number + productId: number; } const action = async ( - props: Props, - req: Request, - ctx: AppContext, + props: Props, + req: Request, + ctx: AppContext, ): Promise => { - const { storefront } = ctx - const { productId } = props - - const headers = parseHeaders(req.headers) - - const customerAccessToken = await authenticate(req, ctx) - - if (!customerAccessToken) return [] + const { storefront } = ctx; + const { productId } = props; - const data = await storefront.query( - { - variables: { customerAccessToken, productId }, - ...WishlistRemoveProduct, - }, - { headers }, - ) + const headers = parseHeaders(req.headers); - const products = data.wishlistRemoveProduct + const customerAccessToken = await authenticate(req, ctx); - if (!Array.isArray(products)) { - return null - } + if (!customerAccessToken) return []; - return products - .filter((node): node is ProductFragment => Boolean(node)) - .map(({ productId, productName }) => ({ - productId, - productName, - })) -} - -export default action + const data = await storefront.query< + WishlistRemoveProductMutation, + WishlistRemoveProductMutationVariables + >( + { + variables: { customerAccessToken, productId }, + ...WishlistRemoveProduct, + }, + { headers }, + ); + + const products = data.wishlistRemoveProduct; + + if (!Array.isArray(products)) { + return null; + } + + return products + .filter((node): node is ProductFragment => Boolean(node)) + .map(({ productId, productName }) => ({ + productId, + productName, + })); +}; + +export default action; diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 69910ff55..9b2c76219 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -1,132 +1,141 @@ -import { IS_BROWSER } from '$fresh/runtime.ts' -import { signal } from '@preact/signals' -import type { Person } from '../../commerce/types.ts' -import { invoke } from '../runtime.ts' -import { setClientCookie } from '../utils/cart.ts' +import { IS_BROWSER } from "$fresh/runtime.ts"; +import { signal } from "@preact/signals"; +import type { Person } from "../../commerce/types.ts"; +import { invoke } from "../runtime.ts"; +import { setClientCookie } from "../utils/cart.ts"; import type { - CheckoutFragment, - ShopQuery, - WishlistReducedProductFragment, -} from '../utils/graphql/storefront.graphql.gen.ts' + CheckoutFragment, + ShopQuery, + WishlistReducedProductFragment, +} from "../utils/graphql/storefront.graphql.gen.ts"; export interface Context { - cart: Partial - user: (Person & { cpf: string | null }) | null - wishlist: WishlistReducedProductFragment[] | null + cart: Partial; + user: (Person & { cpf: string | null }) | null; + wishlist: WishlistReducedProductFragment[] | null; } -const loading = signal(true) +const loading = signal(true); const context = { - cart: signal>({}), - user: signal<(Person & { cpf: string | null }) | null>(null), - wishlist: signal(null), - shop: signal(null), -} - -let queue2 = Promise.resolve() -let abort2 = () => {} - -let queue = Promise.resolve() -let abort = () => {} -const enqueue = (cb: (signal: AbortSignal) => Promise> | Partial) => { - abort() - - loading.value = true - const controller = new AbortController() - - queue = queue.then(async () => { - try { - const { cart, user, wishlist } = await cb(controller.signal) - - if (controller.signal.aborted) { - throw { name: 'AbortError' } - } - - context.cart.value = { ...context.cart.value, ...cart } - context.user.value = user || context.user.value - context.wishlist.value = wishlist || context.wishlist.value - - loading.value = false - } catch (error) { - if (error.name === 'AbortError') return - - console.error(error) - loading.value = false + cart: signal>({}), + user: signal<(Person & { cpf: string | null }) | null>(null), + wishlist: signal(null), + shop: signal(null), +}; + +let queue2 = Promise.resolve(); +let abort2 = () => {}; + +let queue = Promise.resolve(); +let abort = () => {}; +const enqueue = ( + cb: (signal: AbortSignal) => Promise> | Partial, +) => { + abort(); + + loading.value = true; + const controller = new AbortController(); + + queue = queue.then(async () => { + try { + const { cart, user, wishlist } = await cb(controller.signal); + + if (controller.signal.aborted) { + throw { name: "AbortError" }; + } + + context.cart.value = { ...context.cart.value, ...cart }; + context.user.value = user || context.user.value; + context.wishlist.value = wishlist || context.wishlist.value; + + loading.value = false; + } catch (error) { + if (error.name === "AbortError") return; + + console.error(error); + loading.value = false; + } + }); + + abort = () => controller.abort(); + + return queue; +}; + +const enqueue2 = ( + cb: (signal: AbortSignal) => Promise> | Partial, +) => { + abort2(); + + loading.value = true; + const controller = new AbortController(); + + queue2 = queue2.then(async () => { + try { + const { shop } = await cb(controller.signal); + const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout(); + const isLocalhost = window.location.hostname === "localhost"; + + if (!isLocalhost && !useCustomCheckout) { + const url = new URL("/api/carrinho", shop.checkoutUrl); + + const { Id } = await fetch(url, { credentials: "include" }).then((r) => + r.json() + ); + + if (controller.signal.aborted) { + throw { name: "AbortError" }; } - }) - abort = () => controller.abort() - - return queue -} + setClientCookie(Id); + } -const enqueue2 = (cb: (signal: AbortSignal) => Promise> | Partial) => { - abort2() + enqueue(load); - loading.value = true - const controller = new AbortController() + loading.value = false; + } catch (error) { + if (error.name === "AbortError") return; - queue2 = queue2.then(async () => { - try { - const { shop } = await cb(controller.signal) - const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout() - const isLocalhost = window.location.hostname === 'localhost' + console.error(error); + loading.value = false; + } + }); - if (!isLocalhost && !useCustomCheckout) { - const url = new URL('/api/carrinho', shop.checkoutUrl) + abort2 = () => controller.abort(); - const { Id } = await fetch(url, { credentials: 'include' }).then(r => r.json()) - - if (controller.signal.aborted) { - throw { name: 'AbortError' } - } - - setClientCookie(Id) - } - - enqueue(load) - - loading.value = false - } catch (error) { - if (error.name === 'AbortError') return - - console.error(error) - loading.value = false - } - }) - - abort2 = () => controller.abort() - - return queue2 -} + return queue2; +}; const load2 = (signal: AbortSignal) => - invoke( - { - shop: invoke.wake.loaders.shop(), - }, - { signal }, - ) + invoke( + { + shop: invoke.wake.loaders.shop(), + }, + { signal }, + ); const load = (signal: AbortSignal) => - invoke( - { - cart: invoke.wake.loaders.cart(), - user: invoke.wake.loaders.user(), - wishlist: invoke.wake.loaders.wishlist(), - }, - { signal }, - ) + invoke( + { + cart: invoke.wake.loaders.cart(), + user: invoke.wake.loaders.user(), + wishlist: invoke.wake.loaders.wishlist(), + }, + { signal }, + ); if (IS_BROWSER) { - enqueue2(load2) - enqueue(load) + enqueue2(load2); + enqueue(load); - document.addEventListener('visibilitychange', () => document.visibilityState === 'visible' && enqueue(load)) + document.addEventListener( + "visibilitychange", + () => document.visibilityState === "visible" && enqueue(load), + ); } export const state = { - ...context, - loading, - enqueue, -} + ...context, + loading, + enqueue, +}; diff --git a/wake/hooks/useCart.ts b/wake/hooks/useCart.ts index 672001dfb..01f941548 100644 --- a/wake/hooks/useCart.ts +++ b/wake/hooks/useCart.ts @@ -1,53 +1,56 @@ // deno-lint-ignore-file no-explicit-any -import type { AnalyticsItem } from "../../commerce/types.ts"; -import type { Manifest } from "../manifest.gen.ts"; -import { invoke } from "../runtime.ts"; -import type { CheckoutFragment } from "../utils/graphql/storefront.graphql.gen.ts"; -import { type Context, state as storeState } from "./context.ts"; +import type { AnalyticsItem } from '../../commerce/types.ts' +import type { Manifest } from '../manifest.gen.ts' +import { invoke } from '../runtime.ts' +import type { CheckoutFragment } from '../utils/graphql/storefront.graphql.gen.ts' +import { type Context, state as storeState } from './context.ts' -const { cart, loading } = storeState; +const { cart, loading } = storeState export const itemToAnalyticsItem = ( - item: NonNullable[number]> & { - coupon?: string; - }, - index: number, + item: NonNullable[number]> & { + coupon?: string + }, + index: number, ): AnalyticsItem => { - return { - item_id: item.productVariantId, - item_group_id: item.productId, - quantity: item.quantity, - coupon: item.coupon, - price: item.price, - index, - discount: item.price - item.ajustedPrice, - item_name: item.name!, - item_variant: item.productVariantId, - item_brand: item.brand ?? "", - }; -}; + return { + item_id: item.productVariantId, + item_group_id: item.productId, + quantity: item.quantity, + coupon: item.coupon, + price: item.price, + index, + discount: item.price - item.ajustedPrice, + item_name: item.name!, + item_variant: item.productVariantId, + item_brand: item.brand ?? '', + } +} -type EnqueuableActions< - K extends keyof Manifest["actions"], -> = Manifest["actions"][K]["default"] extends - (...args: any[]) => Promise ? K : never; +type EnqueuableActions = Manifest['actions'][K]['default'] extends ( + ...args: any[] +) => Promise + ? K + : never -const enqueue = < - K extends keyof Manifest["actions"], ->(key: EnqueuableActions) => -(props: Parameters[0]) => - storeState.enqueue((signal) => - invoke({ cart: { key, props } } as any, { signal }) as any - ); +const enqueue = + (key: EnqueuableActions) => + (props: Parameters[0]) => + storeState.enqueue(signal => invoke({ cart: { key, props } } as any, { signal }) as any) const state = { - cart, - loading, - addItem: enqueue("wake/actions/cart/addItem.ts"), - addItems: enqueue("wake/actions/cart/addItems.ts"), - updateItem: enqueue("wake/actions/cart/updateItemQuantity.ts"), - addCoupon: enqueue("wake/actions/cart/addCoupon.ts"), - removeCoupon: enqueue("wake/actions/cart/removeCoupon.ts"), -}; + cart, + loading, + updateCart: async () => { + loading.value = true + cart.value = await invoke.wake.loaders.cart() + loading.value = false + }, + addItem: enqueue('wake/actions/cart/addItem.ts'), + addItems: enqueue('wake/actions/cart/addItems.ts'), + updateItem: enqueue('wake/actions/cart/updateItemQuantity.ts'), + addCoupon: enqueue('wake/actions/cart/addCoupon.ts'), + removeCoupon: enqueue('wake/actions/cart/removeCoupon.ts'), +} -export const useCart = () => state; +export const useCart = () => state diff --git a/wake/loaders/calculatePrices.ts b/wake/loaders/calculatePrices.ts index 87535ea0d..a39bda1ac 100644 --- a/wake/loaders/calculatePrices.ts +++ b/wake/loaders/calculatePrices.ts @@ -1,34 +1,40 @@ -import type { AppContext } from '../mod.ts' -import { CalculatePrices } from '../utils/graphql/queries.ts' -import type { CalculatePricesQuery, CalculatePricesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { CalculatePrices } from "../utils/graphql/queries.ts"; +import type { + CalculatePricesQuery, + CalculatePricesQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-calculateprices export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); - const { calculatePrices } = await ctx.storefront.query( - { - variables: { - partnerAccessToken: props.partnerAccessToken ?? '', - products: props.products, - }, - ...CalculatePrices, - }, - { headers }, - ) + const { calculatePrices } = await ctx.storefront.query< + CalculatePricesQuery, + CalculatePricesQueryVariables + >( + { + variables: { + partnerAccessToken: props.partnerAccessToken ?? "", + products: props.products, + }, + ...CalculatePrices, + }, + { headers }, + ); - return calculatePrices || null + return calculatePrices || null; } type Props = { - partnerAccessToken?: string - products: { - productVariantId: number - quantity: number - }[] -} + partnerAccessToken?: string; + products: { + productVariantId: number; + quantity: number; + }[]; +}; diff --git a/wake/loaders/cart.ts b/wake/loaders/cart.ts index 3aa271608..1d5bb606e 100644 --- a/wake/loaders/cart.ts +++ b/wake/loaders/cart.ts @@ -1,52 +1,56 @@ -import authenticate from '../utils/authenticate.ts' -import type { AppContext } from '../mod.ts' -import { getCartCookie, setCartCookie } from '../utils/cart.ts' -import { CreateCart, GetCart } from '../utils/graphql/queries.ts' +import authenticate from "../utils/authenticate.ts"; +import type { AppContext } from "../mod.ts"; +import { getCartCookie, setCartCookie } from "../utils/cart.ts"; +import { CreateCart, GetCart } from "../utils/graphql/queries.ts"; import type { - CheckoutFragment, - CreateCartMutation, - CreateCartMutationVariables, - GetCartQuery, - GetCartQueryVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutFragment, + CreateCartMutation, + CreateCartMutationVariables, + GetCartQuery, + GetCartQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; /** * @title VNDA Integration * @description Cart loader */ -const loader = async (_props: unknown, req: Request, ctx: AppContext): Promise> => { - const { storefront } = ctx - const cartId = getCartCookie(req.headers) - const headers = parseHeaders(req.headers) - const customerAccessToken = await authenticate(req, ctx) +const loader = async ( + _props: unknown, + req: Request, + ctx: AppContext, +): Promise> => { + const { storefront } = ctx; + const cartId = getCartCookie(req.headers); + const headers = parseHeaders(req.headers); + const customerAccessToken = await authenticate(req, ctx); - const data = cartId - ? await storefront.query( - { - variables: { checkoutId: cartId, customerAccessToken }, - ...GetCart, - }, - { - headers, - }, - ) - : await storefront.query( - { - ...CreateCart, - }, - { - headers, - }, - ) + const data = cartId + ? await storefront.query( + { + variables: { checkoutId: cartId, customerAccessToken }, + ...GetCart, + }, + { + headers, + }, + ) + : await storefront.query( + { + ...CreateCart, + }, + { + headers, + }, + ); - const checkoutId = data.checkout?.checkoutId + const checkoutId = data.checkout?.checkoutId; - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId) - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId); + } - return data.checkout ?? {} -} + return data.checkout ?? {}; +}; -export default loader +export default loader; diff --git a/wake/loaders/paymentMethods.ts b/wake/loaders/paymentMethods.ts index c518e68be..3e7d20e61 100644 --- a/wake/loaders/paymentMethods.ts +++ b/wake/loaders/paymentMethods.ts @@ -1,21 +1,27 @@ -import { getCartCookie } from '../utils/cart.ts' -import type { AppContext } from '../mod.ts' -import { PaymentMethods } from '../utils/graphql/queries.ts' -import type { PaymentMethodsQuery, PaymentMethodsQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import { getCartCookie } from "../utils/cart.ts"; +import type { AppContext } from "../mod.ts"; +import { PaymentMethods } from "../utils/graphql/queries.ts"; +import type { + PaymentMethodsQuery, + PaymentMethodsQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/paymentmethods export default async function (_props: object, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers) - const checkoutId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers); + const checkoutId = getCartCookie(req.headers); - const { paymentMethods } = await ctx.storefront.query( - { - variables: { checkoutId }, - ...PaymentMethods, - }, - { headers }, - ) + const { paymentMethods } = await ctx.storefront.query< + PaymentMethodsQuery, + PaymentMethodsQueryVariables + >( + { + variables: { checkoutId }, + ...PaymentMethods, + }, + { headers }, + ); - return paymentMethods?.filter((i): i is NonNullable => !!i) || [] + return paymentMethods?.filter((i): i is NonNullable => !!i) || []; } diff --git a/wake/loaders/productListingPage.ts b/wake/loaders/productListingPage.ts index 7ac5d3a61..db4f53153 100644 --- a/wake/loaders/productListingPage.ts +++ b/wake/loaders/productListingPage.ts @@ -1,261 +1,286 @@ -import type { ProductListingPage } from '../../commerce/types.ts' -import type { SortOption } from '../../commerce/types.ts' -import { capitalize } from '../../utils/capitalize.ts' -import type { AppContext } from '../mod.ts' -import { getVariations, MAXIMUM_REQUEST_QUANTITY } from '../utils/getVariations.ts' -import { GetURL, Hotsite, Search } from '../utils/graphql/queries.ts' +import type { ProductListingPage } from "../../commerce/types.ts"; +import type { SortOption } from "../../commerce/types.ts"; +import { capitalize } from "../../utils/capitalize.ts"; +import type { AppContext } from "../mod.ts"; +import { + getVariations, + MAXIMUM_REQUEST_QUANTITY, +} from "../utils/getVariations.ts"; +import { GetURL, Hotsite, Search } from "../utils/graphql/queries.ts"; import type { - GetUrlQuery, - GetUrlQueryVariables, - HotsiteQuery, - HotsiteQueryVariables, - ProductFragment, - ProductSortKeys, - SearchQuery, - SearchQueryVariables, - SortDirection, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' -import { FILTER_PARAM, toBreadcrumbList, toFilters, toProduct } from '../utils/transform.ts' -import type { Filters } from './productList.ts' + GetUrlQuery, + GetUrlQueryVariables, + HotsiteQuery, + HotsiteQueryVariables, + ProductFragment, + ProductSortKeys, + SearchQuery, + SearchQueryVariables, + SortDirection, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { + FILTER_PARAM, + toBreadcrumbList, + toFilters, + toProduct, +} from "../utils/transform.ts"; +import type { Filters } from "./productList.ts"; export type Sort = - | 'NAME:ASC' - | 'NAME:DESC' - | 'RELEASE_DATE:DESC' - | 'PRICE:ASC' - | 'PRICE:DESC' - | 'DISCOUNT:DESC' - | 'SALES:DESC' + | "NAME:ASC" + | "NAME:DESC" + | "RELEASE_DATE:DESC" + | "PRICE:ASC" + | "PRICE:DESC" + | "DISCOUNT:DESC" + | "SALES:DESC"; export const SORT_OPTIONS: SortOption[] = [ - { value: 'NAME:ASC', label: 'Nome A-Z' }, - { value: 'NAME:DESC', label: 'Nome Z-A' }, - { value: 'RELEASE_DATE:DESC', label: 'Lançamentos' }, - { value: 'PRICE:ASC', label: 'Menores Preços' }, - { value: 'PRICE:DESC', label: 'Maiores Preços' }, - { value: 'DISCOUNT:DESC', label: 'Maiores Descontos' }, - { value: 'SALES:DESC', label: 'Mais Vendidos' }, -] - -type SortValue = `${ProductSortKeys}:${SortDirection}` + { value: "NAME:ASC", label: "Nome A-Z" }, + { value: "NAME:DESC", label: "Nome Z-A" }, + { value: "RELEASE_DATE:DESC", label: "Lançamentos" }, + { value: "PRICE:ASC", label: "Menores Preços" }, + { value: "PRICE:DESC", label: "Maiores Preços" }, + { value: "DISCOUNT:DESC", label: "Maiores Descontos" }, + { value: "SALES:DESC", label: "Mais Vendidos" }, +]; + +type SortValue = `${ProductSortKeys}:${SortDirection}`; export interface Props { - /** - * @title Count - * @description Number of products to display - * @maximum 50 - * @default 12 - */ - limit?: number - - /** @description Types of operations to perform between query terms */ - operation?: 'AND' | 'OR' - - /** - * @ignore - */ - page: number - - /** - * @title Sorting - */ - sort?: Sort - - /** - * @description overides the query term - */ - query?: string - - /** - * @title Only Main Variant - * @description Toggle the return of only main variants or all variations separeted. - */ - onlyMainVariant?: boolean - - filters?: Filters - - /** @description Retrieve variantions for each product. */ - getVariations?: boolean - - /** - * @title Starting page query parameter offset. - * @description Set the starting page offset. Default to 1. - */ - pageOffset?: 0 | 1 - - /** - * @hide true - * @description The URL of the page, used to override URL from request - */ - pageHref?: string + /** + * @title Count + * @description Number of products to display + * @maximum 50 + * @default 12 + */ + limit?: number; + + /** @description Types of operations to perform between query terms */ + operation?: "AND" | "OR"; + + /** + * @ignore + */ + page: number; + + /** + * @title Sorting + */ + sort?: Sort; + + /** + * @description overides the query term + */ + query?: string; + + /** + * @title Only Main Variant + * @description Toggle the return of only main variants or all variations separeted. + */ + onlyMainVariant?: boolean; + + filters?: Filters; + + /** @description Retrieve variantions for each product. */ + getVariations?: boolean; + + /** + * @title Starting page query parameter offset. + * @description Set the starting page offset. Default to 1. + */ + pageOffset?: 0 | 1; + + /** + * @hide true + * @description The URL of the page, used to override URL from request + */ + pageHref?: string; } -const OUTSIDE_ATTRIBUTES_FILTERS = ['precoPor'] +const OUTSIDE_ATTRIBUTES_FILTERS = ["precoPor"]; const filtersFromParams = (searchParams: URLSearchParams) => { - const filters: Array<{ field: string; values: string[] }> = [] + const filters: Array<{ field: string; values: string[] }> = []; - searchParams.getAll(FILTER_PARAM).forEach(value => { - const test = /.*:.*/ - const [field, val] = test.test(value) ? value.split(':') : value.split('__') + searchParams.getAll(FILTER_PARAM).forEach((value) => { + const test = /.*:.*/; + const [field, val] = test.test(value) + ? value.split(":") + : value.split("__"); - if (!OUTSIDE_ATTRIBUTES_FILTERS.includes(field)) { - filters.push({ field, values: [val] }) - } - }) + if (!OUTSIDE_ATTRIBUTES_FILTERS.includes(field)) { + filters.push({ field, values: [val] }); + } + }); - return filters -} + return filters; +}; /** * @title Wake Integration * @description Product Listing Page loader */ -const searchLoader = async (props: Props, req: Request, ctx: AppContext): Promise => { - // get url from params - const url = - new URL(req.url).pathname === '/live/invoke' - ? new URL(props.pageHref || req.headers.get('referer') || req.url) - : new URL(props.pageHref || req.url) - - const { storefront } = ctx - - const headers = parseHeaders(req.headers) - - const limit = Number(url.searchParams.get('tamanho') ?? props.limit ?? 12) - - const filters = filtersFromParams(url.searchParams) ?? props.filters - const sort = - (url.searchParams.get('sort') as SortValue | null) ?? - (url.searchParams.get('ordenacao') as SortValue | null) ?? - props.sort ?? - 'SALES:DESC' - const page = props.page ?? Number(url.searchParams.get('page')) ?? Number(url.searchParams.get('pagina')) ?? 0 - const query = props.query ?? url.searchParams.get('busca') - const operation = props.operation ?? 'AND' - - const [sortKey, sortDirection] = sort.split(':') as [ProductSortKeys, SortDirection] - - const onlyMainVariant = props.onlyMainVariant ?? true - const [minimumPrice, maximumPrice] = - url.searchParams - .getAll('filtro') - ?.find(i => i.startsWith('precoPor')) - ?.split(':')[1] - ?.split(';') - .map(Number) ?? - url.searchParams.get('precoPor')?.split(';').map(Number) ?? - [] - - const offset = page <= 1 ? 0 : (page - 1) * limit - - const urlData = await storefront.query( - { - variables: { - url: url.pathname, - }, - ...GetURL, - }, - { - headers, - }, - ) - - const isHotsite = urlData.uri?.kind === 'HOTSITE' - - const commonParams = { - sortDirection, - sortKey, - filters, - limit: Math.min(limit, MAXIMUM_REQUEST_QUANTITY), - offset, - onlyMainVariant, - minimumPrice, - maximumPrice, - } - - if (!query && !isHotsite) return null - - const data = isHotsite - ? await storefront.query({ - variables: { - ...commonParams, - url: url.pathname, - }, - ...Hotsite, - }) - : await storefront.query({ - variables: { - ...commonParams, - query, - operation, - }, - ...Search, - }) - - const products = data?.result?.productsByOffset?.items ?? [] - - const nextPage = new URLSearchParams(url.searchParams) - const previousPage = new URLSearchParams(url.searchParams) - - const hasNextPage = Boolean( - (data?.result?.productsByOffset?.totalCount ?? 0) / (data?.result?.pageSize ?? limit) > - (data?.result?.productsByOffset?.page ?? 0), - ) - - const hasPreviousPage = page > 1 - - const pageOffset = props.pageOffset ?? 1 - - if (hasNextPage) { - nextPage.set('page', (page + pageOffset + 1).toString()) - } - - if (hasPreviousPage) { - previousPage.set('page', (page + pageOffset - 1).toString()) - } - - const productIDs = products.map(i => i?.productId) - - const variations = props.getVariations ? await getVariations(storefront, productIDs, headers, url) : [] - - const breadcrumb = toBreadcrumbList(data?.result?.breadcrumbs, { - base: url, +const searchLoader = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise => { + // get url from params + const url = new URL(req.url).pathname === "/live/invoke" + ? new URL(props.pageHref || req.headers.get("referer") || req.url) + : new URL(props.pageHref || req.url); + + const { storefront } = ctx; + + const headers = parseHeaders(req.headers); + + const limit = Number(url.searchParams.get("tamanho") ?? props.limit ?? 12); + + const filters = filtersFromParams(url.searchParams) ?? props.filters; + const sort = (url.searchParams.get("sort") as SortValue | null) ?? + (url.searchParams.get("ordenacao") as SortValue | null) ?? + props.sort ?? + "SALES:DESC"; + const page = props.page ?? Number(url.searchParams.get("page")) ?? + Number(url.searchParams.get("pagina")) ?? 0; + const query = props.query ?? url.searchParams.get("busca"); + const operation = props.operation ?? "AND"; + + const [sortKey, sortDirection] = sort.split(":") as [ + ProductSortKeys, + SortDirection, + ]; + + const onlyMainVariant = props.onlyMainVariant ?? true; + const [minimumPrice, maximumPrice] = url.searchParams + .getAll("filtro") + ?.find((i) => i.startsWith("precoPor")) + ?.split(":")[1] + ?.split(";") + .map(Number) ?? + url.searchParams.get("precoPor")?.split(";").map(Number) ?? + []; + + const offset = page <= 1 ? 0 : (page - 1) * limit; + + const urlData = await storefront.query( + { + variables: { + url: url.pathname, + }, + ...GetURL, + }, + { + headers, + }, + ); + + const isHotsite = urlData.uri?.kind === "HOTSITE"; + + const commonParams = { + sortDirection, + sortKey, + filters, + limit: Math.min(limit, MAXIMUM_REQUEST_QUANTITY), + offset, + onlyMainVariant, + minimumPrice, + maximumPrice, + }; + + if (!query && !isHotsite) return null; + + const data = isHotsite + ? await storefront.query({ + variables: { + ...commonParams, + url: url.pathname, + }, + ...Hotsite, }) - - const title = isHotsite - ? (data as HotsiteQuery)?.result?.seo?.find(i => i?.type === 'TITLE')?.content - : capitalize(query || '') - const description = isHotsite - ? (data as HotsiteQuery)?.result?.seo?.find(i => i?.name === 'description')?.content - : capitalize(query || '') - const canonical = new URL(isHotsite ? `/${(data as HotsiteQuery)?.result?.url}` : url, url).href - - return { - '@type': 'ProductListingPage', - filters: toFilters(data?.result?.aggregations, { base: url }), - pageInfo: { - nextPage: hasNextPage ? `?${nextPage}` : undefined, - previousPage: hasPreviousPage ? `?${previousPage}` : undefined, - currentPage: data?.result?.productsByOffset?.page ?? 1, - records: data?.result?.productsByOffset?.totalCount, - recordPerPage: limit, - }, - sortOptions: SORT_OPTIONS, - breadcrumb, - seo: { - description: description || '', - title: title || '', - canonical, - }, - products: products - ?.filter((p): p is ProductFragment => Boolean(p)) - .map(variant => { - const productVariations = variations?.filter(v => v.inProductGroupWithID === variant.productId) - - return toProduct(variant, { base: url }, productVariations) - }), - } -} - -export default searchLoader + : await storefront.query({ + variables: { + ...commonParams, + query, + operation, + }, + ...Search, + }); + + const products = data?.result?.productsByOffset?.items ?? []; + + const nextPage = new URLSearchParams(url.searchParams); + const previousPage = new URLSearchParams(url.searchParams); + + const hasNextPage = Boolean( + (data?.result?.productsByOffset?.totalCount ?? 0) / + (data?.result?.pageSize ?? limit) > + (data?.result?.productsByOffset?.page ?? 0), + ); + + const hasPreviousPage = page > 1; + + const pageOffset = props.pageOffset ?? 1; + + if (hasNextPage) { + nextPage.set("page", (page + pageOffset + 1).toString()); + } + + if (hasPreviousPage) { + previousPage.set("page", (page + pageOffset - 1).toString()); + } + + const productIDs = products.map((i) => i?.productId); + + const variations = props.getVariations + ? await getVariations(storefront, productIDs, headers, url) + : []; + + const breadcrumb = toBreadcrumbList(data?.result?.breadcrumbs, { + base: url, + }); + + const title = isHotsite + ? (data as HotsiteQuery)?.result?.seo?.find((i) => i?.type === "TITLE") + ?.content + : capitalize(query || ""); + const description = isHotsite + ? (data as HotsiteQuery)?.result?.seo?.find((i) => + i?.name === "description" + )?.content + : capitalize(query || ""); + const canonical = + new URL(isHotsite ? `/${(data as HotsiteQuery)?.result?.url}` : url, url) + .href; + + return { + "@type": "ProductListingPage", + filters: toFilters(data?.result?.aggregations, { base: url }), + pageInfo: { + nextPage: hasNextPage ? `?${nextPage}` : undefined, + previousPage: hasPreviousPage ? `?${previousPage}` : undefined, + currentPage: data?.result?.productsByOffset?.page ?? 1, + records: data?.result?.productsByOffset?.totalCount, + recordPerPage: limit, + }, + sortOptions: SORT_OPTIONS, + breadcrumb, + seo: { + description: description || "", + title: title || "", + canonical, + }, + products: products + ?.filter((p): p is ProductFragment => Boolean(p)) + .map((variant) => { + const productVariations = variations?.filter((v) => + v.inProductGroupWithID === variant.productId + ); + + return toProduct(variant, { base: url }, productVariations); + }), + }; +}; + +export default searchLoader; diff --git a/wake/loaders/user.ts b/wake/loaders/user.ts index e112031fb..69c0199ca 100644 --- a/wake/loaders/user.ts +++ b/wake/loaders/user.ts @@ -1,51 +1,56 @@ -import type { Person } from '../../commerce/types.ts' -import type { AppContext } from '../mod.ts' -import authenticate from '../utils/authenticate.ts' -import { GetUser } from '../utils/graphql/queries.ts' -import type { GetUserQuery, GetUserQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { Person } from "../../commerce/types.ts"; +import type { AppContext } from "../mod.ts"; +import authenticate from "../utils/authenticate.ts"; +import { GetUser } from "../utils/graphql/queries.ts"; +import type { + GetUserQuery, + GetUserQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; /** * @title Wake Integration * @description User loader */ const userLoader = async ( - _props: unknown, - req: Request, - ctx: AppContext, + _props: unknown, + req: Request, + ctx: AppContext, ): Promise<(Person & { cpf: string | null }) | null> => { - const { storefront } = ctx - - const headers = parseHeaders(req.headers) - - const customerAccessToken = await authenticate(req, ctx) - if (!customerAccessToken) return null - - try { - const data = await storefront.query( - { - variables: { customerAccessToken }, - ...GetUser, - }, - { - headers, - }, - ) - - const customer = data.customer - - if (!customer) return null - - return { - '@id': customer.id!, - email: customer.email!, - givenName: customer.customerName!, - gender: customer?.gender === 'Masculino' ? 'https://schema.org/Male' : 'https://schema.org/Female', - cpf: customer.cpf || null, - } - } catch (e) { - return null - } -} - -export default userLoader + const { storefront } = ctx; + + const headers = parseHeaders(req.headers); + + const customerAccessToken = await authenticate(req, ctx); + if (!customerAccessToken) return null; + + try { + const data = await storefront.query( + { + variables: { customerAccessToken }, + ...GetUser, + }, + { + headers, + }, + ); + + const customer = data.customer; + + if (!customer) return null; + + return { + "@id": customer.id!, + email: customer.email!, + givenName: customer.customerName!, + gender: customer?.gender === "Masculino" + ? "https://schema.org/Male" + : "https://schema.org/Female", + cpf: customer.cpf || null, + }; + } catch (e) { + return null; + } +}; + +export default userLoader; diff --git a/wake/loaders/userAddresses.ts b/wake/loaders/userAddresses.ts index 9edd73511..306dd6afd 100644 --- a/wake/loaders/userAddresses.ts +++ b/wake/loaders/userAddresses.ts @@ -1,25 +1,31 @@ -import type { AppContext } from '../mod.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' -import type { GetUserAddressesQuery, GetUserAddressesQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { GetUserAddresses } from '../utils/graphql/queries.ts' -import authenticate from '../utils/authenticate.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' -import nonNullable from '../utils/nonNullable.ts' +import type { AppContext } from "../mod.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { + GetUserAddressesQuery, + GetUserAddressesQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { GetUserAddresses } from "../utils/graphql/queries.ts"; +import authenticate from "../utils/authenticate.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; +import nonNullable from "../utils/nonNullable.ts"; // https://wakecommerce.readme.io/docs/storefront-api-customer export default async function (_props: object, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return [] + if (!customerAccessToken) return []; - const { customer } = await ctx.storefront.query( - { - variables: { customerAccessToken }, - ...GetUserAddresses, - }, - { headers }, - ) + const { customer } = await ctx.storefront.query< + GetUserAddressesQuery, + GetUserAddressesQueryVariables + >( + { + variables: { customerAccessToken }, + ...GetUserAddresses, + }, + { headers }, + ); - return (customer?.addresses || []).filter(nonNullable) + return (customer?.addresses || []).filter(nonNullable); } diff --git a/wake/mod.ts b/wake/mod.ts index 31af8c570..1f5eb4ae2 100644 --- a/wake/mod.ts +++ b/wake/mod.ts @@ -1,63 +1,63 @@ -import type { App, FnContext } from 'deco/mod.ts' -import { fetchSafe } from '../utils/fetch.ts' -import { createGraphqlClient } from '../utils/graphql.ts' -import { createHttpClient } from '../utils/http.ts' -import type { Secret } from '../website/loaders/secret.ts' -import manifest, { type Manifest } from './manifest.gen.ts' -import type { OpenAPI } from './utils/openapi/wake.openapi.gen.ts' -import type { CheckoutApi } from './utils/client.ts' -import { previewFromMarkdown } from '../utils/preview.ts' +import type { App, FnContext } from "deco/mod.ts"; +import { fetchSafe } from "../utils/fetch.ts"; +import { createGraphqlClient } from "../utils/graphql.ts"; +import { createHttpClient } from "../utils/http.ts"; +import type { Secret } from "../website/loaders/secret.ts"; +import manifest, { type Manifest } from "./manifest.gen.ts"; +import type { OpenAPI } from "./utils/openapi/wake.openapi.gen.ts"; +import type { CheckoutApi } from "./utils/client.ts"; +import { previewFromMarkdown } from "../utils/preview.ts"; -export type AppContext = FnContext +export type AppContext = FnContext; -export let state: null | State = null +export let state: null | State = null; /** @title Wake */ export interface Props { - /** - * @title Account Name - * @description erploja2 etc - */ - account: string - - /** - * @title Checkout Url - * @description https://checkout.erploja2.com.br - */ - checkoutUrl: string - - /** - * @title Wake Storefront Token - * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token - */ - storefrontToken: Secret - - /** - * @title Wake API token - * @description The token for accessing wake commerce - */ - token?: Secret - - /** - * @description Use Wake as backend platform - */ - platform: 'wake' - - /** - * @title Use Custom Checkout - * @description Use wake headless api for checkout - */ - useCustomCheckout?: boolean + /** + * @title Account Name + * @description erploja2 etc + */ + account: string; + + /** + * @title Checkout Url + * @description https://checkout.erploja2.com.br + */ + checkoutUrl: string; + + /** + * @title Wake Storefront Token + * @description https://wakecommerce.readme.io/docs/storefront-api-criacao-e-autenticacao-do-token + */ + storefrontToken: Secret; + + /** + * @title Wake API token + * @description The token for accessing wake commerce + */ + token?: Secret; + + /** + * @description Use Wake as backend platform + */ + platform: "wake"; + + /** + * @title Use Custom Checkout + * @description Use wake headless api for checkout + */ + useCustomCheckout?: boolean; } export interface State extends Props { - api: ReturnType> - checkoutApi: ReturnType> - storefront: ReturnType - useCustomCheckout: boolean + api: ReturnType>; + checkoutApi: ReturnType>; + storefront: ReturnType; + useCustomCheckout: boolean; } -export const color = 0xb600ee +export const color = 0xb600ee; /** * @title Wake @@ -66,43 +66,53 @@ export const color = 0xb600ee * @logo https://raw.githubusercontent.com/deco-cx/apps/main/wake/logo.png */ export default function App(props: Props): App { - const { token, storefrontToken, account, checkoutUrl, useCustomCheckout = false } = props - - if (!token || !storefrontToken) { - console.warn( - 'Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work', - ) - } - - // HEAD - // - const stringToken = typeof token === 'string' ? token : token?.get?.() ?? '' - const stringStorefrontToken = typeof storefrontToken === 'string' ? storefrontToken : storefrontToken?.get?.() ?? '' - - const api = createHttpClient({ - base: 'https://api.fbits.net', - headers: new Headers({ Authorization: `Basic ${stringToken}` }), - fetcher: fetchSafe, - }) - - //22e714b360b7ef187fe4bdb93385dd0a85686e2a - const storefront = createGraphqlClient({ - endpoint: 'https://storefront-api.fbits.net/graphql', - headers: new Headers({ 'TCS-Access-Token': `${stringStorefrontToken}` }), - fetcher: fetchSafe, - }) - - const checkoutApi = createHttpClient({ - base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, - fetcher: fetchSafe, - }) - - state = { ...props, api, storefront, checkoutApi, useCustomCheckout } - - return { - state, - manifest, - } + const { + token, + storefrontToken, + account, + checkoutUrl, + useCustomCheckout = false, + } = props; + + if (!token || !storefrontToken) { + console.warn( + "Missing tokens for wake app. Add it into the wake app config in deco.cx admin. Some functionalities may not work", + ); + } + + // HEAD + // + const stringToken = typeof token === "string" ? token : token?.get?.() ?? ""; + const stringStorefrontToken = typeof storefrontToken === "string" + ? storefrontToken + : storefrontToken?.get?.() ?? ""; + + const api = createHttpClient({ + base: "https://api.fbits.net", + headers: new Headers({ Authorization: `Basic ${stringToken}` }), + fetcher: fetchSafe, + }); + + //22e714b360b7ef187fe4bdb93385dd0a85686e2a + const storefront = createGraphqlClient({ + endpoint: "https://storefront-api.fbits.net/graphql", + headers: new Headers({ "TCS-Access-Token": `${stringStorefrontToken}` }), + fetcher: fetchSafe, + }); + + const checkoutApi = createHttpClient({ + base: checkoutUrl ?? `https://${account}.checkout.fbits.store`, + fetcher: fetchSafe, + }); + + state = { ...props, api, storefront, checkoutApi, useCustomCheckout }; + + return { + state, + manifest, + }; } -export const preview = previewFromMarkdown(new URL('./README.md', import.meta.url)) +export const preview = previewFromMarkdown( + new URL("./README.md", import.meta.url), +); diff --git a/wake/utils/authenticate.ts b/wake/utils/authenticate.ts index 6c83ae82f..24c2a73fc 100644 --- a/wake/utils/authenticate.ts +++ b/wake/utils/authenticate.ts @@ -1,62 +1,65 @@ -import { getCookies } from 'std/http/cookie.ts' -import type { AppContext } from '../mod.ts' -import { getUserCookie, setUserCookie } from '../utils/user.ts' +import { getCookies } from "std/http/cookie.ts"; +import type { AppContext } from "../mod.ts"; +import { getUserCookie, setUserCookie } from "../utils/user.ts"; import type { - CustomerAccessTokenRenewMutation, - CustomerAccessTokenRenewMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { CustomerAccessTokenRenew } from '../utils/graphql/queries.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' - -const authenticate = async (req: Request, ctx: AppContext): Promise => { - const { checkoutApi, useCustomCheckout } = ctx - - if (useCustomCheckout) { - const headers = parseHeaders(req.headers) - const cookies = getCookies(req.headers) - const customerToken = cookies.customerToken - - if (!customerToken) return null - - const { customerAccessTokenRenew } = await ctx.storefront.query< - CustomerAccessTokenRenewMutation, - CustomerAccessTokenRenewMutationVariables - >( - { - variables: { customerAccessToken: customerToken }, - ...CustomerAccessTokenRenew, - }, - { headers }, - ) - - if (!customerAccessTokenRenew) return null - - const newCustomerToken = customerAccessTokenRenew.token - if (!newCustomerToken) return null - - setUserCookie( - ctx.response.headers, - newCustomerToken, - cookies['fbits-login'], - new Date(customerAccessTokenRenew.validUntil), - ) - return newCustomerToken - } - - const loginCookie = getUserCookie(req.headers) - if (!loginCookie) return null - - if (useCustomCheckout) return loginCookie - - const data = await checkoutApi['GET /api/Login/Get']( - {}, - { - headers: req.headers, - }, - ).then(r => r.json()) - if (!data?.CustomerAccessToken) return null - - return data?.CustomerAccessToken -} - -export default authenticate + CustomerAccessTokenRenewMutation, + CustomerAccessTokenRenewMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { CustomerAccessTokenRenew } from "../utils/graphql/queries.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; + +const authenticate = async ( + req: Request, + ctx: AppContext, +): Promise => { + const { checkoutApi, useCustomCheckout } = ctx; + + if (useCustomCheckout) { + const headers = parseHeaders(req.headers); + const cookies = getCookies(req.headers); + const customerToken = cookies.customerToken; + + if (!customerToken) return null; + + const { customerAccessTokenRenew } = await ctx.storefront.query< + CustomerAccessTokenRenewMutation, + CustomerAccessTokenRenewMutationVariables + >( + { + variables: { customerAccessToken: customerToken }, + ...CustomerAccessTokenRenew, + }, + { headers }, + ); + + if (!customerAccessTokenRenew) return null; + + const newCustomerToken = customerAccessTokenRenew.token; + if (!newCustomerToken) return null; + + setUserCookie( + ctx.response.headers, + newCustomerToken, + cookies["fbits-login"], + new Date(customerAccessTokenRenew.validUntil), + ); + return newCustomerToken; + } + + const loginCookie = getUserCookie(req.headers); + if (!loginCookie) return null; + + if (useCustomCheckout) return loginCookie; + + const data = await checkoutApi["GET /api/Login/Get"]( + {}, + { + headers: req.headers, + }, + ).then((r) => r.json()); + if (!data?.CustomerAccessToken) return null; + + return data?.CustomerAccessToken; +}; + +export default authenticate; diff --git a/wake/utils/ensureCustomerToken.ts b/wake/utils/ensureCustomerToken.ts index fad829d43..5cd3f0bac 100644 --- a/wake/utils/ensureCustomerToken.ts +++ b/wake/utils/ensureCustomerToken.ts @@ -1,7 +1,7 @@ export default function (token: string | null) { - if (!token) { - console.error('No customer access token cookie, are you logged in?') - } + if (!token) { + console.error("No customer access token cookie, are you logged in?"); + } - return token + return token; } diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index f39f0cdb2..d6c5b9afa 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -958,7 +958,6 @@ fragment SingleProduct on SingleProduct { productId } } - `; const RestockAlertNode = gql` diff --git a/wake/utils/nonNullable.ts b/wake/utils/nonNullable.ts index 071aad3ad..f308e0eb2 100644 --- a/wake/utils/nonNullable.ts +++ b/wake/utils/nonNullable.ts @@ -1,3 +1,3 @@ export default function (val: T | null | undefined): val is T { - return val !== null && val !== undefined + return val !== null && val !== undefined; } diff --git a/wake/utils/user.ts b/wake/utils/user.ts index 95e2c201a..77ea90e66 100644 --- a/wake/utils/user.ts +++ b/wake/utils/user.ts @@ -1,25 +1,30 @@ -import { getCookies, setCookie } from 'std/http/cookie.ts' +import { getCookies, setCookie } from "std/http/cookie.ts"; -export const LOGIN_COOKIE = 'fbits-login' +export const LOGIN_COOKIE = "fbits-login"; export const getUserCookie = (headers: Headers): string | undefined => { - const cookies = getCookies(headers) + const cookies = getCookies(headers); - return cookies[LOGIN_COOKIE] -} + return cookies[LOGIN_COOKIE]; +}; -export const setUserCookie = (headers: Headers, token: string, legacyToken: string, expires: Date): void => { - setCookie(headers, { - name: 'customerToken', - path: '/', - value: token, - expires, - }) - setCookie(headers, { - name: 'fbits-login', - path: '/', - value: legacyToken, - // 1 year - expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365), - }) -} +export const setUserCookie = ( + headers: Headers, + token: string, + legacyToken: string, + expires: Date, +): void => { + setCookie(headers, { + name: "customerToken", + path: "/", + value: token, + expires, + }); + setCookie(headers, { + name: "fbits-login", + path: "/", + value: legacyToken, + // 1 year + expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365), + }); +}; From 363b6c309d58c75bf159de4a193cc1d9d75025aa Mon Sep 17 00:00:00 2001 From: Luigi Date: Sun, 23 Jun 2024 22:00:58 -0300 Subject: [PATCH 11/37] ... --- wake/actions/cloneCheckout.ts | 31 +++ wake/actions/completeCheckout.ts | 2 +- wake/actions/selectInstallment.ts | 40 ++++ wake/hooks/context.ts | 227 +++++++++---------- wake/hooks/useCart.ts | 90 ++++---- wake/loaders/user.ts | 96 ++++---- wake/manifest.gen.ts | 80 +++---- wake/utils/graphql/queries.ts | 26 +++ wake/utils/graphql/storefront.graphql.gen.ts | 22 +- 9 files changed, 360 insertions(+), 254 deletions(-) create mode 100644 wake/actions/cloneCheckout.ts create mode 100644 wake/actions/selectInstallment.ts diff --git a/wake/actions/cloneCheckout.ts b/wake/actions/cloneCheckout.ts new file mode 100644 index 000000000..de9eb89ce --- /dev/null +++ b/wake/actions/cloneCheckout.ts @@ -0,0 +1,31 @@ +import type { AppContext } from '../mod.ts' +import { getCartCookie, setCartCookie } from '../utils/cart.ts' +import { CheckoutClone } from '../utils/graphql/queries.ts' +import type { CheckoutCloneMutation, CheckoutCloneMutationVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkoutclone +export default async function (props: object, req: Request, ctx: AppContext) { + const headers = parseHeaders(req.headers) + const checkoutId = getCartCookie(req.headers) + + if (!checkoutId) return null + + const { checkoutClone } = await ctx.storefront.query( + { + variables: { + checkoutId, + }, + ...CheckoutClone, + }, + { headers }, + ) + + const clonedCheckoutId = checkoutClone?.checkoutId + + if (!clonedCheckoutId) { + throw new Error('Could not clone checkout') + } + + setCartCookie(ctx.response.headers, clonedCheckoutId) +} diff --git a/wake/actions/completeCheckout.ts b/wake/actions/completeCheckout.ts index 4b0ec4036..3b5095cf7 100644 --- a/wake/actions/completeCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -44,7 +44,7 @@ interface Props { /** * Informações adicionais de pagamento */ - paymentData: Record; + paymentData?: Record; /** * Comentários */ diff --git a/wake/actions/selectInstallment.ts b/wake/actions/selectInstallment.ts new file mode 100644 index 000000000..561bc58d9 --- /dev/null +++ b/wake/actions/selectInstallment.ts @@ -0,0 +1,40 @@ +import type { AppContext } from '../mod.ts' +import { getCartCookie } from '../utils/cart.ts' +import { CheckoutSelectInstallment } from '../utils/graphql/queries.ts' +import type { + CheckoutSelectInstallmentMutation, + CheckoutSelectInstallmentMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/checkoutselectinstallment +export default async function ( + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const checkoutId = getCartCookie(req.headers) + + const { checkoutSelectInstallment } = await ctx.storefront.query< + CheckoutSelectInstallmentMutation, + CheckoutSelectInstallmentMutationVariables + >( + { + variables: { + installmentNumber: props.installmentNumber, + selectedPaymentMethodId: props.selectedPaymentMethodId, + checkoutId, + }, + ...CheckoutSelectInstallment, + }, + { headers }, + ) + + return checkoutSelectInstallment +} + +interface Props { + installmentNumber: number + selectedPaymentMethodId: string +} diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 9b2c76219..83128d1e5 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -1,141 +1,132 @@ -import { IS_BROWSER } from "$fresh/runtime.ts"; -import { signal } from "@preact/signals"; -import type { Person } from "../../commerce/types.ts"; -import { invoke } from "../runtime.ts"; -import { setClientCookie } from "../utils/cart.ts"; +import { IS_BROWSER } from '$fresh/runtime.ts' +import { signal } from '@preact/signals' +import type { Person } from '../../commerce/types.ts' +import { invoke } from '../runtime.ts' +import { setClientCookie } from '../utils/cart.ts' import type { - CheckoutFragment, - ShopQuery, - WishlistReducedProductFragment, -} from "../utils/graphql/storefront.graphql.gen.ts"; + CheckoutFragment, + ShopQuery, + WishlistReducedProductFragment, +} from '../utils/graphql/storefront.graphql.gen.ts' export interface Context { - cart: Partial; - user: (Person & { cpf: string | null }) | null; - wishlist: WishlistReducedProductFragment[] | null; + cart: Partial + user: (Person & { cpf: string | null }) | null + wishlist: WishlistReducedProductFragment[] | null } -const loading = signal(true); +const loading = signal(true) const context = { - cart: signal>({}), - user: signal<(Person & { cpf: string | null }) | null>(null), - wishlist: signal(null), - shop: signal(null), -}; - -let queue2 = Promise.resolve(); -let abort2 = () => {}; - -let queue = Promise.resolve(); -let abort = () => {}; -const enqueue = ( - cb: (signal: AbortSignal) => Promise> | Partial, -) => { - abort(); - - loading.value = true; - const controller = new AbortController(); - - queue = queue.then(async () => { - try { - const { cart, user, wishlist } = await cb(controller.signal); - - if (controller.signal.aborted) { - throw { name: "AbortError" }; - } - - context.cart.value = { ...context.cart.value, ...cart }; - context.user.value = user || context.user.value; - context.wishlist.value = wishlist || context.wishlist.value; - - loading.value = false; - } catch (error) { - if (error.name === "AbortError") return; - - console.error(error); - loading.value = false; - } - }); - - abort = () => controller.abort(); - - return queue; -}; - -const enqueue2 = ( - cb: (signal: AbortSignal) => Promise> | Partial, -) => { - abort2(); - - loading.value = true; - const controller = new AbortController(); - - queue2 = queue2.then(async () => { - try { - const { shop } = await cb(controller.signal); - const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout(); - const isLocalhost = window.location.hostname === "localhost"; - - if (!isLocalhost && !useCustomCheckout) { - const url = new URL("/api/carrinho", shop.checkoutUrl); - - const { Id } = await fetch(url, { credentials: "include" }).then((r) => - r.json() - ); - - if (controller.signal.aborted) { - throw { name: "AbortError" }; + cart: signal>({}), + user: signal<(Person & { cpf: string | null; phoneNumber: string | null }) | null>(null), + wishlist: signal(null), + shop: signal(null), +} + +let queue2 = Promise.resolve() +let abort2 = () => {} + +let queue = Promise.resolve() +let abort = () => {} +const enqueue = (cb: (signal: AbortSignal) => Promise> | Partial) => { + abort() + + loading.value = true + const controller = new AbortController() + + queue = queue.then(async () => { + try { + const { cart, user, wishlist } = await cb(controller.signal) + + if (controller.signal.aborted) { + throw { name: 'AbortError' } + } + + context.cart.value = { ...context.cart.value, ...cart } + context.user.value = user || context.user.value + context.wishlist.value = wishlist || context.wishlist.value + + loading.value = false + } catch (error) { + if (error.name === 'AbortError') return + + console.error(error) + loading.value = false } + }) - setClientCookie(Id); - } + abort = () => controller.abort() + + return queue +} - enqueue(load); +const enqueue2 = (cb: (signal: AbortSignal) => Promise> | Partial) => { + abort2() - loading.value = false; - } catch (error) { - if (error.name === "AbortError") return; + loading.value = true + const controller = new AbortController() - console.error(error); - loading.value = false; - } - }); + queue2 = queue2.then(async () => { + try { + const { shop } = await cb(controller.signal) + const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout() + const isLocalhost = window.location.hostname === 'localhost' - abort2 = () => controller.abort(); + if (!isLocalhost && !useCustomCheckout) { + const url = new URL('/api/carrinho', shop.checkoutUrl) - return queue2; -}; + const { Id } = await fetch(url, { credentials: 'include' }).then(r => r.json()) + + if (controller.signal.aborted) { + throw { name: 'AbortError' } + } + + setClientCookie(Id) + } + + enqueue(load) + + loading.value = false + } catch (error) { + if (error.name === 'AbortError') return + + console.error(error) + loading.value = false + } + }) + + abort2 = () => controller.abort() + + return queue2 +} const load2 = (signal: AbortSignal) => - invoke( - { - shop: invoke.wake.loaders.shop(), - }, - { signal }, - ); + invoke( + { + shop: invoke.wake.loaders.shop(), + }, + { signal }, + ) const load = (signal: AbortSignal) => - invoke( - { - cart: invoke.wake.loaders.cart(), - user: invoke.wake.loaders.user(), - wishlist: invoke.wake.loaders.wishlist(), - }, - { signal }, - ); + invoke( + { + cart: invoke.wake.loaders.cart(), + user: invoke.wake.loaders.user(), + wishlist: invoke.wake.loaders.wishlist(), + }, + { signal }, + ) if (IS_BROWSER) { - enqueue2(load2); - enqueue(load); + enqueue2(load2) + enqueue(load) - document.addEventListener( - "visibilitychange", - () => document.visibilityState === "visible" && enqueue(load), - ); + document.addEventListener('visibilitychange', () => document.visibilityState === 'visible' && enqueue(load)) } export const state = { - ...context, - loading, - enqueue, -}; + ...context, + loading, + enqueue, +} diff --git a/wake/hooks/useCart.ts b/wake/hooks/useCart.ts index 01f941548..a279e9aa9 100644 --- a/wake/hooks/useCart.ts +++ b/wake/hooks/useCart.ts @@ -1,56 +1,58 @@ // deno-lint-ignore-file no-explicit-any -import type { AnalyticsItem } from '../../commerce/types.ts' -import type { Manifest } from '../manifest.gen.ts' -import { invoke } from '../runtime.ts' -import type { CheckoutFragment } from '../utils/graphql/storefront.graphql.gen.ts' -import { type Context, state as storeState } from './context.ts' +import type { AnalyticsItem } from "../../commerce/types.ts"; +import type { Manifest } from "../manifest.gen.ts"; +import { invoke } from "../runtime.ts"; +import type { CheckoutFragment } from "../utils/graphql/storefront.graphql.gen.ts"; +import { type Context, state as storeState } from "./context.ts"; -const { cart, loading } = storeState +const { cart, loading } = storeState; export const itemToAnalyticsItem = ( - item: NonNullable[number]> & { - coupon?: string - }, - index: number, + item: NonNullable[number]> & { + coupon?: string; + }, + index: number, ): AnalyticsItem => { - return { - item_id: item.productVariantId, - item_group_id: item.productId, - quantity: item.quantity, - coupon: item.coupon, - price: item.price, - index, - discount: item.price - item.ajustedPrice, - item_name: item.name!, - item_variant: item.productVariantId, - item_brand: item.brand ?? '', - } -} + return { + item_id: item.productVariantId, + item_group_id: item.productId, + quantity: item.quantity, + coupon: item.coupon, + price: item.price, + index, + discount: item.price - item.ajustedPrice, + item_name: item.name!, + item_variant: item.productVariantId, + item_brand: item.brand ?? "", + }; +}; -type EnqueuableActions = Manifest['actions'][K]['default'] extends ( +type EnqueuableActions = + Manifest["actions"][K]["default"] extends ( ...args: any[] -) => Promise - ? K - : never + ) => Promise ? K + : never; const enqueue = - (key: EnqueuableActions) => - (props: Parameters[0]) => - storeState.enqueue(signal => invoke({ cart: { key, props } } as any, { signal }) as any) + (key: EnqueuableActions) => + (props: Parameters[0]) => + storeState.enqueue((signal) => + invoke({ cart: { key, props } } as any, { signal }) as any + ); const state = { - cart, - loading, - updateCart: async () => { - loading.value = true - cart.value = await invoke.wake.loaders.cart() - loading.value = false - }, - addItem: enqueue('wake/actions/cart/addItem.ts'), - addItems: enqueue('wake/actions/cart/addItems.ts'), - updateItem: enqueue('wake/actions/cart/updateItemQuantity.ts'), - addCoupon: enqueue('wake/actions/cart/addCoupon.ts'), - removeCoupon: enqueue('wake/actions/cart/removeCoupon.ts'), -} + cart, + loading, + updateCart: async () => { + loading.value = true; + cart.value = await invoke.wake.loaders.cart(); + loading.value = false; + }, + addItem: enqueue("wake/actions/cart/addItem.ts"), + addItems: enqueue("wake/actions/cart/addItems.ts"), + updateItem: enqueue("wake/actions/cart/updateItemQuantity.ts"), + addCoupon: enqueue("wake/actions/cart/addCoupon.ts"), + removeCoupon: enqueue("wake/actions/cart/removeCoupon.ts"), +}; -export const useCart = () => state +export const useCart = () => state; diff --git a/wake/loaders/user.ts b/wake/loaders/user.ts index 69c0199ca..17c186dc0 100644 --- a/wake/loaders/user.ts +++ b/wake/loaders/user.ts @@ -1,56 +1,52 @@ -import type { Person } from "../../commerce/types.ts"; -import type { AppContext } from "../mod.ts"; -import authenticate from "../utils/authenticate.ts"; -import { GetUser } from "../utils/graphql/queries.ts"; -import type { - GetUserQuery, - GetUserQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { Person } from '../../commerce/types.ts' +import type { AppContext } from '../mod.ts' +import authenticate from '../utils/authenticate.ts' +import { GetUser } from '../utils/graphql/queries.ts' +import type { GetUserQuery, GetUserQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' /** * @title Wake Integration * @description User loader */ const userLoader = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise<(Person & { cpf: string | null }) | null> => { - const { storefront } = ctx; - - const headers = parseHeaders(req.headers); - - const customerAccessToken = await authenticate(req, ctx); - if (!customerAccessToken) return null; - - try { - const data = await storefront.query( - { - variables: { customerAccessToken }, - ...GetUser, - }, - { - headers, - }, - ); - - const customer = data.customer; - - if (!customer) return null; - - return { - "@id": customer.id!, - email: customer.email!, - givenName: customer.customerName!, - gender: customer?.gender === "Masculino" - ? "https://schema.org/Male" - : "https://schema.org/Female", - cpf: customer.cpf || null, - }; - } catch (e) { - return null; - } -}; - -export default userLoader; + _props: unknown, + req: Request, + ctx: AppContext, +): Promise<(Person & { cpf: string | null; phoneNumber: string | null }) | null> => { + const { storefront } = ctx + + const headers = parseHeaders(req.headers) + + const customerAccessToken = await authenticate(req, ctx) + if (!customerAccessToken) return null + + try { + const data = await storefront.query( + { + variables: { customerAccessToken }, + ...GetUser, + }, + { + headers, + }, + ) + + const customer = data.customer + + if (!customer) return null + + return { + '@id': customer.id!, + email: customer.email!, + givenName: customer.customerName!, + gender: customer?.gender === 'Masculino' ? 'https://schema.org/Male' : 'https://schema.org/Female', + cpf: customer.cpf || null, + phoneNumber: customer.phoneNumber || null, + } + } catch (e) { + return null + } +} + +export default userLoader diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index ce4762419..ff2291281 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -7,25 +7,27 @@ import * as $$$$$$$$$1 from "./actions/cart/addItem.ts"; import * as $$$$$$$$$2 from "./actions/cart/addItems.ts"; import * as $$$$$$$$$3 from "./actions/cart/removeCoupon.ts"; import * as $$$$$$$$$4 from "./actions/cart/updateItemQuantity.ts"; -import * as $$$$$$$$$5 from "./actions/completeCheckout.ts"; -import * as $$$$$$$$$6 from "./actions/createAddress.ts"; -import * as $$$$$$$$$7 from "./actions/createCheckout.ts"; -import * as $$$$$$$$$8 from "./actions/deleteAddress.ts"; -import * as $$$$$$$$$9 from "./actions/login.ts"; -import * as $$$$$$$$$10 from "./actions/logout.ts"; -import * as $$$$$$$$$11 from "./actions/newsletter/register.ts"; -import * as $$$$$$$$$12 from "./actions/notifyme.ts"; -import * as $$$$$$$$$13 from "./actions/review/create.ts"; -import * as $$$$$$$$$14 from "./actions/selectAddress.ts"; -import * as $$$$$$$$$15 from "./actions/selectPayment.ts"; -import * as $$$$$$$$$16 from "./actions/selectShipping.ts"; -import * as $$$$$$$$$17 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$18 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$19 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$20 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$21 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$22 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$23 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$5 from "./actions/cloneCheckout.ts"; +import * as $$$$$$$$$6 from "./actions/completeCheckout.ts"; +import * as $$$$$$$$$7 from "./actions/createAddress.ts"; +import * as $$$$$$$$$8 from "./actions/createCheckout.ts"; +import * as $$$$$$$$$9 from "./actions/deleteAddress.ts"; +import * as $$$$$$$$$10 from "./actions/login.ts"; +import * as $$$$$$$$$11 from "./actions/logout.ts"; +import * as $$$$$$$$$12 from "./actions/newsletter/register.ts"; +import * as $$$$$$$$$13 from "./actions/notifyme.ts"; +import * as $$$$$$$$$14 from "./actions/review/create.ts"; +import * as $$$$$$$$$15 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$16 from "./actions/selectInstallment.ts"; +import * as $$$$$$$$$17 from "./actions/selectPayment.ts"; +import * as $$$$$$$$$18 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$19 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$20 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$21 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$22 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$23 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$24 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$25 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/calculatePrices.ts"; import * as $$$1 from "./loaders/cart.ts"; @@ -70,25 +72,27 @@ const manifest = { "wake/actions/cart/addItems.ts": $$$$$$$$$2, "wake/actions/cart/removeCoupon.ts": $$$$$$$$$3, "wake/actions/cart/updateItemQuantity.ts": $$$$$$$$$4, - "wake/actions/completeCheckout.ts": $$$$$$$$$5, - "wake/actions/createAddress.ts": $$$$$$$$$6, - "wake/actions/createCheckout.ts": $$$$$$$$$7, - "wake/actions/deleteAddress.ts": $$$$$$$$$8, - "wake/actions/login.ts": $$$$$$$$$9, - "wake/actions/logout.ts": $$$$$$$$$10, - "wake/actions/newsletter/register.ts": $$$$$$$$$11, - "wake/actions/notifyme.ts": $$$$$$$$$12, - "wake/actions/review/create.ts": $$$$$$$$$13, - "wake/actions/selectAddress.ts": $$$$$$$$$14, - "wake/actions/selectPayment.ts": $$$$$$$$$15, - "wake/actions/selectShipping.ts": $$$$$$$$$16, - "wake/actions/shippingSimulation.ts": $$$$$$$$$17, - "wake/actions/signupCompany.ts": $$$$$$$$$18, - "wake/actions/signupPerson.ts": $$$$$$$$$19, - "wake/actions/submmitForm.ts": $$$$$$$$$20, - "wake/actions/updateAddress.ts": $$$$$$$$$21, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$22, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$23, + "wake/actions/cloneCheckout.ts": $$$$$$$$$5, + "wake/actions/completeCheckout.ts": $$$$$$$$$6, + "wake/actions/createAddress.ts": $$$$$$$$$7, + "wake/actions/createCheckout.ts": $$$$$$$$$8, + "wake/actions/deleteAddress.ts": $$$$$$$$$9, + "wake/actions/login.ts": $$$$$$$$$10, + "wake/actions/logout.ts": $$$$$$$$$11, + "wake/actions/newsletter/register.ts": $$$$$$$$$12, + "wake/actions/notifyme.ts": $$$$$$$$$13, + "wake/actions/review/create.ts": $$$$$$$$$14, + "wake/actions/selectAddress.ts": $$$$$$$$$15, + "wake/actions/selectInstallment.ts": $$$$$$$$$16, + "wake/actions/selectPayment.ts": $$$$$$$$$17, + "wake/actions/selectShipping.ts": $$$$$$$$$18, + "wake/actions/shippingSimulation.ts": $$$$$$$$$19, + "wake/actions/signupCompany.ts": $$$$$$$$$20, + "wake/actions/signupPerson.ts": $$$$$$$$$21, + "wake/actions/submmitForm.ts": $$$$$$$$$22, + "wake/actions/updateAddress.ts": $$$$$$$$$23, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$24, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$25, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index d6c5b9afa..0288b0d5a 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1005,6 +1005,7 @@ export const Customer = gql` fragment Customer on Customer { id cpf + phoneNumber email gender customerId @@ -1684,3 +1685,28 @@ export const CalculatePrices = { } }`, }; + +export const CheckoutSelectInstallment = { + fragments: [Checkout], + query: gql`mutation checkoutSelectInstallment( + $checkoutId: Uuid! + $selectedPaymentMethodId: Uuid! + $installmentNumber: Int! + ) { + checkoutSelectInstallment( + checkoutId: $checkoutId + selectedPaymentMethodId: $selectedPaymentMethodId + installmentNumber: $installmentNumber + ) { + ...Checkout + } + }`, +}; + +export const CheckoutClone = { + query: gql`mutation checkoutClone($checkoutId: Uuid!) { + checkoutClone(checkoutId: $checkoutId) { + checkoutId + } + }`, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 51184d3f7..48cfa70c4 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -4921,7 +4921,7 @@ export type NewsletterNodeFragment = { email?: string | null, name?: string | nu export type ShippingQuoteFragment = { id?: string | null, type?: string | null, name?: string | null, value: number, deadline: number, shippingQuoteId: any, deliverySchedules?: Array<{ date: any, periods?: Array<{ end?: string | null, id: any, start?: string | null } | null> | null } | null> | null, products?: Array<{ productVariantId: number, value: number } | null> | null }; -export type CustomerFragment = { id?: string | null, cpf?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null }; +export type CustomerFragment = { id?: string | null, cpf?: string | null, phoneNumber?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null }; export type WishlistReducedProductFragment = { productId?: any | null, productName?: string | null }; @@ -5067,7 +5067,7 @@ export type GetUserQueryVariables = Exact<{ }>; -export type GetUserQuery = { customer?: { id?: string | null, cpf?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; +export type GetUserQuery = { customer?: { id?: string | null, cpf?: string | null, phoneNumber?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; export type GetWislistQueryVariables = Exact<{ customerAccessToken?: InputMaybe; @@ -5189,7 +5189,7 @@ export type GetUserAddressesQueryVariables = Exact<{ }>; -export type GetUserAddressesQuery = { customer?: { id?: string | null, cpf?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; +export type GetUserAddressesQuery = { customer?: { id?: string | null, cpf?: string | null, phoneNumber?: string | null, email?: string | null, gender?: string | null, customerId: any, companyName?: string | null, customerName?: string | null, customerType?: string | null, responsibleName?: string | null, addresses?: Array<{ address?: string | null, address2?: string | null, addressDetails?: string | null, addressNumber?: string | null, cep?: string | null, city?: string | null, country?: string | null, email?: string | null, id?: string | null, name?: string | null, neighborhood?: string | null, phone?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null> | null, informationGroups?: Array<{ exibitionName?: string | null, name?: string | null } | null> | null } | null }; export type CreateCheckoutMutationVariables = Exact<{ products: Array> | InputMaybe; @@ -5278,3 +5278,19 @@ export type CalculatePricesQueryVariables = Exact<{ export type CalculatePricesQuery = { calculatePrices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { displayName?: string | null, name?: string | null } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null } | null }; + +export type CheckoutSelectInstallmentMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; + selectedPaymentMethodId: Scalars['Uuid']['input']; + installmentNumber: Scalars['Int']['input']; +}>; + + +export type CheckoutSelectInstallmentMutation = { checkoutSelectInstallment?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; + +export type CheckoutCloneMutationVariables = Exact<{ + checkoutId: Scalars['Uuid']['input']; +}>; + + +export type CheckoutCloneMutation = { checkoutClone?: { checkoutId: any } | null }; From c1a5e002f37e48a7955c93f94f07c8fb45f2bce0 Mon Sep 17 00:00:00 2001 From: Luigi Date: Mon, 24 Jun 2024 23:08:50 -0300 Subject: [PATCH 12/37] ... --- utils/graphql.ts | 131 +++++------ wake/actions/associateCheckout.ts | 36 +++ wake/actions/cloneCheckout.ts | 1 + wake/actions/completeCheckout.ts | 88 +++---- wake/actions/login.ts | 90 +++----- wake/actions/selectInstallment.ts | 60 ++--- wake/hooks/context.ts | 229 ++++++++++--------- wake/loaders/productCustomizations.ts | 29 +++ wake/loaders/user.ts | 99 ++++---- wake/manifest.gen.ts | 152 ++++++------ wake/utils/graphql/queries.ts | 26 ++- wake/utils/graphql/storefront.graphql.gen.ts | 8 + 12 files changed, 522 insertions(+), 427 deletions(-) create mode 100644 wake/actions/associateCheckout.ts create mode 100644 wake/loaders/productCustomizations.ts diff --git a/utils/graphql.ts b/utils/graphql.ts index 826ee63ca..f86b6a5f6 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -1,87 +1,76 @@ // deno-lint-ignore-file no-explicit-any -import { createHttpClient, HttpClientOptions } from "./http.ts"; +import { createHttpClient, HttpClientOptions } from './http.ts' -interface GraphqlClientOptions extends Omit { - endpoint: string; +interface GraphqlClientOptions extends Omit { + endpoint: string } interface GraphQLResponse { - data: D; - errors: unknown[]; + data: D + errors: unknown[] } type GraphQLAPI = Record< - string, - { - response: GraphQLResponse; - body: { - query: string; - variables?: Record; - operationName?: string; - }; - } ->; + string, + { + response: GraphQLResponse + body: { + query: string + variables?: Record + operationName?: string + } + } +> export const gql = (query: TemplateStringsArray, ...fragments: string[]) => - query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`); + query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`) -export const createGraphqlClient = ( - { endpoint, ...rest }: GraphqlClientOptions, -) => { - const url = new URL(endpoint); - const key = `POST ${url.pathname}`; +export const createGraphqlClient = ({ endpoint, ...rest }: GraphqlClientOptions) => { + const url = new URL(endpoint) + const key = `POST ${url.pathname}` - const defaultHeaders = new Headers(rest.headers); - defaultHeaders.set("content-type", "application/json"); - defaultHeaders.set("accept", "application/json"); + const defaultHeaders = new Headers(rest.headers) + defaultHeaders.set('content-type', 'application/json') + defaultHeaders.set('accept', 'application/json') - const http = createHttpClient({ - ...rest, - base: url.origin, - headers: defaultHeaders, - }); + const http = createHttpClient({ + ...rest, + base: url.origin, + headers: defaultHeaders, + }) - return { - query: async ( - { - query = "", - fragments = [], - variables, - operationName, - }: { - query: string; - fragments?: string[]; - variables?: V; - operationName?: string; - }, - init?: RequestInit, - ): Promise => { - // console.log(JSON.stringify( - // { - // query: [query, ...fragments].join("\n"), - // variables: variables as any, - // operationName, - // }, - // null, - // 2, - // )); - const { data, errors } = await http[key as any]( - {}, - { - ...init, - body: { - query: [query, ...fragments].join("\n"), - variables: variables as any, - operationName, - }, - }, - ).then((res) => res.json()); + return { + query: async ( + { + query = '', + fragments = [], + variables, + operationName, + }: { + query: string + fragments?: string[] + variables?: V + operationName?: string + }, + init?: RequestInit, + ): Promise => { + const { data, errors } = await http[key as any]( + {}, + { + ...init, + body: { + query: [query, ...fragments].join('\n'), + variables: variables as any, + operationName, + }, + }, + ).then(res => res.json()) - if (Array.isArray(errors) && errors.length > 0) { - throw errors; - } + if (Array.isArray(errors) && errors.length > 0) { + throw errors + } - return data as D; - }, - }; -}; + return data as D + }, + } +} diff --git a/wake/actions/associateCheckout.ts b/wake/actions/associateCheckout.ts new file mode 100644 index 000000000..bf4e8f58b --- /dev/null +++ b/wake/actions/associateCheckout.ts @@ -0,0 +1,36 @@ +import type { AppContext } from '../mod.ts' +import authenticate from '../utils/authenticate.ts' +import { getCartCookie } from '../utils/cart.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' +import { CheckoutCustomerAssociate } from '../utils/graphql/queries.ts' +import type { + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-checkoutcustomerassociate +export default async function ( + props: object, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const checkoutId = getCartCookie(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + + if (!customerAccessToken || !checkoutId) return null + + // associate account to checkout + await ctx.storefront.query( + { + variables: { + customerAccessToken, + checkoutId: getCartCookie(req.headers), + }, + ...CheckoutCustomerAssociate, + }, + { headers }, + ) +} diff --git a/wake/actions/cloneCheckout.ts b/wake/actions/cloneCheckout.ts index de9eb89ce..8af54f14e 100644 --- a/wake/actions/cloneCheckout.ts +++ b/wake/actions/cloneCheckout.ts @@ -15,6 +15,7 @@ export default async function (props: object, req: Request, ctx: AppContext) { { variables: { checkoutId, + copyUser: true, }, ...CheckoutClone, }, diff --git a/wake/actions/completeCheckout.ts b/wake/actions/completeCheckout.ts index 3b5095cf7..41e4728cd 100644 --- a/wake/actions/completeCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -1,52 +1,58 @@ -import authenticate from "../utils/authenticate.ts"; -import { getCartCookie } from "../utils/cart.ts"; -import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; -import type { AppContext } from "../mod.ts"; -import { CheckoutComplete } from "../utils/graphql/queries.ts"; +import { setCookie } from 'std/http/cookie.ts' +import type { AppContext } from '../mod.ts' +import authenticate from '../utils/authenticate.ts' +import { CART_COOKIE, getCartCookie } from '../utils/cart.ts' +import ensureCustomerToken from '../utils/ensureCustomerToken.ts' +import { CheckoutComplete } from '../utils/graphql/queries.ts' import type { - CheckoutCompleteMutation, - CheckoutCompleteMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' // https://wakecommerce.readme.io/docs/checkoutcomplete export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers); - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - const checkoutId = getCartCookie(req.headers); + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers) + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + const checkoutId = getCartCookie(req.headers) - if (!customerAccessToken) return null; + if (!customerAccessToken) return null - const { checkoutComplete } = await ctx.storefront.query< - CheckoutCompleteMutation, - CheckoutCompleteMutationVariables - >( - { - variables: { - paymentData: new URLSearchParams(props.paymentData).toString(), - comments: props.comments, - customerAccessToken, - checkoutId, - }, - ...CheckoutComplete, - }, - { headers }, - ); + const { checkoutComplete } = await ctx.storefront.query< + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables + >( + { + variables: { + paymentData: new URLSearchParams(props.paymentData).toString(), + comments: props.comments, + customerAccessToken, + checkoutId, + }, + ...CheckoutComplete, + }, + { headers }, + ) - return checkoutComplete; + setCookie(ctx.response.headers, { + name: CART_COOKIE, + value: '', + path: '/', + expires: new Date(0), + }) } interface Props { - /** - * Informações adicionais de pagamento - */ - paymentData?: Record; - /** - * Comentários - */ - comments?: string; + /** + * Informações adicionais de pagamento + */ + paymentData?: Record + /** + * Comentários + */ + comments?: string } diff --git a/wake/actions/login.ts b/wake/actions/login.ts index b4ee179f0..4028f4e44 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -1,64 +1,46 @@ -import type { AppContext } from "../mod.ts"; -import { getCartCookie } from "../utils/cart.ts"; -import { - CheckoutCustomerAssociate, - CustomerAuthenticatedLogin, -} from "../utils/graphql/queries.ts"; +import type { AppContext } from '../mod.ts' +import { getCartCookie } from '../utils/cart.ts' +import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' import type { - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; -import { setUserCookie } from "../utils/user.ts"; + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' +import { setUserCookie } from '../utils/user.ts' export default async function ( - props: Props, - req: Request, - { storefront, response }: AppContext, -): Promise { - const headers = parseHeaders(req.headers); - - const { customerAuthenticatedLogin } = await storefront.query< - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables - >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); + props: Props, + req: Request, + { storefront, response, invoke }: AppContext, +): Promise { + const headers = parseHeaders(req.headers) - if (customerAuthenticatedLogin) { - setUserCookie( - response.headers, - customerAuthenticatedLogin.token as string, - customerAuthenticatedLogin.legacyToken as string, - new Date(customerAuthenticatedLogin.validUntil), - ); + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) - // associate account to checkout - await storefront.query< - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables - >( - { - variables: { - customerAccessToken: customerAuthenticatedLogin.token as string, - checkoutId: getCartCookie(req.headers), - }, - ...CheckoutCustomerAssociate, - }, - { headers }, - ); - } + if (customerAuthenticatedLogin) { + setUserCookie( + response.headers, + customerAuthenticatedLogin.token as string, + customerAuthenticatedLogin.legacyToken as string, + new Date(customerAuthenticatedLogin.validUntil), + ) + } - return customerAuthenticatedLogin; + return customerAuthenticatedLogin } export interface Props { - /** - * Email - */ - input: string; - /** - * Senha - */ - pass: string; + /** + * Email + */ + input: string + /** + * Senha + */ + pass: string } diff --git a/wake/actions/selectInstallment.ts b/wake/actions/selectInstallment.ts index 561bc58d9..1df495b1d 100644 --- a/wake/actions/selectInstallment.ts +++ b/wake/actions/selectInstallment.ts @@ -1,40 +1,40 @@ -import type { AppContext } from '../mod.ts' -import { getCartCookie } from '../utils/cart.ts' -import { CheckoutSelectInstallment } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import { CheckoutSelectInstallment } from "../utils/graphql/queries.ts"; import type { - CheckoutSelectInstallmentMutation, - CheckoutSelectInstallmentMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutSelectInstallmentMutation, + CheckoutSelectInstallmentMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/checkoutselectinstallment export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const checkoutId = getCartCookie(req.headers) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const checkoutId = getCartCookie(req.headers); - const { checkoutSelectInstallment } = await ctx.storefront.query< - CheckoutSelectInstallmentMutation, - CheckoutSelectInstallmentMutationVariables - >( - { - variables: { - installmentNumber: props.installmentNumber, - selectedPaymentMethodId: props.selectedPaymentMethodId, - checkoutId, - }, - ...CheckoutSelectInstallment, - }, - { headers }, - ) + const { checkoutSelectInstallment } = await ctx.storefront.query< + CheckoutSelectInstallmentMutation, + CheckoutSelectInstallmentMutationVariables + >( + { + variables: { + installmentNumber: props.installmentNumber, + selectedPaymentMethodId: props.selectedPaymentMethodId, + checkoutId, + }, + ...CheckoutSelectInstallment, + }, + { headers }, + ); - return checkoutSelectInstallment + return checkoutSelectInstallment; } interface Props { - installmentNumber: number - selectedPaymentMethodId: string + installmentNumber: number; + selectedPaymentMethodId: string; } diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 83128d1e5..17e1b6ccc 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -1,132 +1,143 @@ -import { IS_BROWSER } from '$fresh/runtime.ts' -import { signal } from '@preact/signals' -import type { Person } from '../../commerce/types.ts' -import { invoke } from '../runtime.ts' -import { setClientCookie } from '../utils/cart.ts' +import { IS_BROWSER } from "$fresh/runtime.ts"; +import { signal } from "@preact/signals"; +import type { Person } from "../../commerce/types.ts"; +import { invoke } from "../runtime.ts"; +import { setClientCookie } from "../utils/cart.ts"; import type { - CheckoutFragment, - ShopQuery, - WishlistReducedProductFragment, -} from '../utils/graphql/storefront.graphql.gen.ts' + CheckoutFragment, + ShopQuery, + WishlistReducedProductFragment, +} from "../utils/graphql/storefront.graphql.gen.ts"; export interface Context { - cart: Partial - user: (Person & { cpf: string | null }) | null - wishlist: WishlistReducedProductFragment[] | null + cart: Partial; + user: (Person & { cpf: string | null }) | null; + wishlist: WishlistReducedProductFragment[] | null; } -const loading = signal(true) +const loading = signal(true); const context = { - cart: signal>({}), - user: signal<(Person & { cpf: string | null; phoneNumber: string | null }) | null>(null), - wishlist: signal(null), - shop: signal(null), -} - -let queue2 = Promise.resolve() -let abort2 = () => {} - -let queue = Promise.resolve() -let abort = () => {} -const enqueue = (cb: (signal: AbortSignal) => Promise> | Partial) => { - abort() - - loading.value = true - const controller = new AbortController() - - queue = queue.then(async () => { - try { - const { cart, user, wishlist } = await cb(controller.signal) - - if (controller.signal.aborted) { - throw { name: 'AbortError' } - } - - context.cart.value = { ...context.cart.value, ...cart } - context.user.value = user || context.user.value - context.wishlist.value = wishlist || context.wishlist.value - - loading.value = false - } catch (error) { - if (error.name === 'AbortError') return - - console.error(error) - loading.value = false + cart: signal>({}), + user: signal< + (Person & { cpf: string | null; phoneNumber: string | null }) | null + >(null), + wishlist: signal(null), + shop: signal(null), +}; + +let queue2 = Promise.resolve(); +let abort2 = () => {}; + +let queue = Promise.resolve(); +let abort = () => {}; +const enqueue = ( + cb: (signal: AbortSignal) => Promise> | Partial, +) => { + abort(); + + loading.value = true; + const controller = new AbortController(); + + queue = queue.then(async () => { + try { + const { cart, user, wishlist } = await cb(controller.signal); + + if (controller.signal.aborted) { + throw { name: "AbortError" }; + } + + context.cart.value = { ...context.cart.value, ...cart }; + context.user.value = user || context.user.value; + context.wishlist.value = wishlist || context.wishlist.value; + + loading.value = false; + } catch (error) { + if (error.name === "AbortError") return; + + console.error(error); + loading.value = false; + } + }); + + abort = () => controller.abort(); + + return queue; +}; + +const enqueue2 = ( + cb: (signal: AbortSignal) => Promise> | Partial, +) => { + abort2(); + + loading.value = true; + const controller = new AbortController(); + + queue2 = queue2.then(async () => { + try { + const { shop } = await cb(controller.signal); + const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout(); + const isLocalhost = window.location.hostname === "localhost"; + + if (!isLocalhost && !useCustomCheckout) { + const url = new URL("/api/carrinho", shop.checkoutUrl); + + const { Id } = await fetch(url, { credentials: "include" }).then((r) => + r.json() + ); + + if (controller.signal.aborted) { + throw { name: "AbortError" }; } - }) - abort = () => controller.abort() - - return queue -} + setClientCookie(Id); + } -const enqueue2 = (cb: (signal: AbortSignal) => Promise> | Partial) => { - abort2() + enqueue(load); - loading.value = true - const controller = new AbortController() + loading.value = false; + } catch (error) { + if (error.name === "AbortError") return; - queue2 = queue2.then(async () => { - try { - const { shop } = await cb(controller.signal) - const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout() - const isLocalhost = window.location.hostname === 'localhost' + console.error(error); + loading.value = false; + } + }); - if (!isLocalhost && !useCustomCheckout) { - const url = new URL('/api/carrinho', shop.checkoutUrl) + abort2 = () => controller.abort(); - const { Id } = await fetch(url, { credentials: 'include' }).then(r => r.json()) - - if (controller.signal.aborted) { - throw { name: 'AbortError' } - } - - setClientCookie(Id) - } - - enqueue(load) - - loading.value = false - } catch (error) { - if (error.name === 'AbortError') return - - console.error(error) - loading.value = false - } - }) - - abort2 = () => controller.abort() - - return queue2 -} + return queue2; +}; const load2 = (signal: AbortSignal) => - invoke( - { - shop: invoke.wake.loaders.shop(), - }, - { signal }, - ) + invoke( + { + shop: invoke.wake.loaders.shop(), + }, + { signal }, + ); const load = (signal: AbortSignal) => - invoke( - { - cart: invoke.wake.loaders.cart(), - user: invoke.wake.loaders.user(), - wishlist: invoke.wake.loaders.wishlist(), - }, - { signal }, - ) + invoke( + { + cart: invoke.wake.loaders.cart(), + user: invoke.wake.loaders.user(), + wishlist: invoke.wake.loaders.wishlist(), + }, + { signal }, + ); if (IS_BROWSER) { - enqueue2(load2) - enqueue(load) + enqueue2(load2); + enqueue(load); - document.addEventListener('visibilitychange', () => document.visibilityState === 'visible' && enqueue(load)) + document.addEventListener( + "visibilitychange", + () => document.visibilityState === "visible" && enqueue(load), + ); } export const state = { - ...context, - loading, - enqueue, -} + ...context, + loading, + enqueue, +}; diff --git a/wake/loaders/productCustomizations.ts b/wake/loaders/productCustomizations.ts new file mode 100644 index 000000000..9a6872117 --- /dev/null +++ b/wake/loaders/productCustomizations.ts @@ -0,0 +1,29 @@ +import type { AppContext } from '../mod.ts' +import { GetProductCustomizations } from '../utils/graphql/queries.ts' +import type { + GetProductCustomizationsQuery, + GetProductCustomizationsQueryVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' + +// https://wakecommerce.readme.io/docs/storefront-api-product +export default async function (props: Props, req: Request, ctx: AppContext) { + const headers = parseHeaders(req.headers) + + const { product } = await ctx.storefront.query< + GetProductCustomizationsQuery, + GetProductCustomizationsQueryVariables + >( + { + variables: { productId: props.productId }, + ...GetProductCustomizations, + }, + { headers }, + ) + + return product +} + +interface Props { + productId: number +} diff --git a/wake/loaders/user.ts b/wake/loaders/user.ts index 17c186dc0..7cea226f3 100644 --- a/wake/loaders/user.ts +++ b/wake/loaders/user.ts @@ -1,52 +1,59 @@ -import type { Person } from '../../commerce/types.ts' -import type { AppContext } from '../mod.ts' -import authenticate from '../utils/authenticate.ts' -import { GetUser } from '../utils/graphql/queries.ts' -import type { GetUserQuery, GetUserQueryVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { Person } from "../../commerce/types.ts"; +import type { AppContext } from "../mod.ts"; +import authenticate from "../utils/authenticate.ts"; +import { GetUser } from "../utils/graphql/queries.ts"; +import type { + GetUserQuery, + GetUserQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; /** * @title Wake Integration * @description User loader */ const userLoader = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise<(Person & { cpf: string | null; phoneNumber: string | null }) | null> => { - const { storefront } = ctx - - const headers = parseHeaders(req.headers) - - const customerAccessToken = await authenticate(req, ctx) - if (!customerAccessToken) return null - - try { - const data = await storefront.query( - { - variables: { customerAccessToken }, - ...GetUser, - }, - { - headers, - }, - ) - - const customer = data.customer - - if (!customer) return null - - return { - '@id': customer.id!, - email: customer.email!, - givenName: customer.customerName!, - gender: customer?.gender === 'Masculino' ? 'https://schema.org/Male' : 'https://schema.org/Female', - cpf: customer.cpf || null, - phoneNumber: customer.phoneNumber || null, - } - } catch (e) { - return null - } -} - -export default userLoader + _props: unknown, + req: Request, + ctx: AppContext, +): Promise< + (Person & { cpf: string | null; phoneNumber: string | null }) | null +> => { + const { storefront } = ctx; + + const headers = parseHeaders(req.headers); + + const customerAccessToken = await authenticate(req, ctx); + if (!customerAccessToken) return null; + + try { + const data = await storefront.query( + { + variables: { customerAccessToken }, + ...GetUser, + }, + { + headers, + }, + ); + + const customer = data.customer; + + if (!customer) return null; + + return { + "@id": customer.id!, + email: customer.email!, + givenName: customer.customerName!, + gender: customer?.gender === "Masculino" + ? "https://schema.org/Male" + : "https://schema.org/Female", + cpf: customer.cpf || null, + phoneNumber: customer.phoneNumber || null, + }; + } catch (e) { + return null; + } +}; + +export default userLoader; diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index ff2291281..0bb291ebf 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -2,48 +2,50 @@ // This file SHOULD be checked into source version control. // This file is automatically updated during development when running `dev.ts`. -import * as $$$$$$$$$0 from "./actions/cart/addCoupon.ts"; -import * as $$$$$$$$$1 from "./actions/cart/addItem.ts"; -import * as $$$$$$$$$2 from "./actions/cart/addItems.ts"; -import * as $$$$$$$$$3 from "./actions/cart/removeCoupon.ts"; -import * as $$$$$$$$$4 from "./actions/cart/updateItemQuantity.ts"; -import * as $$$$$$$$$5 from "./actions/cloneCheckout.ts"; -import * as $$$$$$$$$6 from "./actions/completeCheckout.ts"; -import * as $$$$$$$$$7 from "./actions/createAddress.ts"; -import * as $$$$$$$$$8 from "./actions/createCheckout.ts"; -import * as $$$$$$$$$9 from "./actions/deleteAddress.ts"; -import * as $$$$$$$$$10 from "./actions/login.ts"; -import * as $$$$$$$$$11 from "./actions/logout.ts"; -import * as $$$$$$$$$12 from "./actions/newsletter/register.ts"; -import * as $$$$$$$$$13 from "./actions/notifyme.ts"; -import * as $$$$$$$$$14 from "./actions/review/create.ts"; -import * as $$$$$$$$$15 from "./actions/selectAddress.ts"; -import * as $$$$$$$$$16 from "./actions/selectInstallment.ts"; -import * as $$$$$$$$$17 from "./actions/selectPayment.ts"; -import * as $$$$$$$$$18 from "./actions/selectShipping.ts"; -import * as $$$$$$$$$19 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$20 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$21 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$22 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$23 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$24 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$25 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$0 from "./actions/associateCheckout.ts"; +import * as $$$$$$$$$1 from "./actions/cart/addCoupon.ts"; +import * as $$$$$$$$$2 from "./actions/cart/addItem.ts"; +import * as $$$$$$$$$3 from "./actions/cart/addItems.ts"; +import * as $$$$$$$$$4 from "./actions/cart/removeCoupon.ts"; +import * as $$$$$$$$$5 from "./actions/cart/updateItemQuantity.ts"; +import * as $$$$$$$$$6 from "./actions/cloneCheckout.ts"; +import * as $$$$$$$$$7 from "./actions/completeCheckout.ts"; +import * as $$$$$$$$$8 from "./actions/createAddress.ts"; +import * as $$$$$$$$$9 from "./actions/createCheckout.ts"; +import * as $$$$$$$$$10 from "./actions/deleteAddress.ts"; +import * as $$$$$$$$$11 from "./actions/login.ts"; +import * as $$$$$$$$$12 from "./actions/logout.ts"; +import * as $$$$$$$$$13 from "./actions/newsletter/register.ts"; +import * as $$$$$$$$$14 from "./actions/notifyme.ts"; +import * as $$$$$$$$$15 from "./actions/review/create.ts"; +import * as $$$$$$$$$16 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$17 from "./actions/selectInstallment.ts"; +import * as $$$$$$$$$18 from "./actions/selectPayment.ts"; +import * as $$$$$$$$$19 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$20 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$21 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$22 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$23 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$24 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$25 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$26 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/calculatePrices.ts"; import * as $$$1 from "./loaders/cart.ts"; import * as $$$2 from "./loaders/checkoutCoupon.ts"; import * as $$$3 from "./loaders/paymentMethods.ts"; -import * as $$$4 from "./loaders/productDetailsPage.ts"; -import * as $$$5 from "./loaders/productList.ts"; -import * as $$$6 from "./loaders/productListingPage.ts"; -import * as $$$7 from "./loaders/proxy.ts"; -import * as $$$8 from "./loaders/recommendations.ts"; -import * as $$$9 from "./loaders/shop.ts"; -import * as $$$10 from "./loaders/suggestion.ts"; -import * as $$$11 from "./loaders/useCustomCheckout.ts"; -import * as $$$12 from "./loaders/user.ts"; -import * as $$$13 from "./loaders/userAddresses.ts"; -import * as $$$14 from "./loaders/wishlist.ts"; +import * as $$$4 from "./loaders/productCustomizations.ts"; +import * as $$$5 from "./loaders/productDetailsPage.ts"; +import * as $$$6 from "./loaders/productList.ts"; +import * as $$$7 from "./loaders/productListingPage.ts"; +import * as $$$8 from "./loaders/proxy.ts"; +import * as $$$9 from "./loaders/recommendations.ts"; +import * as $$$10 from "./loaders/shop.ts"; +import * as $$$11 from "./loaders/suggestion.ts"; +import * as $$$12 from "./loaders/useCustomCheckout.ts"; +import * as $$$13 from "./loaders/user.ts"; +import * as $$$14 from "./loaders/userAddresses.ts"; +import * as $$$15 from "./loaders/wishlist.ts"; const manifest = { "loaders": { @@ -51,48 +53,50 @@ const manifest = { "wake/loaders/cart.ts": $$$1, "wake/loaders/checkoutCoupon.ts": $$$2, "wake/loaders/paymentMethods.ts": $$$3, - "wake/loaders/productDetailsPage.ts": $$$4, - "wake/loaders/productList.ts": $$$5, - "wake/loaders/productListingPage.ts": $$$6, - "wake/loaders/proxy.ts": $$$7, - "wake/loaders/recommendations.ts": $$$8, - "wake/loaders/shop.ts": $$$9, - "wake/loaders/suggestion.ts": $$$10, - "wake/loaders/useCustomCheckout.ts": $$$11, - "wake/loaders/user.ts": $$$12, - "wake/loaders/userAddresses.ts": $$$13, - "wake/loaders/wishlist.ts": $$$14, + "wake/loaders/productCustomizations.ts": $$$4, + "wake/loaders/productDetailsPage.ts": $$$5, + "wake/loaders/productList.ts": $$$6, + "wake/loaders/productListingPage.ts": $$$7, + "wake/loaders/proxy.ts": $$$8, + "wake/loaders/recommendations.ts": $$$9, + "wake/loaders/shop.ts": $$$10, + "wake/loaders/suggestion.ts": $$$11, + "wake/loaders/useCustomCheckout.ts": $$$12, + "wake/loaders/user.ts": $$$13, + "wake/loaders/userAddresses.ts": $$$14, + "wake/loaders/wishlist.ts": $$$15, }, "handlers": { "wake/handlers/sitemap.ts": $$$$0, }, "actions": { - "wake/actions/cart/addCoupon.ts": $$$$$$$$$0, - "wake/actions/cart/addItem.ts": $$$$$$$$$1, - "wake/actions/cart/addItems.ts": $$$$$$$$$2, - "wake/actions/cart/removeCoupon.ts": $$$$$$$$$3, - "wake/actions/cart/updateItemQuantity.ts": $$$$$$$$$4, - "wake/actions/cloneCheckout.ts": $$$$$$$$$5, - "wake/actions/completeCheckout.ts": $$$$$$$$$6, - "wake/actions/createAddress.ts": $$$$$$$$$7, - "wake/actions/createCheckout.ts": $$$$$$$$$8, - "wake/actions/deleteAddress.ts": $$$$$$$$$9, - "wake/actions/login.ts": $$$$$$$$$10, - "wake/actions/logout.ts": $$$$$$$$$11, - "wake/actions/newsletter/register.ts": $$$$$$$$$12, - "wake/actions/notifyme.ts": $$$$$$$$$13, - "wake/actions/review/create.ts": $$$$$$$$$14, - "wake/actions/selectAddress.ts": $$$$$$$$$15, - "wake/actions/selectInstallment.ts": $$$$$$$$$16, - "wake/actions/selectPayment.ts": $$$$$$$$$17, - "wake/actions/selectShipping.ts": $$$$$$$$$18, - "wake/actions/shippingSimulation.ts": $$$$$$$$$19, - "wake/actions/signupCompany.ts": $$$$$$$$$20, - "wake/actions/signupPerson.ts": $$$$$$$$$21, - "wake/actions/submmitForm.ts": $$$$$$$$$22, - "wake/actions/updateAddress.ts": $$$$$$$$$23, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$24, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$25, + "wake/actions/associateCheckout.ts": $$$$$$$$$0, + "wake/actions/cart/addCoupon.ts": $$$$$$$$$1, + "wake/actions/cart/addItem.ts": $$$$$$$$$2, + "wake/actions/cart/addItems.ts": $$$$$$$$$3, + "wake/actions/cart/removeCoupon.ts": $$$$$$$$$4, + "wake/actions/cart/updateItemQuantity.ts": $$$$$$$$$5, + "wake/actions/cloneCheckout.ts": $$$$$$$$$6, + "wake/actions/completeCheckout.ts": $$$$$$$$$7, + "wake/actions/createAddress.ts": $$$$$$$$$8, + "wake/actions/createCheckout.ts": $$$$$$$$$9, + "wake/actions/deleteAddress.ts": $$$$$$$$$10, + "wake/actions/login.ts": $$$$$$$$$11, + "wake/actions/logout.ts": $$$$$$$$$12, + "wake/actions/newsletter/register.ts": $$$$$$$$$13, + "wake/actions/notifyme.ts": $$$$$$$$$14, + "wake/actions/review/create.ts": $$$$$$$$$15, + "wake/actions/selectAddress.ts": $$$$$$$$$16, + "wake/actions/selectInstallment.ts": $$$$$$$$$17, + "wake/actions/selectPayment.ts": $$$$$$$$$18, + "wake/actions/selectShipping.ts": $$$$$$$$$19, + "wake/actions/shippingSimulation.ts": $$$$$$$$$20, + "wake/actions/signupCompany.ts": $$$$$$$$$21, + "wake/actions/signupPerson.ts": $$$$$$$$$22, + "wake/actions/submmitForm.ts": $$$$$$$$$23, + "wake/actions/updateAddress.ts": $$$$$$$$$24, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$25, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$26, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 0288b0d5a..82776b15f 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1704,9 +1704,31 @@ export const CheckoutSelectInstallment = { }; export const CheckoutClone = { - query: gql`mutation checkoutClone($checkoutId: Uuid!) { - checkoutClone(checkoutId: $checkoutId) { + query: gql`mutation checkoutClone($checkoutId: Uuid!, $copyUser: Boolean) { + checkoutClone(checkoutId: $checkoutId, copyUser: $copyUser) { checkoutId } }`, }; + +export const GetProductCustomizations = { + query: gql`query GetProductCustomizations($productId: Long!) { + product(productId: $productId) { + productName + productId + productVariantId + customizations { + customizationId + cost + name + type + values + order + groupName + maxLength + id + } + } + } + `, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 48cfa70c4..11f8a20a1 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5290,7 +5290,15 @@ export type CheckoutSelectInstallmentMutation = { checkoutSelectInstallment?: { export type CheckoutCloneMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; + copyUser?: InputMaybe; }>; export type CheckoutCloneMutation = { checkoutClone?: { checkoutId: any } | null }; + +export type GetProductCustomizationsQueryVariables = Exact<{ + productId: Scalars['Long']['input']; +}>; + + +export type GetProductCustomizationsQuery = { product?: { productName?: string | null, productId?: any | null, productVariantId?: any | null, customizations?: Array<{ customizationId: any, cost: any, name?: string | null, type?: string | null, values?: Array | null, order: number, groupName?: string | null, maxLength: number, id?: string | null } | null> | null } | null }; From d141c735d9d2eef1c160c46f0376a6e9cd37a138 Mon Sep 17 00:00:00 2001 From: Luigi Date: Mon, 24 Jun 2024 23:11:45 -0300 Subject: [PATCH 13/37] ... --- utils/graphql.ts | 122 ++++++++++--------- wake/actions/associateCheckout.ts | 61 +++++----- wake/actions/cloneCheckout.ts | 52 ++++---- wake/actions/completeCheckout.ts | 94 +++++++------- wake/actions/login.ts | 75 ++++++------ wake/loaders/productCustomizations.ts | 38 +++--- wake/utils/graphql/queries.ts | 18 --- wake/utils/graphql/storefront.graphql.gen.ts | 8 -- 8 files changed, 228 insertions(+), 240 deletions(-) diff --git a/utils/graphql.ts b/utils/graphql.ts index f86b6a5f6..ae1716dd7 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -1,76 +1,78 @@ // deno-lint-ignore-file no-explicit-any -import { createHttpClient, HttpClientOptions } from './http.ts' +import { createHttpClient, HttpClientOptions } from "./http.ts"; -interface GraphqlClientOptions extends Omit { - endpoint: string +interface GraphqlClientOptions extends Omit { + endpoint: string; } interface GraphQLResponse { - data: D - errors: unknown[] + data: D; + errors: unknown[]; } type GraphQLAPI = Record< - string, - { - response: GraphQLResponse - body: { - query: string - variables?: Record - operationName?: string - } - } -> + string, + { + response: GraphQLResponse; + body: { + query: string; + variables?: Record; + operationName?: string; + }; + } +>; export const gql = (query: TemplateStringsArray, ...fragments: string[]) => - query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`) + query.reduce((a, c, i) => `${a}${fragments[i - 1]}${c}`); -export const createGraphqlClient = ({ endpoint, ...rest }: GraphqlClientOptions) => { - const url = new URL(endpoint) - const key = `POST ${url.pathname}` +export const createGraphqlClient = ( + { endpoint, ...rest }: GraphqlClientOptions, +) => { + const url = new URL(endpoint); + const key = `POST ${url.pathname}`; - const defaultHeaders = new Headers(rest.headers) - defaultHeaders.set('content-type', 'application/json') - defaultHeaders.set('accept', 'application/json') + const defaultHeaders = new Headers(rest.headers); + defaultHeaders.set("content-type", "application/json"); + defaultHeaders.set("accept", "application/json"); - const http = createHttpClient({ - ...rest, - base: url.origin, - headers: defaultHeaders, - }) + const http = createHttpClient({ + ...rest, + base: url.origin, + headers: defaultHeaders, + }); - return { - query: async ( - { - query = '', - fragments = [], - variables, - operationName, - }: { - query: string - fragments?: string[] - variables?: V - operationName?: string - }, - init?: RequestInit, - ): Promise => { - const { data, errors } = await http[key as any]( - {}, - { - ...init, - body: { - query: [query, ...fragments].join('\n'), - variables: variables as any, - operationName, - }, - }, - ).then(res => res.json()) + return { + query: async ( + { + query = "", + fragments = [], + variables, + operationName, + }: { + query: string; + fragments?: string[]; + variables?: V; + operationName?: string; + }, + init?: RequestInit, + ): Promise => { + const { data, errors } = await http[key as any]( + {}, + { + ...init, + body: { + query: [query, ...fragments].join("\n"), + variables: variables as any, + operationName, + }, + }, + ).then((res) => res.json()); - if (Array.isArray(errors) && errors.length > 0) { - throw errors - } + if (Array.isArray(errors) && errors.length > 0) { + throw errors; + } - return data as D - }, - } -} + return data as D; + }, + }; +}; diff --git a/wake/actions/associateCheckout.ts b/wake/actions/associateCheckout.ts index bf4e8f58b..e0e03d33f 100644 --- a/wake/actions/associateCheckout.ts +++ b/wake/actions/associateCheckout.ts @@ -1,36 +1,39 @@ -import type { AppContext } from '../mod.ts' -import authenticate from '../utils/authenticate.ts' -import { getCartCookie } from '../utils/cart.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' -import { CheckoutCustomerAssociate } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import authenticate from "../utils/authenticate.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; +import { CheckoutCustomerAssociate } from "../utils/graphql/queries.ts"; import type { - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutcustomerassociate export default async function ( - props: object, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const checkoutId = getCartCookie(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) + props: object, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const checkoutId = getCartCookie(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken || !checkoutId) return null + if (!customerAccessToken || !checkoutId) return null; - // associate account to checkout - await ctx.storefront.query( - { - variables: { - customerAccessToken, - checkoutId: getCartCookie(req.headers), - }, - ...CheckoutCustomerAssociate, - }, - { headers }, - ) + // associate account to checkout + await ctx.storefront.query< + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables + >( + { + variables: { + customerAccessToken, + checkoutId: getCartCookie(req.headers), + }, + ...CheckoutCustomerAssociate, + }, + { headers }, + ); } diff --git a/wake/actions/cloneCheckout.ts b/wake/actions/cloneCheckout.ts index 8af54f14e..5316a37e9 100644 --- a/wake/actions/cloneCheckout.ts +++ b/wake/actions/cloneCheckout.ts @@ -1,32 +1,38 @@ -import type { AppContext } from '../mod.ts' -import { getCartCookie, setCartCookie } from '../utils/cart.ts' -import { CheckoutClone } from '../utils/graphql/queries.ts' -import type { CheckoutCloneMutation, CheckoutCloneMutationVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { getCartCookie, setCartCookie } from "../utils/cart.ts"; +import { CheckoutClone } from "../utils/graphql/queries.ts"; +import type { + CheckoutCloneMutation, + CheckoutCloneMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutclone export default async function (props: object, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers) - const checkoutId = getCartCookie(req.headers) + const headers = parseHeaders(req.headers); + const checkoutId = getCartCookie(req.headers); - if (!checkoutId) return null + if (!checkoutId) return null; - const { checkoutClone } = await ctx.storefront.query( - { - variables: { - checkoutId, - copyUser: true, - }, - ...CheckoutClone, - }, - { headers }, - ) + const { checkoutClone } = await ctx.storefront.query< + CheckoutCloneMutation, + CheckoutCloneMutationVariables + >( + { + variables: { + checkoutId, + copyUser: true, + }, + ...CheckoutClone, + }, + { headers }, + ); - const clonedCheckoutId = checkoutClone?.checkoutId + const clonedCheckoutId = checkoutClone?.checkoutId; - if (!clonedCheckoutId) { - throw new Error('Could not clone checkout') - } + if (!clonedCheckoutId) { + throw new Error("Could not clone checkout"); + } - setCartCookie(ctx.response.headers, clonedCheckoutId) + setCartCookie(ctx.response.headers, clonedCheckoutId); } diff --git a/wake/actions/completeCheckout.ts b/wake/actions/completeCheckout.ts index 41e4728cd..b0afd7849 100644 --- a/wake/actions/completeCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -1,58 +1,58 @@ -import { setCookie } from 'std/http/cookie.ts' -import type { AppContext } from '../mod.ts' -import authenticate from '../utils/authenticate.ts' -import { CART_COOKIE, getCartCookie } from '../utils/cart.ts' -import ensureCustomerToken from '../utils/ensureCustomerToken.ts' -import { CheckoutComplete } from '../utils/graphql/queries.ts' +import { setCookie } from "std/http/cookie.ts"; +import type { AppContext } from "../mod.ts"; +import authenticate from "../utils/authenticate.ts"; +import { CART_COOKIE, getCartCookie } from "../utils/cart.ts"; +import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; +import { CheckoutComplete } from "../utils/graphql/queries.ts"; import type { - CheckoutCompleteMutation, - CheckoutCompleteMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/checkoutcomplete export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { - const headers = parseHeaders(req.headers) - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)) - const checkoutId = getCartCookie(req.headers) + props: Props, + req: Request, + ctx: AppContext, +): Promise { + const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); + const checkoutId = getCartCookie(req.headers); - if (!customerAccessToken) return null + if (!customerAccessToken) return null; - const { checkoutComplete } = await ctx.storefront.query< - CheckoutCompleteMutation, - CheckoutCompleteMutationVariables - >( - { - variables: { - paymentData: new URLSearchParams(props.paymentData).toString(), - comments: props.comments, - customerAccessToken, - checkoutId, - }, - ...CheckoutComplete, - }, - { headers }, - ) + const { checkoutComplete } = await ctx.storefront.query< + CheckoutCompleteMutation, + CheckoutCompleteMutationVariables + >( + { + variables: { + paymentData: new URLSearchParams(props.paymentData).toString(), + comments: props.comments, + customerAccessToken, + checkoutId, + }, + ...CheckoutComplete, + }, + { headers }, + ); - setCookie(ctx.response.headers, { - name: CART_COOKIE, - value: '', - path: '/', - expires: new Date(0), - }) + setCookie(ctx.response.headers, { + name: CART_COOKIE, + value: "", + path: "/", + expires: new Date(0), + }); } interface Props { - /** - * Informações adicionais de pagamento - */ - paymentData?: Record - /** - * Comentários - */ - comments?: string + /** + * Informações adicionais de pagamento + */ + paymentData?: Record; + /** + * Comentários + */ + comments?: string; } diff --git a/wake/actions/login.ts b/wake/actions/login.ts index 4028f4e44..1a6ecc472 100644 --- a/wake/actions/login.ts +++ b/wake/actions/login.ts @@ -1,46 +1,49 @@ -import type { AppContext } from '../mod.ts' -import { getCartCookie } from '../utils/cart.ts' -import { CheckoutCustomerAssociate, CustomerAuthenticatedLogin } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import { getCartCookie } from "../utils/cart.ts"; +import { + CheckoutCustomerAssociate, + CustomerAuthenticatedLogin, +} from "../utils/graphql/queries.ts"; import type { - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' -import { setUserCookie } from '../utils/user.ts' + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables, + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { setUserCookie } from "../utils/user.ts"; export default async function ( - props: Props, - req: Request, - { storefront, response, invoke }: AppContext, -): Promise { - const headers = parseHeaders(req.headers) + props: Props, + req: Request, + { storefront, response, invoke }: AppContext, +): Promise { + const headers = parseHeaders(req.headers); - const { customerAuthenticatedLogin } = await storefront.query< - CustomerAuthenticatedLoginMutation, - CustomerAuthenticatedLoginMutationVariables - >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }) + const { customerAuthenticatedLogin } = await storefront.query< + CustomerAuthenticatedLoginMutation, + CustomerAuthenticatedLoginMutationVariables + >({ variables: props, ...CustomerAuthenticatedLogin }, { headers }); - if (customerAuthenticatedLogin) { - setUserCookie( - response.headers, - customerAuthenticatedLogin.token as string, - customerAuthenticatedLogin.legacyToken as string, - new Date(customerAuthenticatedLogin.validUntil), - ) - } + if (customerAuthenticatedLogin) { + setUserCookie( + response.headers, + customerAuthenticatedLogin.token as string, + customerAuthenticatedLogin.legacyToken as string, + new Date(customerAuthenticatedLogin.validUntil), + ); + } - return customerAuthenticatedLogin + return customerAuthenticatedLogin; } export interface Props { - /** - * Email - */ - input: string - /** - * Senha - */ - pass: string + /** + * Email + */ + input: string; + /** + * Senha + */ + pass: string; } diff --git a/wake/loaders/productCustomizations.ts b/wake/loaders/productCustomizations.ts index 9a6872117..9cc0b74c7 100644 --- a/wake/loaders/productCustomizations.ts +++ b/wake/loaders/productCustomizations.ts @@ -1,29 +1,29 @@ -import type { AppContext } from '../mod.ts' -import { GetProductCustomizations } from '../utils/graphql/queries.ts' +import type { AppContext } from "../mod.ts"; +import { GetProductCustomizations } from "../utils/graphql/queries.ts"; import type { - GetProductCustomizationsQuery, - GetProductCustomizationsQueryVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + GetProductCustomizationsQuery, + GetProductCustomizationsQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-product export default async function (props: Props, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers) + const headers = parseHeaders(req.headers); - const { product } = await ctx.storefront.query< - GetProductCustomizationsQuery, - GetProductCustomizationsQueryVariables - >( - { - variables: { productId: props.productId }, - ...GetProductCustomizations, - }, - { headers }, - ) + const { product } = await ctx.storefront.query< + GetProductCustomizationsQuery, + GetProductCustomizationsQueryVariables + >( + { + variables: { productId: props.productId }, + ...GetProductCustomizations, + }, + { headers }, + ); - return product + return product; } interface Props { - productId: number + productId: number; } diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 82776b15f..58d9309f4 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1565,24 +1565,6 @@ export const CheckoutAddressAssociate = { }`, }; -export const GetSelectedAddress = { - query: - gql`query GetSelectedAddress($checkoutId: String!, $customerAccessToken: String!) { - checkout(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) { - selectedAddress { - addressNumber - cep - city - id - neighborhood - referencePoint - state - street - } - } - }`, -}; - export const CheckoutSelectShippingQuote = { query: gql`mutation checkoutSelectShippingQuote($checkoutId: Uuid!, $shippingQuoteId: Uuid!) { diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 11f8a20a1..79fa31e9f 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5229,14 +5229,6 @@ export type CheckoutAddressAssociateMutationVariables = Exact<{ export type CheckoutAddressAssociateMutation = { checkoutAddressAssociate?: { cep?: number | null, checkoutId: any, url?: string | null, updateDate: any } | null }; -export type GetSelectedAddressQueryVariables = Exact<{ - checkoutId: Scalars['String']['input']; - customerAccessToken: Scalars['String']['input']; -}>; - - -export type GetSelectedAddressQuery = { checkout?: { selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null } | null }; - export type CheckoutSelectShippingQuoteMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; shippingQuoteId: Scalars['Uuid']['input']; From abba1680836f4e301699922dfde2d8bee6e052ca Mon Sep 17 00:00:00 2001 From: Luigi Date: Tue, 25 Jun 2024 23:01:59 -0300 Subject: [PATCH 14/37] ... --- wake/utils/graphql/queries.ts | 24 ++++++++++++++++++++ wake/utils/graphql/storefront.graphql.gen.ts | 16 ++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 58d9309f4..5976249f6 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -180,6 +180,30 @@ fragment Checkout on Checkout { number } } + selectedShippingGroups { + distributionCenter { + id + sellerName + } + products { + productVariantId + } + selectedShipping { + deadline + deadlineInHours + deliverySchedule { + date + endDateTime + endTime + startDateTime + startTime + } + name + shippingQuoteId + type + value + } + } orders { adjustments { name diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 79fa31e9f..9bea903bb 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -4899,7 +4899,7 @@ export type Wishlist = { products?: Maybe>>; }; -export type CheckoutFragment = { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null }; +export type CheckoutFragment = { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null }; export type ProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; @@ -4939,12 +4939,12 @@ export type GetCartQueryVariables = Exact<{ }>; -export type GetCartQuery = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type GetCartQuery = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type CreateCartMutationVariables = Exact<{ [key: string]: never; }>; -export type CreateCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type CreateCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type GetProductsQueryVariables = Exact<{ filters: ProductExplicitFiltersInput; @@ -4979,28 +4979,28 @@ export type AddCouponMutationVariables = Exact<{ }>; -export type AddCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type AddCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type AddItemToCartMutationVariables = Exact<{ input: CheckoutProductInput; }>; -export type AddItemToCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type AddItemToCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type RemoveCouponMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; }>; -export type RemoveCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type RemoveCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type RemoveItemFromCartMutationVariables = Exact<{ input: CheckoutProductInput; }>; -export type RemoveItemFromCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type RemoveItemFromCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type ProductRestockAlertMutationVariables = Exact<{ input: RestockAlertInput; @@ -5278,7 +5278,7 @@ export type CheckoutSelectInstallmentMutationVariables = Exact<{ }>; -export type CheckoutSelectInstallmentMutation = { checkoutSelectInstallment?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type CheckoutSelectInstallmentMutation = { checkoutSelectInstallment?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type CheckoutCloneMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; From 1f9b7f1cd63c083027e50bf958ddc87492baaf32 Mon Sep 17 00:00:00 2001 From: Luigi Date: Thu, 27 Jun 2024 11:09:10 -0300 Subject: [PATCH 15/37] ... --- wake/loaders/cart.ts | 90 ++++++++++---------- wake/utils/graphql/queries.ts | 24 ------ wake/utils/graphql/storefront.graphql.gen.ts | 16 ++-- 3 files changed, 53 insertions(+), 77 deletions(-) diff --git a/wake/loaders/cart.ts b/wake/loaders/cart.ts index 1d5bb606e..c7e0db21e 100644 --- a/wake/loaders/cart.ts +++ b/wake/loaders/cart.ts @@ -1,56 +1,56 @@ -import authenticate from "../utils/authenticate.ts"; -import type { AppContext } from "../mod.ts"; -import { getCartCookie, setCartCookie } from "../utils/cart.ts"; -import { CreateCart, GetCart } from "../utils/graphql/queries.ts"; +import authenticate from '../utils/authenticate.ts' +import type { AppContext } from '../mod.ts' +import { getCartCookie, setCartCookie } from '../utils/cart.ts' +import { CreateCart, GetCart } from '../utils/graphql/queries.ts' import type { - CheckoutFragment, - CreateCartMutation, - CreateCartMutationVariables, - GetCartQuery, - GetCartQueryVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; + CheckoutFragment, + CreateCartMutation, + CreateCartMutationVariables, + GetCartQuery, + GetCartQueryVariables, +} from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' /** * @title VNDA Integration * @description Cart loader */ -const loader = async ( - _props: unknown, - req: Request, - ctx: AppContext, -): Promise> => { - const { storefront } = ctx; - const cartId = getCartCookie(req.headers); - const headers = parseHeaders(req.headers); - const customerAccessToken = await authenticate(req, ctx); +const loader = async (props: Props, req: Request, ctx: AppContext): Promise> => { + const { storefront } = ctx + const cartId = props?.cartId || getCartCookie(req.headers) + const headers = parseHeaders(req.headers) + const customerAccessToken = await authenticate(req, ctx) - const data = cartId - ? await storefront.query( - { - variables: { checkoutId: cartId, customerAccessToken }, - ...GetCart, - }, - { - headers, - }, - ) - : await storefront.query( - { - ...CreateCart, - }, - { - headers, - }, - ); + const data = cartId + ? await storefront.query( + { + variables: { checkoutId: cartId, customerAccessToken }, + ...GetCart, + }, + { + headers, + }, + ) + : await storefront.query( + { + ...CreateCart, + }, + { + headers, + }, + ) - const checkoutId = data.checkout?.checkoutId; + const checkoutId = data.checkout?.checkoutId - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId); - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId) + } - return data.checkout ?? {}; -}; + return data.checkout ?? {} +} -export default loader; +export default loader + +interface Props { + cartId?: string +} diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 5976249f6..58d9309f4 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -180,30 +180,6 @@ fragment Checkout on Checkout { number } } - selectedShippingGroups { - distributionCenter { - id - sellerName - } - products { - productVariantId - } - selectedShipping { - deadline - deadlineInHours - deliverySchedule { - date - endDateTime - endTime - startDateTime - startTime - } - name - shippingQuoteId - type - value - } - } orders { adjustments { name diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 9bea903bb..79fa31e9f 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -4899,7 +4899,7 @@ export type Wishlist = { products?: Maybe>>; }; -export type CheckoutFragment = { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null }; +export type CheckoutFragment = { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null }; export type ProductFragment = { mainVariant?: boolean | null, productName?: string | null, productId?: any | null, alias?: string | null, available?: boolean | null, averageRating?: number | null, condition?: string | null, createdAt?: any | null, ean?: string | null, id?: string | null, minimumOrderQuantity?: number | null, productVariantId?: any | null, parentId?: any | null, sku?: string | null, numberOfVotes?: number | null, stock?: any | null, variantName?: string | null, variantStock?: any | null, collection?: string | null, urlVideo?: string | null, attributes?: Array<{ value?: string | null, name?: string | null } | null> | null, productCategories?: Array<{ name?: string | null, url?: string | null, hierarchy?: string | null, main: boolean, googleCategories?: string | null } | null> | null, informations?: Array<{ title?: string | null, value?: string | null, type?: string | null } | null> | null, images?: Array<{ url?: string | null, fileName?: string | null, print: boolean } | null> | null, prices?: { discountPercentage: any, discounted: boolean, listPrice?: any | null, multiplicationFactor: number, price: any, bestInstallment?: { discount: boolean, displayName?: string | null, fees: boolean, name?: string | null, number: number, value: any } | null, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, priceTables?: Array<{ discountPercentage: any, id: any, listPrice?: any | null, price: any } | null> | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null, productBrand?: { fullUrlLogo?: string | null, logoUrl?: string | null, name?: string | null, alias?: string | null } | null, seller?: { name?: string | null } | null, similarProducts?: Array<{ alias?: string | null, image?: string | null, imageUrl?: string | null, name?: string | null } | null> | null, promotions?: Array<{ content?: string | null, disclosureType?: string | null, id: any, fullStampUrl?: string | null, stamp?: string | null, title?: string | null } | null> | null }; @@ -4939,12 +4939,12 @@ export type GetCartQueryVariables = Exact<{ }>; -export type GetCartQuery = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type GetCartQuery = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type CreateCartMutationVariables = Exact<{ [key: string]: never; }>; -export type CreateCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type CreateCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type GetProductsQueryVariables = Exact<{ filters: ProductExplicitFiltersInput; @@ -4979,28 +4979,28 @@ export type AddCouponMutationVariables = Exact<{ }>; -export type AddCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type AddCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type AddItemToCartMutationVariables = Exact<{ input: CheckoutProductInput; }>; -export type AddItemToCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type AddItemToCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type RemoveCouponMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; }>; -export type RemoveCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type RemoveCouponMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type RemoveItemFromCartMutationVariables = Exact<{ input: CheckoutProductInput; }>; -export type RemoveItemFromCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type RemoveItemFromCartMutation = { checkout?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type ProductRestockAlertMutationVariables = Exact<{ input: RestockAlertInput; @@ -5278,7 +5278,7 @@ export type CheckoutSelectInstallmentMutationVariables = Exact<{ }>; -export type CheckoutSelectInstallmentMutation = { checkoutSelectInstallment?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, selectedShippingGroups?: Array<{ distributionCenter?: { id?: string | null, sellerName?: string | null } | null, products?: Array<{ productVariantId: number } | null> | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null } | null> | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; +export type CheckoutSelectInstallmentMutation = { checkoutSelectInstallment?: { checkoutId: any, shippingFee: any, subtotal: any, total: any, completed: boolean, coupon?: string | null, customer?: { customerId: any } | null, products?: Array<{ imageUrl?: string | null, brand?: string | null, ajustedPrice: any, listPrice: any, totalListPrice: any, totalAdjustedPrice: any, price: any, name?: string | null, productId: any, productVariantId: any, quantity: number, sku?: string | null, url?: string | null, category?: string | null, kit: boolean, gift: boolean, productAttributes?: Array<{ name?: string | null, type: number, value?: string | null } | null> | null, adjustments?: Array<{ observation?: string | null, type?: string | null, value: any } | null> | null, subscription?: { availableSubscriptions?: Array<{ name?: string | null, recurringDays: number, recurringTypeId: any, selected: boolean, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null> | null, selected?: { selected: boolean, name?: string | null, recurringDays: number, recurringTypeId: any, subscriptionGroupDiscount: any, subscriptionGroupId: any } | null } | null, customization?: { id?: string | null, availableCustomizations?: Array<{ cost: any, customizationId: any, groupName?: string | null, id?: string | null, maxLength: number, name?: string | null, order: number, type?: string | null, values?: Array | null } | null> | null, values?: Array<{ cost: any, name?: string | null, value?: string | null } | null> | null } | null, attributeSelections?: { selectedVariant?: { id?: string | null, alias?: string | null, available?: boolean | null, productId?: any | null, productVariantId?: any | null, stock?: any | null, images?: Array<{ fileName?: string | null, url?: string | null } | null> | null, prices?: { listPrice?: any | null, price: any, discountPercentage: any, installmentPlans?: Array<{ displayName?: string | null, name?: string | null, installments?: Array<{ discount: boolean, fees: boolean, number: number, value: any } | null> | null } | null> | null, bestInstallment?: { name?: string | null, displayName?: string | null, discount: boolean, fees: boolean, number: number, value: any } | null, wholesalePrices?: Array<{ price: any, quantity: number } | null> | null } | null } | null, selections?: Array<{ attributeId: any, displayType?: string | null, name?: string | null, varyByParent: boolean, values?: Array<{ alias?: string | null, available: boolean, printUrl?: string | null, selected: boolean, value?: string | null } | null> | null } | null> | null } | null } | null> | null, selectedAddress?: { addressNumber?: string | null, cep: number, city?: string | null, complement?: string | null, id?: string | null, neighborhood?: string | null, referencePoint?: string | null, state?: string | null, street?: string | null } | null, selectedShipping?: { deadline: number, deadlineInHours?: number | null, name?: string | null, shippingQuoteId: any, type?: string | null, value: number, deliverySchedule?: { date?: string | null, endDateTime: any, endTime?: string | null, startDateTime: any, startTime?: string | null } | null } | null, selectedPaymentMethod?: { html?: string | null, id: any, paymentMethodId?: string | null, scripts?: Array | null, installments?: Array<{ adjustment: number, number: number, total: number, value: number } | null> | null, selectedInstallment?: { adjustment: number, number: number, total: number, value: number } | null, suggestedCards?: Array<{ brand?: string | null, key?: string | null, name?: string | null, number?: string | null } | null> | null } | null, orders?: Array<{ date: any, discountValue: any, dispatchTimeText?: string | null, interestValue: any, orderId: any, orderStatus: OrderStatus, shippingValue: any, totalValue: any, adjustments?: Array<{ name?: string | null, type?: string | null, value: any } | null> | null, delivery?: { cost: any, deliveryTime: number, deliveryTimeInHours?: number | null, name?: string | null, address?: { address?: string | null, cep?: string | null, city?: string | null, complement?: string | null, isPickupStore: boolean, name?: string | null, neighborhood?: string | null, pickupStoreText?: string | null } | null } | null, payment?: { name?: string | null, card?: { brand?: string | null, cardInterest: any, installments: number, name?: string | null, number?: string | null } | null, invoice?: { digitableLine?: string | null, paymentLink?: string | null } | null, pix?: { qrCode?: string | null, qrCodeExpirationDate?: any | null, qrCodeUrl?: string | null } | null } | null, products?: Array<{ imageUrl?: string | null, name?: string | null, productVariantId: any, quantity: number, unitValue: any, value: any, adjustments?: Array<{ additionalInformation?: string | null, name?: string | null, type?: string | null, value: any } | null> | null, attributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null, kits?: Array<{ kitId: any, kitGroupId?: string | null, alias?: string | null, imageUrl?: string | null, listPrice: any, price: any, totalListPrice: any, totalAdjustedPrice: any, name?: string | null, quantity: number, products?: Array<{ productId: any, productVariantId: any, imageUrl?: string | null, name?: string | null, url?: string | null, quantity: number, productAttributes?: Array<{ name?: string | null, value?: string | null } | null> | null } | null> | null } | null> | null } | null }; export type CheckoutCloneMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; From 7fb488f7d15579313300dd09fd3f7db65d7e932a Mon Sep 17 00:00:00 2001 From: Luigi Date: Thu, 4 Jul 2024 12:19:19 -0300 Subject: [PATCH 16/37] ... --- wake/actions/associateCheckout.ts | 14 +-- wake/actions/cloneCheckout.ts | 53 +++++------ wake/actions/completeCheckout.ts | 20 +--- wake/actions/createAddress.ts | 2 - wake/actions/deleteAddress.ts | 2 - wake/actions/loginGoogle.ts | 74 +++++++++++++++ wake/actions/logout.ts | 6 +- wake/actions/selectAddress.ts | 11 +-- wake/actions/selectInstallment.ts | 3 +- wake/actions/selectPayment.ts | 3 +- wake/actions/selectShipping.ts | 3 +- wake/actions/shippingSimulation.ts | 3 +- wake/actions/signupPartialCompany.ts | 97 ++++++++++++++++++++ wake/actions/signupPartialPerson.ts | 93 +++++++++++++++++++ wake/actions/signupPerson.ts | 8 -- wake/hooks/useUser.ts | 11 ++- wake/loaders/cart.ts | 88 +++++++++--------- wake/manifest.gen.ts | 66 +++++++------ wake/utils/ensureCustomerToken.ts | 2 +- wake/utils/graphql/queries.ts | 28 ++++++ wake/utils/graphql/storefront.graphql.gen.ts | 15 +++ 21 files changed, 446 insertions(+), 156 deletions(-) create mode 100644 wake/actions/loginGoogle.ts create mode 100644 wake/actions/signupPartialCompany.ts create mode 100644 wake/actions/signupPartialPerson.ts diff --git a/wake/actions/associateCheckout.ts b/wake/actions/associateCheckout.ts index e0e03d33f..1a0b1d657 100644 --- a/wake/actions/associateCheckout.ts +++ b/wake/actions/associateCheckout.ts @@ -1,27 +1,21 @@ import type { AppContext } from "../mod.ts"; import authenticate from "../utils/authenticate.ts"; import { getCartCookie } from "../utils/cart.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; import { CheckoutCustomerAssociate } from "../utils/graphql/queries.ts"; import type { CheckoutCustomerAssociateMutation, CheckoutCustomerAssociateMutationVariables, - CustomerAuthenticatedLoginMutation, } from "../utils/graphql/storefront.graphql.gen.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutcustomerassociate -export default async function ( - props: object, - req: Request, - ctx: AppContext, -): Promise { +export default async function (props: object, req: Request, ctx: AppContext) { const headers = parseHeaders(req.headers); - const checkoutId = getCartCookie(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken || !checkoutId) return null; - // associate account to checkout await ctx.storefront.query< CheckoutCustomerAssociateMutation, @@ -30,7 +24,7 @@ export default async function ( { variables: { customerAccessToken, - checkoutId: getCartCookie(req.headers), + checkoutId, }, ...CheckoutCustomerAssociate, }, diff --git a/wake/actions/cloneCheckout.ts b/wake/actions/cloneCheckout.ts index 5316a37e9..1c3f8293f 100644 --- a/wake/actions/cloneCheckout.ts +++ b/wake/actions/cloneCheckout.ts @@ -1,38 +1,31 @@ -import type { AppContext } from "../mod.ts"; -import { getCartCookie, setCartCookie } from "../utils/cart.ts"; -import { CheckoutClone } from "../utils/graphql/queries.ts"; -import type { - CheckoutCloneMutation, - CheckoutCloneMutationVariables, -} from "../utils/graphql/storefront.graphql.gen.ts"; -import { parseHeaders } from "../utils/parseHeaders.ts"; +import type { AppContext } from '../mod.ts' +import { getCartCookie, setCartCookie } from '../utils/cart.ts' +import ensureCheckout from '../utils/ensureCheckout.ts' +import { CheckoutClone } from '../utils/graphql/queries.ts' +import type { CheckoutCloneMutation, CheckoutCloneMutationVariables } from '../utils/graphql/storefront.graphql.gen.ts' +import { parseHeaders } from '../utils/parseHeaders.ts' // https://wakecommerce.readme.io/docs/storefront-api-checkoutclone export default async function (props: object, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers); - const checkoutId = getCartCookie(req.headers); + const headers = parseHeaders(req.headers) + const checkoutId = ensureCheckout(getCartCookie(req.headers)) - if (!checkoutId) return null; + const { checkoutClone } = await ctx.storefront.query( + { + variables: { + checkoutId, + copyUser: true, + }, + ...CheckoutClone, + }, + { headers }, + ) - const { checkoutClone } = await ctx.storefront.query< - CheckoutCloneMutation, - CheckoutCloneMutationVariables - >( - { - variables: { - checkoutId, - copyUser: true, - }, - ...CheckoutClone, - }, - { headers }, - ); + const clonedCheckoutId = checkoutClone?.checkoutId - const clonedCheckoutId = checkoutClone?.checkoutId; + if (!clonedCheckoutId) { + throw new Error('Could not clone checkout') + } - if (!clonedCheckoutId) { - throw new Error("Could not clone checkout"); - } - - setCartCookie(ctx.response.headers, clonedCheckoutId); + setCartCookie(ctx.response.headers, clonedCheckoutId) } diff --git a/wake/actions/completeCheckout.ts b/wake/actions/completeCheckout.ts index b0afd7849..46787a556 100644 --- a/wake/actions/completeCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -1,4 +1,4 @@ -import { setCookie } from "std/http/cookie.ts"; +import { deleteCookie, setCookie } from "std/http/cookie.ts"; import type { AppContext } from "../mod.ts"; import authenticate from "../utils/authenticate.ts"; import { CART_COOKIE, getCartCookie } from "../utils/cart.ts"; @@ -9,18 +9,13 @@ import type { CheckoutCompleteMutationVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; // https://wakecommerce.readme.io/docs/checkoutcomplete -export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { +export default async function (props: Props, req: Request, ctx: AppContext) { const headers = parseHeaders(req.headers); const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - const checkoutId = getCartCookie(req.headers); - - if (!customerAccessToken) return null; + const checkoutId = ensureCheckout(getCartCookie(req.headers)); const { checkoutComplete } = await ctx.storefront.query< CheckoutCompleteMutation, @@ -38,12 +33,7 @@ export default async function ( { headers }, ); - setCookie(ctx.response.headers, { - name: CART_COOKIE, - value: "", - path: "/", - expires: new Date(0), - }); + deleteCookie(ctx.response.headers, CART_COOKIE, { path: "/" }); } interface Props { diff --git a/wake/actions/createAddress.ts b/wake/actions/createAddress.ts index 040b655f8..4d8af4812 100644 --- a/wake/actions/createAddress.ts +++ b/wake/actions/createAddress.ts @@ -17,8 +17,6 @@ export default async function ( const headers = parseHeaders(req.headers); const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return null; - const { customerAddressCreate } = await ctx.storefront.query< CustomerAddressCreateMutation, CustomerAddressCreateMutationVariables diff --git a/wake/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts index 47b94b9f9..e688b3e73 100644 --- a/wake/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -17,8 +17,6 @@ export default async function ( const headers = parseHeaders(req.headers); const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - if (!customerAccessToken) return null; - const { customerAddressRemove } = await ctx.storefront.query< CustomerAddressRemoveMutation, CustomerAddressRemoveMutationVariables diff --git a/wake/actions/loginGoogle.ts b/wake/actions/loginGoogle.ts new file mode 100644 index 000000000..e6b036505 --- /dev/null +++ b/wake/actions/loginGoogle.ts @@ -0,0 +1,74 @@ +import { setCookie } from "std/http/cookie.ts"; +import type { AppContext } from "../mod.ts"; +import { CustomerSocialLoginGoogle } from "../utils/graphql/queries.ts"; +import type { + CustomerSocialLoginGoogleMutation, + CustomerSocialLoginGoogleMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { setUserCookie } from "../utils/user.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customersociallogingoogle +export default async function ( + { userCredential }: Props, + req: Request, + { storefront, response }: AppContext, +): Promise< + { + customerSocialLoginGoogle: + CustomerSocialLoginGoogleMutation["customerSocialLoginGoogle"]; + logged: boolean; + } | null +> { + const headers = parseHeaders(req.headers); + + const { customerSocialLoginGoogle } = await storefront.query< + CustomerSocialLoginGoogleMutation, + CustomerSocialLoginGoogleMutationVariables + >( + { + variables: { userCredential }, + ...CustomerSocialLoginGoogle, + }, + { headers }, + ); + + const token = customerSocialLoginGoogle?.token; + + if (!token) throw new Error("No google token found"); + + console.log(customerSocialLoginGoogle); + + if (customerSocialLoginGoogle?.type === "NEW") { + setCookie(response.headers, { + name: "partialCustomerToken", + value: token, + // 1 hour + expires: new Date(Date.now() + 60 * 60 * 1000), + path: "/", + }); + } else if (customerSocialLoginGoogle?.type === "AUTHENTICATED") { + setUserCookie( + response.headers, + customerSocialLoginGoogle.token as string, + customerSocialLoginGoogle.legacyToken as string, + new Date(customerSocialLoginGoogle.validUntil), + ); + } else { + throw new Error( + `Not implemented type: ${customerSocialLoginGoogle?.type}`, + ); + } + + return { + customerSocialLoginGoogle, + logged: customerSocialLoginGoogle?.type === "AUTHENTICATED", + }; +} + +interface Props { + /** + * Credencial retornada pelo processo de login da api do Google + */ + userCredential: string; +} diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index 2c3f64d41..58997742d 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -7,7 +7,7 @@ export default function ( _req: Request, { response }: AppContext, ) { - deleteCookie(response.headers, "customerToken"); - deleteCookie(response.headers, "fbits-login"); - deleteCookie(response.headers, CART_COOKIE); + deleteCookie(response.headers, "customerToken", { path: "/" }); + deleteCookie(response.headers, "fbits-login", { path: "/" }); + deleteCookie(response.headers, CART_COOKIE, { path: "/" }); } diff --git a/wake/actions/selectAddress.ts b/wake/actions/selectAddress.ts index 1d3830956..71c59c3ae 100644 --- a/wake/actions/selectAddress.ts +++ b/wake/actions/selectAddress.ts @@ -8,18 +8,13 @@ import { CheckoutAddressAssociate } from "../utils/graphql/queries.ts"; import authenticate from "../utils/authenticate.ts"; import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; import { getCartCookie } from "../utils/cart.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutaddressassociate -export default async function ( - props: Props, - req: Request, - ctx: AppContext, -): Promise { +export default async function (props: Props, req: Request, ctx: AppContext) { const headers = parseHeaders(req.headers); const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); - const checkoutId = getCartCookie(req.headers); - - if (!customerAccessToken) return null; + const checkoutId = ensureCheckout(getCartCookie(req.headers)); await ctx.storefront.query< CheckoutAddressAssociateMutation, diff --git a/wake/actions/selectInstallment.ts b/wake/actions/selectInstallment.ts index 1df495b1d..6a89a34a7 100644 --- a/wake/actions/selectInstallment.ts +++ b/wake/actions/selectInstallment.ts @@ -1,5 +1,6 @@ import type { AppContext } from "../mod.ts"; import { getCartCookie } from "../utils/cart.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; import { CheckoutSelectInstallment } from "../utils/graphql/queries.ts"; import type { CheckoutSelectInstallmentMutation, @@ -14,7 +15,7 @@ export default async function ( ctx: AppContext, ): Promise { const headers = parseHeaders(req.headers); - const checkoutId = getCartCookie(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); const { checkoutSelectInstallment } = await ctx.storefront.query< CheckoutSelectInstallmentMutation, diff --git a/wake/actions/selectPayment.ts b/wake/actions/selectPayment.ts index bba56fcc1..bdc6e1b97 100644 --- a/wake/actions/selectPayment.ts +++ b/wake/actions/selectPayment.ts @@ -6,6 +6,7 @@ import type { CheckoutSelectPaymentMethodMutationVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; // https://wakecommerce.readme.io/docs/checkoutselectpaymentmethod export default async function ( @@ -14,7 +15,7 @@ export default async function ( ctx: AppContext, ): Promise { const headers = parseHeaders(req.headers); - const checkoutId = getCartCookie(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); const { checkoutSelectPaymentMethod } = await ctx.storefront.query< CheckoutSelectPaymentMethodMutation, diff --git a/wake/actions/selectShipping.ts b/wake/actions/selectShipping.ts index a457034ae..c1ca3db6d 100644 --- a/wake/actions/selectShipping.ts +++ b/wake/actions/selectShipping.ts @@ -6,11 +6,12 @@ import type { CheckoutSelectShippingQuoteMutationVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutselectshippingquote export default async function (props: Props, req: Request, ctx: AppContext) { const headers = parseHeaders(req.headers); - const checkoutId = getCartCookie(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); await ctx.storefront.query< CheckoutSelectShippingQuoteMutation, diff --git a/wake/actions/shippingSimulation.ts b/wake/actions/shippingSimulation.ts index 9a65ff143..a51dea57b 100644 --- a/wake/actions/shippingSimulation.ts +++ b/wake/actions/shippingSimulation.ts @@ -7,6 +7,7 @@ import type { import { getCartCookie } from "../utils/cart.ts"; import { HttpError } from "../../utils/http.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; export interface Props { cep?: string; @@ -57,7 +58,7 @@ const action = async ( const { storefront } = ctx; const headers = parseHeaders(req.headers); - const cartId = getCartCookie(req.headers); + const cartId = ensureCheckout(getCartCookie(req.headers)); const simulationParams = buildSimulationParams(props, cartId); const data = await storefront.query< diff --git a/wake/actions/signupPartialCompany.ts b/wake/actions/signupPartialCompany.ts new file mode 100644 index 000000000..ebf201b2d --- /dev/null +++ b/wake/actions/signupPartialCompany.ts @@ -0,0 +1,97 @@ +import { deleteCookie, getCookies } from "std/http/cookie.ts"; +import type { AppContext } from "../mod.ts"; +import { CustomerCompletePartialRegistration } from "../utils/graphql/queries.ts"; +import type { + CompleteRegistrationMutation, + CompleteRegistrationMutationVariables, + CustomerSimpleCreateInputGraphInput, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { setUserCookie } from "../utils/user.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customercompletepartialregistration +export default async function ( + _props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise< + CompleteRegistrationMutation["customerCompletePartialRegistration"] | null +> { + const headers = parseHeaders(req.headers); + const cookies = getCookies(req.headers); + + const keys = [ + "cnpj", + "corporateName", + "email", + "isStateRegistrationExempt", + "primaryPhoneAreaCode", + "primaryPhoneNumber", + "stateRegistration", + ]; + + const props = Object.fromEntries( + Object.entries(_props).filter(([key]) => keys.includes(key)), + ); + + const input = { + ...props, + customerType: "COMPANY", + } as CustomerSimpleCreateInputGraphInput; + const customerAccessToken = cookies.partialCustomerToken; + + const { customerCompletePartialRegistration } = await storefront.query< + CompleteRegistrationMutation, + CompleteRegistrationMutationVariables + >( + { + variables: { input, customerAccessToken }, + ...CustomerCompletePartialRegistration, + }, + { headers }, + ); + + if (customerCompletePartialRegistration) { + setUserCookie( + response.headers, + customerCompletePartialRegistration.token as string, + customerCompletePartialRegistration.legacyToken as string, + new Date(customerCompletePartialRegistration.validUntil), + ); + + deleteCookie(response.headers, "partialCustomerToken", { path: "/" }); + } + + return customerCompletePartialRegistration ?? null; +} + +interface Props { + /** + * CNPJ com pontuação 00.000.000/0000-00 + */ + cnpj: string; + /** + * Nome da empresa + */ + corporateName: string; + /** + * Email + */ + email: string; + /** + * Isento de inscrição estadual + */ + isStateRegistrationExempt?: boolean; + /** + * DDD do telefone principal do cliente + */ + primaryPhoneAreaCode: string; + /** + * Telefone principal do cliente com pontuação xxxxx-xxxx + */ + primaryPhoneNumber: string; + /** + * Inscrição estadual da empresa + */ + stateRegistration?: string; +} diff --git a/wake/actions/signupPartialPerson.ts b/wake/actions/signupPartialPerson.ts new file mode 100644 index 000000000..238dfdfbf --- /dev/null +++ b/wake/actions/signupPartialPerson.ts @@ -0,0 +1,93 @@ +import { deleteCookie, getCookies } from "std/http/cookie.ts"; +import type { AppContext } from "../mod.ts"; +import { CustomerCompletePartialRegistration } from "../utils/graphql/queries.ts"; +import type { + CompleteRegistrationMutation, + CompleteRegistrationMutationVariables, + CustomerSimpleCreateInputGraphInput, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { setUserCookie } from "../utils/user.ts"; + +// https://wakecommerce.readme.io/docs/storefront-api-customercompletepartialregistration +export default async function ( + _props: Props, + req: Request, + { storefront, response }: AppContext, +): Promise< + CompleteRegistrationMutation["customerCompletePartialRegistration"] | null +> { + const headers = parseHeaders(req.headers); + const cookies = getCookies(req.headers); + + const keys = [ + "birthDate", + "cpf", + "email", + "fullName", + "primaryPhoneAreaCode", + "primaryPhoneNumber", + ]; + + const props = Object.fromEntries( + Object.entries(_props).filter(([key]) => keys.includes(key)), + ); + + const input = { + ...props, + customerType: "PERSON", + } as CustomerSimpleCreateInputGraphInput; + const customerAccessToken = cookies.partialCustomerToken ?? + cookies.customerToken; + + const { customerCompletePartialRegistration } = await storefront.query< + CompleteRegistrationMutation, + CompleteRegistrationMutationVariables + >( + { + variables: { input, customerAccessToken }, + ...CustomerCompletePartialRegistration, + }, + { headers }, + ); + + if (customerCompletePartialRegistration) { + setUserCookie( + response.headers, + customerCompletePartialRegistration.token as string, + customerCompletePartialRegistration.legacyToken as string, + new Date(customerCompletePartialRegistration.validUntil), + ); + + deleteCookie(response.headers, "partialCustomerToken", { path: "/" }); + } + + return customerCompletePartialRegistration ?? null; +} + +interface Props { + /** + * Data de nascimento DD/MM/AAAA + */ + birthDate: Date | string; + /** + * CPF com pontuação 000.000.000-00 + */ + cpf: string; + /** + * Email + */ + email: string; + /** + * Nome completo + */ + fullName: string; + /** + * DDD do telefone principal do cliente + */ + primaryPhoneAreaCode: string; + /** + * Telefone principal do cliente com pontuação xxxxx-xxxx + */ + primaryPhoneNumber: string; +} diff --git a/wake/actions/signupPerson.ts b/wake/actions/signupPerson.ts index 16b9760c1..982ad5776 100644 --- a/wake/actions/signupPerson.ts +++ b/wake/actions/signupPerson.ts @@ -69,10 +69,6 @@ interface Props { * Gênero */ gender: "MALE" | "FEMALE"; - /** - * Isento de inscrição estadual - */ - isStateRegistrationExempt?: boolean; /** * Bairro */ @@ -121,8 +117,4 @@ interface Props { * Estado do endereço */ state: string; - /** - * Inscrição estadual da empresa - */ - stateRegistration?: string; } diff --git a/wake/hooks/useUser.ts b/wake/hooks/useUser.ts index ef405c564..7fd78ec70 100644 --- a/wake/hooks/useUser.ts +++ b/wake/hooks/useUser.ts @@ -1,7 +1,16 @@ +import { invoke } from "../runtime.ts"; import { state as storeState } from "./context.ts"; const { user, loading } = storeState; -const state = { user, loading }; +const state = { + user, + loading, + updateUser: async () => { + loading.value = true; + user.value = await invoke.wake.loaders.user(); + loading.value = false; + }, +}; export const useUser = () => state; diff --git a/wake/loaders/cart.ts b/wake/loaders/cart.ts index c7e0db21e..d52d65457 100644 --- a/wake/loaders/cart.ts +++ b/wake/loaders/cart.ts @@ -1,56 +1,60 @@ -import authenticate from '../utils/authenticate.ts' -import type { AppContext } from '../mod.ts' -import { getCartCookie, setCartCookie } from '../utils/cart.ts' -import { CreateCart, GetCart } from '../utils/graphql/queries.ts' +import authenticate from "../utils/authenticate.ts"; +import type { AppContext } from "../mod.ts"; +import { getCartCookie, setCartCookie } from "../utils/cart.ts"; +import { CreateCart, GetCart } from "../utils/graphql/queries.ts"; import type { - CheckoutFragment, - CreateCartMutation, - CreateCartMutationVariables, - GetCartQuery, - GetCartQueryVariables, -} from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' + CheckoutFragment, + CreateCartMutation, + CreateCartMutationVariables, + GetCartQuery, + GetCartQueryVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; /** * @title VNDA Integration * @description Cart loader */ -const loader = async (props: Props, req: Request, ctx: AppContext): Promise> => { - const { storefront } = ctx - const cartId = props?.cartId || getCartCookie(req.headers) - const headers = parseHeaders(req.headers) - const customerAccessToken = await authenticate(req, ctx) +const loader = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise> => { + const { storefront } = ctx; + const cartId = props?.cartId || getCartCookie(req.headers); + const headers = parseHeaders(req.headers); + const customerAccessToken = await authenticate(req, ctx); - const data = cartId - ? await storefront.query( - { - variables: { checkoutId: cartId, customerAccessToken }, - ...GetCart, - }, - { - headers, - }, - ) - : await storefront.query( - { - ...CreateCart, - }, - { - headers, - }, - ) + const data = cartId + ? await storefront.query( + { + variables: { checkoutId: cartId, customerAccessToken }, + ...GetCart, + }, + { + headers, + }, + ) + : await storefront.query( + { + ...CreateCart, + }, + { + headers, + }, + ); - const checkoutId = data.checkout?.checkoutId + const checkoutId = data.checkout?.checkoutId; - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId) - } + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId); + } - return data.checkout ?? {} -} + return data.checkout ?? {}; +}; -export default loader +export default loader; interface Props { - cartId?: string + cartId?: string; } diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 0bb291ebf..034791166 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -14,21 +14,24 @@ import * as $$$$$$$$$8 from "./actions/createAddress.ts"; import * as $$$$$$$$$9 from "./actions/createCheckout.ts"; import * as $$$$$$$$$10 from "./actions/deleteAddress.ts"; import * as $$$$$$$$$11 from "./actions/login.ts"; -import * as $$$$$$$$$12 from "./actions/logout.ts"; -import * as $$$$$$$$$13 from "./actions/newsletter/register.ts"; -import * as $$$$$$$$$14 from "./actions/notifyme.ts"; -import * as $$$$$$$$$15 from "./actions/review/create.ts"; -import * as $$$$$$$$$16 from "./actions/selectAddress.ts"; -import * as $$$$$$$$$17 from "./actions/selectInstallment.ts"; -import * as $$$$$$$$$18 from "./actions/selectPayment.ts"; -import * as $$$$$$$$$19 from "./actions/selectShipping.ts"; -import * as $$$$$$$$$20 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$21 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$22 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$23 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$24 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$25 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$26 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$12 from "./actions/loginGoogle.ts"; +import * as $$$$$$$$$13 from "./actions/logout.ts"; +import * as $$$$$$$$$14 from "./actions/newsletter/register.ts"; +import * as $$$$$$$$$15 from "./actions/notifyme.ts"; +import * as $$$$$$$$$16 from "./actions/review/create.ts"; +import * as $$$$$$$$$17 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$18 from "./actions/selectInstallment.ts"; +import * as $$$$$$$$$19 from "./actions/selectPayment.ts"; +import * as $$$$$$$$$20 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$21 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$22 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$23 from "./actions/signupPartialCompany.ts"; +import * as $$$$$$$$$24 from "./actions/signupPartialPerson.ts"; +import * as $$$$$$$$$25 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$26 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$27 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$28 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$29 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/calculatePrices.ts"; import * as $$$1 from "./loaders/cart.ts"; @@ -82,21 +85,24 @@ const manifest = { "wake/actions/createCheckout.ts": $$$$$$$$$9, "wake/actions/deleteAddress.ts": $$$$$$$$$10, "wake/actions/login.ts": $$$$$$$$$11, - "wake/actions/logout.ts": $$$$$$$$$12, - "wake/actions/newsletter/register.ts": $$$$$$$$$13, - "wake/actions/notifyme.ts": $$$$$$$$$14, - "wake/actions/review/create.ts": $$$$$$$$$15, - "wake/actions/selectAddress.ts": $$$$$$$$$16, - "wake/actions/selectInstallment.ts": $$$$$$$$$17, - "wake/actions/selectPayment.ts": $$$$$$$$$18, - "wake/actions/selectShipping.ts": $$$$$$$$$19, - "wake/actions/shippingSimulation.ts": $$$$$$$$$20, - "wake/actions/signupCompany.ts": $$$$$$$$$21, - "wake/actions/signupPerson.ts": $$$$$$$$$22, - "wake/actions/submmitForm.ts": $$$$$$$$$23, - "wake/actions/updateAddress.ts": $$$$$$$$$24, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$25, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$26, + "wake/actions/loginGoogle.ts": $$$$$$$$$12, + "wake/actions/logout.ts": $$$$$$$$$13, + "wake/actions/newsletter/register.ts": $$$$$$$$$14, + "wake/actions/notifyme.ts": $$$$$$$$$15, + "wake/actions/review/create.ts": $$$$$$$$$16, + "wake/actions/selectAddress.ts": $$$$$$$$$17, + "wake/actions/selectInstallment.ts": $$$$$$$$$18, + "wake/actions/selectPayment.ts": $$$$$$$$$19, + "wake/actions/selectShipping.ts": $$$$$$$$$20, + "wake/actions/shippingSimulation.ts": $$$$$$$$$21, + "wake/actions/signupCompany.ts": $$$$$$$$$22, + "wake/actions/signupPartialCompany.ts": $$$$$$$$$23, + "wake/actions/signupPartialPerson.ts": $$$$$$$$$24, + "wake/actions/signupPerson.ts": $$$$$$$$$25, + "wake/actions/submmitForm.ts": $$$$$$$$$26, + "wake/actions/updateAddress.ts": $$$$$$$$$27, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$28, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$29, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/utils/ensureCustomerToken.ts b/wake/utils/ensureCustomerToken.ts index 5cd3f0bac..d9d7f0a2c 100644 --- a/wake/utils/ensureCustomerToken.ts +++ b/wake/utils/ensureCustomerToken.ts @@ -1,6 +1,6 @@ export default function (token: string | null) { if (!token) { - console.error("No customer access token cookie, are you logged in?"); + throw new Error("No customer access token cookie, are you logged in?"); } return token; diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 58d9309f4..312af78f8 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1714,3 +1714,31 @@ export const GetProductCustomizations = { } `, }; + +export const CustomerSocialLoginGoogle = { + query: gql`mutation customerSocialLoginGoogle($userCredential: String!) { + customerSocialLoginGoogle(userCredential: $userCredential) { + isMaster + token + legacyToken + type + validUntil + } + } + `, +}; + +export const CustomerCompletePartialRegistration = { + query: + gql`mutation CompleteRegistration($customerAccessToken: String!, $input: CustomerSimpleCreateInputGraphInput!) { + customerCompletePartialRegistration( + customerAccessToken: $customerAccessToken + input: $input) { + isMaster + token + legacyToken + type + validUntil + } + }`, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 79fa31e9f..bb02c6bca 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5294,3 +5294,18 @@ export type GetProductCustomizationsQueryVariables = Exact<{ export type GetProductCustomizationsQuery = { product?: { productName?: string | null, productId?: any | null, productVariantId?: any | null, customizations?: Array<{ customizationId: any, cost: any, name?: string | null, type?: string | null, values?: Array | null, order: number, groupName?: string | null, maxLength: number, id?: string | null } | null> | null } | null }; + +export type CustomerSocialLoginGoogleMutationVariables = Exact<{ + userCredential: Scalars['String']['input']; +}>; + + +export type CustomerSocialLoginGoogleMutation = { customerSocialLoginGoogle?: { isMaster: boolean, token?: string | null, legacyToken?: string | null, type?: LoginType | null, validUntil: any } | null }; + +export type CompleteRegistrationMutationVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; + input: CustomerSimpleCreateInputGraphInput; +}>; + + +export type CompleteRegistrationMutation = { customerCompletePartialRegistration?: { isMaster: boolean, token?: string | null, legacyToken?: string | null, type?: LoginType | null, validUntil: any } | null }; From f3d708357b10721628c658469b957a48214762fb Mon Sep 17 00:00:00 2001 From: Luigi Date: Thu, 4 Jul 2024 12:21:02 -0300 Subject: [PATCH 17/37] ... --- wake/actions/cloneCheckout.ts | 52 +++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/wake/actions/cloneCheckout.ts b/wake/actions/cloneCheckout.ts index 1c3f8293f..764442db1 100644 --- a/wake/actions/cloneCheckout.ts +++ b/wake/actions/cloneCheckout.ts @@ -1,31 +1,37 @@ -import type { AppContext } from '../mod.ts' -import { getCartCookie, setCartCookie } from '../utils/cart.ts' -import ensureCheckout from '../utils/ensureCheckout.ts' -import { CheckoutClone } from '../utils/graphql/queries.ts' -import type { CheckoutCloneMutation, CheckoutCloneMutationVariables } from '../utils/graphql/storefront.graphql.gen.ts' -import { parseHeaders } from '../utils/parseHeaders.ts' +import type { AppContext } from "../mod.ts"; +import { getCartCookie, setCartCookie } from "../utils/cart.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; +import { CheckoutClone } from "../utils/graphql/queries.ts"; +import type { + CheckoutCloneMutation, + CheckoutCloneMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutclone export default async function (props: object, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers) - const checkoutId = ensureCheckout(getCartCookie(req.headers)) + const headers = parseHeaders(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); - const { checkoutClone } = await ctx.storefront.query( - { - variables: { - checkoutId, - copyUser: true, - }, - ...CheckoutClone, - }, - { headers }, - ) + const { checkoutClone } = await ctx.storefront.query< + CheckoutCloneMutation, + CheckoutCloneMutationVariables + >( + { + variables: { + checkoutId, + copyUser: true, + }, + ...CheckoutClone, + }, + { headers }, + ); - const clonedCheckoutId = checkoutClone?.checkoutId + const clonedCheckoutId = checkoutClone?.checkoutId; - if (!clonedCheckoutId) { - throw new Error('Could not clone checkout') - } + if (!clonedCheckoutId) { + throw new Error("Could not clone checkout"); + } - setCartCookie(ctx.response.headers, clonedCheckoutId) + setCartCookie(ctx.response.headers, clonedCheckoutId); } From c19b95080b0d314e8b2d11e6cdc4ced6e589c192 Mon Sep 17 00:00:00 2001 From: Luigi Date: Thu, 4 Jul 2024 14:42:44 -0300 Subject: [PATCH 18/37] ... --- utils/graphql.ts | 106 ++++++++++++++++++++++++++++++++++++ wake/actions/loginGoogle.ts | 10 +--- 2 files changed, 109 insertions(+), 7 deletions(-) diff --git a/utils/graphql.ts b/utils/graphql.ts index ae1716dd7..81f09e06b 100644 --- a/utils/graphql.ts +++ b/utils/graphql.ts @@ -76,3 +76,109 @@ export const createGraphqlClient = ( }, }; }; + +/* + How update storefront.graphql.json data? + Search for this query on graphql playground + + +query IntrospectionQuery { + __schema { + queryType { + name + } + mutationType { + name + } + subscriptionType { + name + } + types { + ...FullType + } + directives { + name + description + locations + args { + ...InputValue + } + } + } +} + +fragment FullType on __Type { + kind + name + description + fields(includeDeprecated: true) { + name + description + args { + ...InputValue + } + type { + ...TypeRef + } + isDeprecated + deprecationReason + } + inputFields { + ...InputValue + } + interfaces { + ...TypeRef + } + enumValues(includeDeprecated: true) { + name + description + isDeprecated + deprecationReason + } + possibleTypes { + ...TypeRef + } +} + +fragment InputValue on __InputValue { + name + description + type { + ...TypeRef + } + defaultValue +} + +fragment TypeRef on __Type { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + } + } + } + } + } + } + } +} +*/ diff --git a/wake/actions/loginGoogle.ts b/wake/actions/loginGoogle.ts index e6b036505..1aed7283a 100644 --- a/wake/actions/loginGoogle.ts +++ b/wake/actions/loginGoogle.ts @@ -17,7 +17,7 @@ export default async function ( { customerSocialLoginGoogle: CustomerSocialLoginGoogleMutation["customerSocialLoginGoogle"]; - logged: boolean; + hasAccount: boolean; } | null > { const headers = parseHeaders(req.headers); @@ -37,8 +37,6 @@ export default async function ( if (!token) throw new Error("No google token found"); - console.log(customerSocialLoginGoogle); - if (customerSocialLoginGoogle?.type === "NEW") { setCookie(response.headers, { name: "partialCustomerToken", @@ -55,14 +53,12 @@ export default async function ( new Date(customerSocialLoginGoogle.validUntil), ); } else { - throw new Error( - `Not implemented type: ${customerSocialLoginGoogle?.type}`, - ); + throw new Error(`Not implemented type: ${customerSocialLoginGoogle?.type}`); } return { customerSocialLoginGoogle, - logged: customerSocialLoginGoogle?.type === "AUTHENTICATED", + hasAccount: customerSocialLoginGoogle?.type === "AUTHENTICATED", }; } From d2cc1b0e3e5e82bb65a64b5e023fd2170a7478c7 Mon Sep 17 00:00:00 2001 From: Luigi Date: Sun, 28 Jul 2024 21:49:43 -0300 Subject: [PATCH 19/37] ... --- help | 1 + wake/hooks/context.ts | 4 ++-- wake/loaders/headlessCheckout.ts | 5 +++++ wake/loaders/useCustomCheckout.ts | 5 ----- wake/manifest.gen.ts | 4 ++-- wake/mod.ts | 9 ++++----- wake/utils/authenticate.ts | 6 +++--- 7 files changed, 17 insertions(+), 17 deletions(-) create mode 160000 help create mode 100644 wake/loaders/headlessCheckout.ts delete mode 100644 wake/loaders/useCustomCheckout.ts diff --git a/help b/help new file mode 160000 index 000000000..d23ee3009 --- /dev/null +++ b/help @@ -0,0 +1 @@ +Subproject commit d23ee3009cc5222932d94f16bccb4cf0a83c2c58 diff --git a/wake/hooks/context.ts b/wake/hooks/context.ts index 17e1b6ccc..b2ceea96f 100644 --- a/wake/hooks/context.ts +++ b/wake/hooks/context.ts @@ -75,10 +75,10 @@ const enqueue2 = ( queue2 = queue2.then(async () => { try { const { shop } = await cb(controller.signal); - const useCustomCheckout = await invoke.wake.loaders.useCustomCheckout(); + const headlessCheckout = await invoke.wake.loaders.headlessCheckout(); const isLocalhost = window.location.hostname === "localhost"; - if (!isLocalhost && !useCustomCheckout) { + if (!isLocalhost && !headlessCheckout) { const url = new URL("/api/carrinho", shop.checkoutUrl); const { Id } = await fetch(url, { credentials: "include" }).then((r) => diff --git a/wake/loaders/headlessCheckout.ts b/wake/loaders/headlessCheckout.ts new file mode 100644 index 000000000..7ed97c446 --- /dev/null +++ b/wake/loaders/headlessCheckout.ts @@ -0,0 +1,5 @@ +import type { AppContext } from "../mod.ts"; + +export default (_props: unknown, _req: Request, ctx: AppContext) => { + return ctx.headlessCheckout; +}; diff --git a/wake/loaders/useCustomCheckout.ts b/wake/loaders/useCustomCheckout.ts deleted file mode 100644 index d49b652c1..000000000 --- a/wake/loaders/useCustomCheckout.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { AppContext } from "../mod.ts"; - -export default (_props: unknown, req: Request, ctx: AppContext) => { - return ctx.useCustomCheckout; -}; diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 034791166..4b0613914 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -45,7 +45,7 @@ import * as $$$8 from "./loaders/proxy.ts"; import * as $$$9 from "./loaders/recommendations.ts"; import * as $$$10 from "./loaders/shop.ts"; import * as $$$11 from "./loaders/suggestion.ts"; -import * as $$$12 from "./loaders/useCustomCheckout.ts"; +import * as $$$12 from "./loaders/headlessCheckout.ts"; import * as $$$13 from "./loaders/user.ts"; import * as $$$14 from "./loaders/userAddresses.ts"; import * as $$$15 from "./loaders/wishlist.ts"; @@ -64,7 +64,7 @@ const manifest = { "wake/loaders/recommendations.ts": $$$9, "wake/loaders/shop.ts": $$$10, "wake/loaders/suggestion.ts": $$$11, - "wake/loaders/useCustomCheckout.ts": $$$12, + "wake/loaders/headlessCheckout.ts": $$$12, "wake/loaders/user.ts": $$$13, "wake/loaders/userAddresses.ts": $$$14, "wake/loaders/wishlist.ts": $$$15, diff --git a/wake/mod.ts b/wake/mod.ts index 1f5eb4ae2..c845d02e1 100644 --- a/wake/mod.ts +++ b/wake/mod.ts @@ -44,17 +44,16 @@ export interface Props { platform: "wake"; /** - * @title Use Custom Checkout * @description Use wake headless api for checkout */ - useCustomCheckout?: boolean; + headlessCheckout?: boolean; } export interface State extends Props { api: ReturnType>; checkoutApi: ReturnType>; storefront: ReturnType; - useCustomCheckout: boolean; + headlessCheckout: boolean; } export const color = 0xb600ee; @@ -71,7 +70,7 @@ export default function App(props: Props): App { storefrontToken, account, checkoutUrl, - useCustomCheckout = false, + headlessCheckout = false, } = props; if (!token || !storefrontToken) { @@ -105,7 +104,7 @@ export default function App(props: Props): App { fetcher: fetchSafe, }); - state = { ...props, api, storefront, checkoutApi, useCustomCheckout }; + state = { ...props, api, storefront, checkoutApi, headlessCheckout }; return { state, diff --git a/wake/utils/authenticate.ts b/wake/utils/authenticate.ts index 24c2a73fc..26849febb 100644 --- a/wake/utils/authenticate.ts +++ b/wake/utils/authenticate.ts @@ -12,9 +12,9 @@ const authenticate = async ( req: Request, ctx: AppContext, ): Promise => { - const { checkoutApi, useCustomCheckout } = ctx; + const { checkoutApi, headlessCheckout } = ctx; - if (useCustomCheckout) { + if (headlessCheckout) { const headers = parseHeaders(req.headers); const cookies = getCookies(req.headers); const customerToken = cookies.customerToken; @@ -49,7 +49,7 @@ const authenticate = async ( const loginCookie = getUserCookie(req.headers); if (!loginCookie) return null; - if (useCustomCheckout) return loginCookie; + if (headlessCheckout) return loginCookie; const data = await checkoutApi["GET /api/Login/Get"]( {}, From 6d192d362df0e20f3fe8668fae0d0b303d78b573 Mon Sep 17 00:00:00 2001 From: Luigi Date: Sun, 28 Jul 2024 21:50:56 -0300 Subject: [PATCH 20/37] ... --- help | 1 - 1 file changed, 1 deletion(-) delete mode 160000 help diff --git a/help b/help deleted file mode 160000 index d23ee3009..000000000 --- a/help +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d23ee3009cc5222932d94f16bccb4cf0a83c2c58 From b28ad0e2022951fdb2ae979ef5ff871988ef8293 Mon Sep 17 00:00:00 2001 From: Luigi Date: Mon, 29 Jul 2024 01:41:48 -0300 Subject: [PATCH 21/37] ... --- wake/actions/completeCheckout.ts | 3 +- wake/actions/deleteAddress.ts | 50 ------------- wake/actions/deleteCartCookie.ts | 11 +++ wake/manifest.gen.ts | 118 ++++++++++++++++--------------- 4 files changed, 73 insertions(+), 109 deletions(-) create mode 100644 wake/actions/deleteCartCookie.ts diff --git a/wake/actions/completeCheckout.ts b/wake/actions/completeCheckout.ts index 46787a556..762e1c9d4 100644 --- a/wake/actions/completeCheckout.ts +++ b/wake/actions/completeCheckout.ts @@ -2,6 +2,7 @@ import { deleteCookie, setCookie } from "std/http/cookie.ts"; import type { AppContext } from "../mod.ts"; import authenticate from "../utils/authenticate.ts"; import { CART_COOKIE, getCartCookie } from "../utils/cart.ts"; +import ensureCheckout from "../utils/ensureCheckout.ts"; import ensureCustomerToken from "../utils/ensureCustomerToken.ts"; import { CheckoutComplete } from "../utils/graphql/queries.ts"; import type { @@ -9,7 +10,6 @@ import type { CheckoutCompleteMutationVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; -import ensureCheckout from "../utils/ensureCheckout.ts"; // https://wakecommerce.readme.io/docs/checkoutcomplete export default async function (props: Props, req: Request, ctx: AppContext) { @@ -34,6 +34,7 @@ export default async function (props: Props, req: Request, ctx: AppContext) { ); deleteCookie(ctx.response.headers, CART_COOKIE, { path: "/" }); + return checkoutComplete; } interface Props { diff --git a/wake/actions/deleteAddress.ts b/wake/actions/deleteAddress.ts index e688b3e73..1fabce08c 100644 --- a/wake/actions/deleteAddress.ts +++ b/wake/actions/deleteAddress.ts @@ -39,54 +39,4 @@ interface Props { * ID do endereço */ addressId: string; - address: { - /** - * Detalhes do endereço - */ - addressDetails?: string; - /** - * Número do endereço - */ - addressNumber?: string; - /** - * Cep do endereço - */ - cep?: string; - /** - * Cidade do endereço - */ - city?: string; - /** - * País do endereço, ex. BR - */ - country?: string; - /** - * E-mail do usuário - */ - email?: string; - /** - * Nome do usuário - */ - name?: string; - /** - * Bairro do endereço - */ - neighborhood?: string; - /** - * Telefone do usuário - */ - phone?: string; - /** - * Ponto de referência do endereço - */ - referencePoint?: string; - /** - * Estado do endereço - */ - state?: string; - /** - * Rua do endereço - */ - street?: string; - }; } diff --git a/wake/actions/deleteCartCookie.ts b/wake/actions/deleteCartCookie.ts new file mode 100644 index 000000000..687a6d108 --- /dev/null +++ b/wake/actions/deleteCartCookie.ts @@ -0,0 +1,11 @@ +import type { AppContext } from "../mod.ts"; +import { deleteCookie } from "std/http/cookie.ts"; +import { CART_COOKIE } from "../utils/cart.ts"; + +export default function ( + _props: object, + _req: Request, + { response }: AppContext, +) { + deleteCookie(response.headers, CART_COOKIE, { path: "/" }); +} diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index 4b0613914..f78827f37 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -13,39 +13,40 @@ import * as $$$$$$$$$7 from "./actions/completeCheckout.ts"; import * as $$$$$$$$$8 from "./actions/createAddress.ts"; import * as $$$$$$$$$9 from "./actions/createCheckout.ts"; import * as $$$$$$$$$10 from "./actions/deleteAddress.ts"; -import * as $$$$$$$$$11 from "./actions/login.ts"; -import * as $$$$$$$$$12 from "./actions/loginGoogle.ts"; -import * as $$$$$$$$$13 from "./actions/logout.ts"; -import * as $$$$$$$$$14 from "./actions/newsletter/register.ts"; -import * as $$$$$$$$$15 from "./actions/notifyme.ts"; -import * as $$$$$$$$$16 from "./actions/review/create.ts"; -import * as $$$$$$$$$17 from "./actions/selectAddress.ts"; -import * as $$$$$$$$$18 from "./actions/selectInstallment.ts"; -import * as $$$$$$$$$19 from "./actions/selectPayment.ts"; -import * as $$$$$$$$$20 from "./actions/selectShipping.ts"; -import * as $$$$$$$$$21 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$22 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$23 from "./actions/signupPartialCompany.ts"; -import * as $$$$$$$$$24 from "./actions/signupPartialPerson.ts"; -import * as $$$$$$$$$25 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$26 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$27 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$28 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$29 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$11 from "./actions/deleteCartCookie.ts"; +import * as $$$$$$$$$12 from "./actions/login.ts"; +import * as $$$$$$$$$13 from "./actions/loginGoogle.ts"; +import * as $$$$$$$$$14 from "./actions/logout.ts"; +import * as $$$$$$$$$15 from "./actions/newsletter/register.ts"; +import * as $$$$$$$$$16 from "./actions/notifyme.ts"; +import * as $$$$$$$$$17 from "./actions/review/create.ts"; +import * as $$$$$$$$$18 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$19 from "./actions/selectInstallment.ts"; +import * as $$$$$$$$$20 from "./actions/selectPayment.ts"; +import * as $$$$$$$$$21 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$22 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$23 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$24 from "./actions/signupPartialCompany.ts"; +import * as $$$$$$$$$25 from "./actions/signupPartialPerson.ts"; +import * as $$$$$$$$$26 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$27 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$28 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$29 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$30 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/calculatePrices.ts"; import * as $$$1 from "./loaders/cart.ts"; import * as $$$2 from "./loaders/checkoutCoupon.ts"; -import * as $$$3 from "./loaders/paymentMethods.ts"; -import * as $$$4 from "./loaders/productCustomizations.ts"; -import * as $$$5 from "./loaders/productDetailsPage.ts"; -import * as $$$6 from "./loaders/productList.ts"; -import * as $$$7 from "./loaders/productListingPage.ts"; -import * as $$$8 from "./loaders/proxy.ts"; -import * as $$$9 from "./loaders/recommendations.ts"; -import * as $$$10 from "./loaders/shop.ts"; -import * as $$$11 from "./loaders/suggestion.ts"; -import * as $$$12 from "./loaders/headlessCheckout.ts"; +import * as $$$3 from "./loaders/headlessCheckout.ts"; +import * as $$$4 from "./loaders/paymentMethods.ts"; +import * as $$$5 from "./loaders/productCustomizations.ts"; +import * as $$$6 from "./loaders/productDetailsPage.ts"; +import * as $$$7 from "./loaders/productList.ts"; +import * as $$$8 from "./loaders/productListingPage.ts"; +import * as $$$9 from "./loaders/proxy.ts"; +import * as $$$10 from "./loaders/recommendations.ts"; +import * as $$$11 from "./loaders/shop.ts"; +import * as $$$12 from "./loaders/suggestion.ts"; import * as $$$13 from "./loaders/user.ts"; import * as $$$14 from "./loaders/userAddresses.ts"; import * as $$$15 from "./loaders/wishlist.ts"; @@ -55,16 +56,16 @@ const manifest = { "wake/loaders/calculatePrices.ts": $$$0, "wake/loaders/cart.ts": $$$1, "wake/loaders/checkoutCoupon.ts": $$$2, - "wake/loaders/paymentMethods.ts": $$$3, - "wake/loaders/productCustomizations.ts": $$$4, - "wake/loaders/productDetailsPage.ts": $$$5, - "wake/loaders/productList.ts": $$$6, - "wake/loaders/productListingPage.ts": $$$7, - "wake/loaders/proxy.ts": $$$8, - "wake/loaders/recommendations.ts": $$$9, - "wake/loaders/shop.ts": $$$10, - "wake/loaders/suggestion.ts": $$$11, - "wake/loaders/headlessCheckout.ts": $$$12, + "wake/loaders/headlessCheckout.ts": $$$3, + "wake/loaders/paymentMethods.ts": $$$4, + "wake/loaders/productCustomizations.ts": $$$5, + "wake/loaders/productDetailsPage.ts": $$$6, + "wake/loaders/productList.ts": $$$7, + "wake/loaders/productListingPage.ts": $$$8, + "wake/loaders/proxy.ts": $$$9, + "wake/loaders/recommendations.ts": $$$10, + "wake/loaders/shop.ts": $$$11, + "wake/loaders/suggestion.ts": $$$12, "wake/loaders/user.ts": $$$13, "wake/loaders/userAddresses.ts": $$$14, "wake/loaders/wishlist.ts": $$$15, @@ -84,25 +85,26 @@ const manifest = { "wake/actions/createAddress.ts": $$$$$$$$$8, "wake/actions/createCheckout.ts": $$$$$$$$$9, "wake/actions/deleteAddress.ts": $$$$$$$$$10, - "wake/actions/login.ts": $$$$$$$$$11, - "wake/actions/loginGoogle.ts": $$$$$$$$$12, - "wake/actions/logout.ts": $$$$$$$$$13, - "wake/actions/newsletter/register.ts": $$$$$$$$$14, - "wake/actions/notifyme.ts": $$$$$$$$$15, - "wake/actions/review/create.ts": $$$$$$$$$16, - "wake/actions/selectAddress.ts": $$$$$$$$$17, - "wake/actions/selectInstallment.ts": $$$$$$$$$18, - "wake/actions/selectPayment.ts": $$$$$$$$$19, - "wake/actions/selectShipping.ts": $$$$$$$$$20, - "wake/actions/shippingSimulation.ts": $$$$$$$$$21, - "wake/actions/signupCompany.ts": $$$$$$$$$22, - "wake/actions/signupPartialCompany.ts": $$$$$$$$$23, - "wake/actions/signupPartialPerson.ts": $$$$$$$$$24, - "wake/actions/signupPerson.ts": $$$$$$$$$25, - "wake/actions/submmitForm.ts": $$$$$$$$$26, - "wake/actions/updateAddress.ts": $$$$$$$$$27, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$28, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$29, + "wake/actions/deleteCartCookie.ts": $$$$$$$$$11, + "wake/actions/login.ts": $$$$$$$$$12, + "wake/actions/loginGoogle.ts": $$$$$$$$$13, + "wake/actions/logout.ts": $$$$$$$$$14, + "wake/actions/newsletter/register.ts": $$$$$$$$$15, + "wake/actions/notifyme.ts": $$$$$$$$$16, + "wake/actions/review/create.ts": $$$$$$$$$17, + "wake/actions/selectAddress.ts": $$$$$$$$$18, + "wake/actions/selectInstallment.ts": $$$$$$$$$19, + "wake/actions/selectPayment.ts": $$$$$$$$$20, + "wake/actions/selectShipping.ts": $$$$$$$$$21, + "wake/actions/shippingSimulation.ts": $$$$$$$$$22, + "wake/actions/signupCompany.ts": $$$$$$$$$23, + "wake/actions/signupPartialCompany.ts": $$$$$$$$$24, + "wake/actions/signupPartialPerson.ts": $$$$$$$$$25, + "wake/actions/signupPerson.ts": $$$$$$$$$26, + "wake/actions/submmitForm.ts": $$$$$$$$$27, + "wake/actions/updateAddress.ts": $$$$$$$$$28, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$29, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$30, }, "name": "wake", "baseUrl": import.meta.url, From 96e714c366904e299496984de613e8e9eed55b9e Mon Sep 17 00:00:00 2001 From: Luigi Date: Tue, 6 Aug 2024 14:23:28 -0300 Subject: [PATCH 22/37] ... --- wake/loaders/productList.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/wake/loaders/productList.ts b/wake/loaders/productList.ts index 19c7d367a..5538b913f 100644 --- a/wake/loaders/productList.ts +++ b/wake/loaders/productList.ts @@ -142,6 +142,13 @@ const productListLoader = async ( const url = new URL(req.url); const { storefront } = ctx; + console.log(props.filters) + console.log(props.filters) + console.log(props.filters) + console.log(props.filters) + console.log(props.filters) + console.log(props.filters) + const headers = parseHeaders(req.headers); const data = await storefront.query< From dc2325815f276f291f0dc0dcb5c41aac50659dd3 Mon Sep 17 00:00:00 2001 From: Marcos Maia Date: Fri, 16 Aug 2024 14:29:43 -0300 Subject: [PATCH 23/37] recovery password --- wake/actions/recoveryPassword.ts | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 wake/actions/recoveryPassword.ts diff --git a/wake/actions/recoveryPassword.ts b/wake/actions/recoveryPassword.ts new file mode 100644 index 000000000..1770d99bb --- /dev/null +++ b/wake/actions/recoveryPassword.ts @@ -0,0 +1,37 @@ +import type { AppContext } from "../mod.ts"; +import { CustomerPasswordRecovery } from "../utils/graphql/queries.ts"; +import { parseHeaders } from "../utils/parseHeaders.ts"; +import { CustomerPasswordRecoveryMutation, CustomerPasswordRecoveryMutationVariables } from "../utils/graphql/storefront.graphql.gen.ts"; + +export interface Props { + email: string +} + +const action = async ( + props: Props, + req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; + + const headers = parseHeaders(req.headers); + + const data = await storefront.query< + CustomerPasswordRecoveryMutation, + CustomerPasswordRecoveryMutationVariables + >( + { + variables: { + input: props.email + }, + ...CustomerPasswordRecovery, + }, + { + headers, + }, + ); + + return data.customerPasswordRecovery; +}; + +export default action; From 5c31acb2c98efbaf8d38470c6b70139654cc666f Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Fri, 16 Aug 2024 16:19:52 -0300 Subject: [PATCH 24/37] debug --- utils/http.ts | 10 ++++++++ wake/actions/associateCheckout.ts | 41 ++++++++++++++++++------------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/utils/http.ts b/utils/http.ts index bef629dc8..92d679d03 100644 --- a/utils/http.ts +++ b/utils/http.ts @@ -1,5 +1,6 @@ import { RequestInit } from "deco/runtime/fetch/mod.ts"; import { fetchSafe } from "./fetch.ts"; +import { fetchToCurl } from "jsr:@viktor/fetch-to-curl"; const HTTP_VERBS = new Set( [ @@ -152,6 +153,15 @@ export const createHttpClient = ({ const body = isJSON ? JSON.stringify(init.body) : init?.body; + const curl = fetchToCurl(url.href, { + ...init, + headers: processHeaders(headers), + method, + body, + }); + + console.log(curl); + return fetcher(url.href, { ...init, headers: processHeaders(headers), diff --git a/wake/actions/associateCheckout.ts b/wake/actions/associateCheckout.ts index 1a0b1d657..b822ba9ac 100644 --- a/wake/actions/associateCheckout.ts +++ b/wake/actions/associateCheckout.ts @@ -11,23 +11,30 @@ import type { import { parseHeaders } from "../utils/parseHeaders.ts"; // https://wakecommerce.readme.io/docs/storefront-api-checkoutcustomerassociate -export default async function (props: object, req: Request, ctx: AppContext) { - const headers = parseHeaders(req.headers); - const checkoutId = ensureCheckout(getCartCookie(req.headers)); - const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); +export default async function (_props: object, req: Request, ctx: AppContext) { + try { + const headers = parseHeaders(req.headers); + const checkoutId = ensureCheckout(getCartCookie(req.headers)); + const customerAccessToken = ensureCustomerToken( + await authenticate(req, ctx), + ); - // associate account to checkout - await ctx.storefront.query< - CheckoutCustomerAssociateMutation, - CheckoutCustomerAssociateMutationVariables - >( - { - variables: { - customerAccessToken, - checkoutId, + // associate account to checkout + await ctx.storefront.query< + CheckoutCustomerAssociateMutation, + CheckoutCustomerAssociateMutationVariables + >( + { + variables: { + customerAccessToken, + checkoutId, + }, + ...CheckoutCustomerAssociate, }, - ...CheckoutCustomerAssociate, - }, - { headers }, - ); + { headers }, + ); + } catch (err) { + console.error("Associate Checkout Error", err); + throw err; + } } From f4db808f5550429ebaf2d37083537a294c505b22 Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Fri, 16 Aug 2024 16:41:59 -0300 Subject: [PATCH 25/37] remove debug logs & return proper errors on actions --- utils/http.ts | 9 ------- wake/actions/associateCheckout.ts | 4 ++-- wake/actions/cart/addCoupon.ts | 39 +++++++++++++++++-------------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/utils/http.ts b/utils/http.ts index 92d679d03..382593fdb 100644 --- a/utils/http.ts +++ b/utils/http.ts @@ -153,15 +153,6 @@ export const createHttpClient = ({ const body = isJSON ? JSON.stringify(init.body) : init?.body; - const curl = fetchToCurl(url.href, { - ...init, - headers: processHeaders(headers), - method, - body, - }); - - console.log(curl); - return fetcher(url.href, { ...init, headers: processHeaders(headers), diff --git a/wake/actions/associateCheckout.ts b/wake/actions/associateCheckout.ts index b822ba9ac..3d30eb7e1 100644 --- a/wake/actions/associateCheckout.ts +++ b/wake/actions/associateCheckout.ts @@ -1,3 +1,4 @@ +import { badRequest } from "deco/mod.ts"; import type { AppContext } from "../mod.ts"; import authenticate from "../utils/authenticate.ts"; import { getCartCookie } from "../utils/cart.ts"; @@ -34,7 +35,6 @@ export default async function (_props: object, req: Request, ctx: AppContext) { { headers }, ); } catch (err) { - console.error("Associate Checkout Error", err); - throw err; + throw badRequest(err); } } diff --git a/wake/actions/cart/addCoupon.ts b/wake/actions/cart/addCoupon.ts index 8bb8be80a..116401fec 100644 --- a/wake/actions/cart/addCoupon.ts +++ b/wake/actions/cart/addCoupon.ts @@ -1,3 +1,4 @@ +import { badRequest } from "deco/mod.ts"; import { HttpError } from "../../../utils/http.ts"; import type { AppContext } from "../../mod.ts"; import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; @@ -26,24 +27,28 @@ const action = async ( throw new HttpError(400, "Missing cart cookie"); } - const data = await storefront.query< - AddCouponMutation, - AddCouponMutationVariables - >( - { - variables: { checkoutId: cartId, ...props }, - ...AddCoupon, - }, - { headers }, - ); - - const checkoutId = data.checkout?.checkoutId; - - if (cartId !== checkoutId) { - setCartCookie(ctx.response.headers, checkoutId); + try { + const data = await storefront.query< + AddCouponMutation, + AddCouponMutationVariables + >( + { + variables: { checkoutId: cartId, ...props }, + ...AddCoupon, + }, + { headers }, + ); + + const checkoutId = data.checkout?.checkoutId; + + if (cartId !== checkoutId) { + setCartCookie(ctx.response.headers, checkoutId); + } + + return data.checkout ?? {}; + } catch (errors) { + throw badRequest(errors); } - - return data.checkout ?? {}; }; export default action; From 43467b39aa7d85a6eee81add39a790bec7300bab Mon Sep 17 00:00:00 2001 From: Marcos Maia Date: Fri, 16 Aug 2024 17:19:36 -0300 Subject: [PATCH 26/37] add queries --- wake/actions/recoveryPassword.ts | 9 +++-- wake/utils/graphql/queries.ts | 10 ++++++ wake/utils/graphql/storefront.graphql.gen.ts | 35 ++++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/wake/actions/recoveryPassword.ts b/wake/actions/recoveryPassword.ts index 1770d99bb..f573319fe 100644 --- a/wake/actions/recoveryPassword.ts +++ b/wake/actions/recoveryPassword.ts @@ -1,10 +1,13 @@ import type { AppContext } from "../mod.ts"; import { CustomerPasswordRecovery } from "../utils/graphql/queries.ts"; import { parseHeaders } from "../utils/parseHeaders.ts"; -import { CustomerPasswordRecoveryMutation, CustomerPasswordRecoveryMutationVariables } from "../utils/graphql/storefront.graphql.gen.ts"; +import { + CustomerPasswordRecoveryMutation, + CustomerPasswordRecoveryMutationVariables, +} from "../utils/graphql/storefront.graphql.gen.ts"; export interface Props { - email: string + email: string; } const action = async ( @@ -22,7 +25,7 @@ const action = async ( >( { variables: { - input: props.email + input: props.email, }, ...CustomerPasswordRecovery, }, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index 312af78f8..609119b20 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1742,3 +1742,13 @@ export const CustomerCompletePartialRegistration = { } }`, }; + +export const CustomerPasswordRecovery = { + query: gql` + mutation CustomerPasswordRecovery($input: String!) { + customerPasswordRecovery(input: $input) { + isSuccess + } + } + `, +}; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index bb02c6bca..9255d4948 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -1291,6 +1291,7 @@ export type CustomerOrderArgs = { /** A customer from the store. */ export type CustomerOrdersArgs = { offset?: InputMaybe; + pageSize?: InputMaybe; sortDirection?: InputMaybe; sortKey?: InputMaybe; }; @@ -2668,6 +2669,8 @@ export type MutationWishlistRemoveProductArgs = { export type NewsletterInput = { email: Scalars['String']['input']; + /** The receiver gender. Default is null. */ + gender?: InputMaybe; informationGroupValues?: InputMaybe>>; name: Scalars['String']['input']; /** [Deprecated: use the root field] The google recaptcha token. */ @@ -2679,6 +2682,8 @@ export type NewsletterNode = { createDate: Scalars['DateTime']['output']; /** The newsletter receiver email. */ email?: Maybe; + /** Newsletter receiver gender. */ + gender?: Maybe; /** The newsletter receiver name. */ name?: Maybe; /** Newsletter update date. */ @@ -3721,6 +3726,10 @@ export type QueryRoot = { paymentMethods?: Maybe>>; /** Retrieve a product by the given id. */ product?: Maybe; + /** Retrieve a list of product recommendations based on the customer's cart. */ + productAIRecommendationsByCart?: Maybe>>; + /** Retrieve a list of product recommendations based on the customer's orders. */ + productAIRecommendationsByOrder?: Maybe>>; /** * Options available for the given product. * @deprecated Use the product query. @@ -3929,6 +3938,20 @@ export type QueryRootProductArgs = { }; +export type QueryRootProductAiRecommendationsByCartArgs = { + checkoutId: Scalars['Uuid']['input']; + partnerAccessToken?: InputMaybe; + quantity?: Scalars['Int']['input']; +}; + + +export type QueryRootProductAiRecommendationsByOrderArgs = { + customerAccessToken?: InputMaybe; + partnerAccessToken?: InputMaybe; + quantity?: Scalars['Int']['input']; +}; + + export type QueryRootProductOptionsArgs = { productId: Scalars['Long']['input']; }; @@ -3978,6 +4001,7 @@ export type QueryRootSearchArgs = { operation?: Operation; partnerAccessToken?: InputMaybe; query?: InputMaybe; + useAI?: Scalars['Boolean']['input']; }; @@ -4021,6 +4045,8 @@ export type Question = { /** Represents the product to be removed from the subscription. */ export type RemoveSubscriptionProductInput = { + /** The quantity to be removed for the product. Removes all if not passed */ + quantity?: InputMaybe; /** The Id of the product within the subscription to be removed. */ subscriptionProductId: Scalars['Long']['input']; }; @@ -4312,6 +4338,8 @@ export type SellerOffer = { prices?: Maybe; /** Variant unique identifier. */ productVariantId?: Maybe; + /** The stock of the product variant. */ + stock: Scalars['Int']['output']; }; /** The prices of the product. */ @@ -5309,3 +5337,10 @@ export type CompleteRegistrationMutationVariables = Exact<{ export type CompleteRegistrationMutation = { customerCompletePartialRegistration?: { isMaster: boolean, token?: string | null, legacyToken?: string | null, type?: LoginType | null, validUntil: any } | null }; + +export type CustomerPasswordRecoveryMutationVariables = Exact<{ + input: Scalars['String']['input']; +}>; + + +export type CustomerPasswordRecoveryMutation = { customerPasswordRecovery?: { isSuccess: boolean } | null }; From e673151c87f0dc74005e829b264fc42ece6b4ca0 Mon Sep 17 00:00:00 2001 From: Marcos Maia Date: Fri, 16 Aug 2024 17:20:48 -0300 Subject: [PATCH 27/37] removing viktor debug --- utils/http.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/utils/http.ts b/utils/http.ts index 382593fdb..bef629dc8 100644 --- a/utils/http.ts +++ b/utils/http.ts @@ -1,6 +1,5 @@ import { RequestInit } from "deco/runtime/fetch/mod.ts"; import { fetchSafe } from "./fetch.ts"; -import { fetchToCurl } from "jsr:@viktor/fetch-to-curl"; const HTTP_VERBS = new Set( [ From deff442cfb933f8ead0bb2e316e9f2bf89d7917f Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Thu, 22 Aug 2024 17:31:50 -0300 Subject: [PATCH 28/37] regen manifest --- wake/manifest.gen.ts | 58 ++++++++++---------- wake/utils/graphql/storefront.graphql.gen.ts | 28 ---------- 2 files changed, 30 insertions(+), 56 deletions(-) diff --git a/wake/manifest.gen.ts b/wake/manifest.gen.ts index f78827f37..4fc43c396 100644 --- a/wake/manifest.gen.ts +++ b/wake/manifest.gen.ts @@ -19,20 +19,21 @@ import * as $$$$$$$$$13 from "./actions/loginGoogle.ts"; import * as $$$$$$$$$14 from "./actions/logout.ts"; import * as $$$$$$$$$15 from "./actions/newsletter/register.ts"; import * as $$$$$$$$$16 from "./actions/notifyme.ts"; -import * as $$$$$$$$$17 from "./actions/review/create.ts"; -import * as $$$$$$$$$18 from "./actions/selectAddress.ts"; -import * as $$$$$$$$$19 from "./actions/selectInstallment.ts"; -import * as $$$$$$$$$20 from "./actions/selectPayment.ts"; -import * as $$$$$$$$$21 from "./actions/selectShipping.ts"; -import * as $$$$$$$$$22 from "./actions/shippingSimulation.ts"; -import * as $$$$$$$$$23 from "./actions/signupCompany.ts"; -import * as $$$$$$$$$24 from "./actions/signupPartialCompany.ts"; -import * as $$$$$$$$$25 from "./actions/signupPartialPerson.ts"; -import * as $$$$$$$$$26 from "./actions/signupPerson.ts"; -import * as $$$$$$$$$27 from "./actions/submmitForm.ts"; -import * as $$$$$$$$$28 from "./actions/updateAddress.ts"; -import * as $$$$$$$$$29 from "./actions/wishlist/addProduct.ts"; -import * as $$$$$$$$$30 from "./actions/wishlist/removeProduct.ts"; +import * as $$$$$$$$$17 from "./actions/recoveryPassword.ts"; +import * as $$$$$$$$$18 from "./actions/review/create.ts"; +import * as $$$$$$$$$19 from "./actions/selectAddress.ts"; +import * as $$$$$$$$$20 from "./actions/selectInstallment.ts"; +import * as $$$$$$$$$21 from "./actions/selectPayment.ts"; +import * as $$$$$$$$$22 from "./actions/selectShipping.ts"; +import * as $$$$$$$$$23 from "./actions/shippingSimulation.ts"; +import * as $$$$$$$$$24 from "./actions/signupCompany.ts"; +import * as $$$$$$$$$25 from "./actions/signupPartialCompany.ts"; +import * as $$$$$$$$$26 from "./actions/signupPartialPerson.ts"; +import * as $$$$$$$$$27 from "./actions/signupPerson.ts"; +import * as $$$$$$$$$28 from "./actions/submmitForm.ts"; +import * as $$$$$$$$$29 from "./actions/updateAddress.ts"; +import * as $$$$$$$$$30 from "./actions/wishlist/addProduct.ts"; +import * as $$$$$$$$$31 from "./actions/wishlist/removeProduct.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/calculatePrices.ts"; import * as $$$1 from "./loaders/cart.ts"; @@ -91,20 +92,21 @@ const manifest = { "wake/actions/logout.ts": $$$$$$$$$14, "wake/actions/newsletter/register.ts": $$$$$$$$$15, "wake/actions/notifyme.ts": $$$$$$$$$16, - "wake/actions/review/create.ts": $$$$$$$$$17, - "wake/actions/selectAddress.ts": $$$$$$$$$18, - "wake/actions/selectInstallment.ts": $$$$$$$$$19, - "wake/actions/selectPayment.ts": $$$$$$$$$20, - "wake/actions/selectShipping.ts": $$$$$$$$$21, - "wake/actions/shippingSimulation.ts": $$$$$$$$$22, - "wake/actions/signupCompany.ts": $$$$$$$$$23, - "wake/actions/signupPartialCompany.ts": $$$$$$$$$24, - "wake/actions/signupPartialPerson.ts": $$$$$$$$$25, - "wake/actions/signupPerson.ts": $$$$$$$$$26, - "wake/actions/submmitForm.ts": $$$$$$$$$27, - "wake/actions/updateAddress.ts": $$$$$$$$$28, - "wake/actions/wishlist/addProduct.ts": $$$$$$$$$29, - "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$30, + "wake/actions/recoveryPassword.ts": $$$$$$$$$17, + "wake/actions/review/create.ts": $$$$$$$$$18, + "wake/actions/selectAddress.ts": $$$$$$$$$19, + "wake/actions/selectInstallment.ts": $$$$$$$$$20, + "wake/actions/selectPayment.ts": $$$$$$$$$21, + "wake/actions/selectShipping.ts": $$$$$$$$$22, + "wake/actions/shippingSimulation.ts": $$$$$$$$$23, + "wake/actions/signupCompany.ts": $$$$$$$$$24, + "wake/actions/signupPartialCompany.ts": $$$$$$$$$25, + "wake/actions/signupPartialPerson.ts": $$$$$$$$$26, + "wake/actions/signupPerson.ts": $$$$$$$$$27, + "wake/actions/submmitForm.ts": $$$$$$$$$28, + "wake/actions/updateAddress.ts": $$$$$$$$$29, + "wake/actions/wishlist/addProduct.ts": $$$$$$$$$30, + "wake/actions/wishlist/removeProduct.ts": $$$$$$$$$31, }, "name": "wake", "baseUrl": import.meta.url, diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 9255d4948..01fbd8880 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -1291,7 +1291,6 @@ export type CustomerOrderArgs = { /** A customer from the store. */ export type CustomerOrdersArgs = { offset?: InputMaybe; - pageSize?: InputMaybe; sortDirection?: InputMaybe; sortKey?: InputMaybe; }; @@ -2669,8 +2668,6 @@ export type MutationWishlistRemoveProductArgs = { export type NewsletterInput = { email: Scalars['String']['input']; - /** The receiver gender. Default is null. */ - gender?: InputMaybe; informationGroupValues?: InputMaybe>>; name: Scalars['String']['input']; /** [Deprecated: use the root field] The google recaptcha token. */ @@ -2682,8 +2679,6 @@ export type NewsletterNode = { createDate: Scalars['DateTime']['output']; /** The newsletter receiver email. */ email?: Maybe; - /** Newsletter receiver gender. */ - gender?: Maybe; /** The newsletter receiver name. */ name?: Maybe; /** Newsletter update date. */ @@ -3726,10 +3721,6 @@ export type QueryRoot = { paymentMethods?: Maybe>>; /** Retrieve a product by the given id. */ product?: Maybe; - /** Retrieve a list of product recommendations based on the customer's cart. */ - productAIRecommendationsByCart?: Maybe>>; - /** Retrieve a list of product recommendations based on the customer's orders. */ - productAIRecommendationsByOrder?: Maybe>>; /** * Options available for the given product. * @deprecated Use the product query. @@ -3938,20 +3929,6 @@ export type QueryRootProductArgs = { }; -export type QueryRootProductAiRecommendationsByCartArgs = { - checkoutId: Scalars['Uuid']['input']; - partnerAccessToken?: InputMaybe; - quantity?: Scalars['Int']['input']; -}; - - -export type QueryRootProductAiRecommendationsByOrderArgs = { - customerAccessToken?: InputMaybe; - partnerAccessToken?: InputMaybe; - quantity?: Scalars['Int']['input']; -}; - - export type QueryRootProductOptionsArgs = { productId: Scalars['Long']['input']; }; @@ -4001,7 +3978,6 @@ export type QueryRootSearchArgs = { operation?: Operation; partnerAccessToken?: InputMaybe; query?: InputMaybe; - useAI?: Scalars['Boolean']['input']; }; @@ -4045,8 +4021,6 @@ export type Question = { /** Represents the product to be removed from the subscription. */ export type RemoveSubscriptionProductInput = { - /** The quantity to be removed for the product. Removes all if not passed */ - quantity?: InputMaybe; /** The Id of the product within the subscription to be removed. */ subscriptionProductId: Scalars['Long']['input']; }; @@ -4338,8 +4312,6 @@ export type SellerOffer = { prices?: Maybe; /** Variant unique identifier. */ productVariantId?: Maybe; - /** The stock of the product variant. */ - stock: Scalars['Int']['output']; }; /** The prices of the product. */ From 2ca3e6d6bec51634617901e077814e7cabc6013a Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Fri, 27 Sep 2024 17:49:12 -0300 Subject: [PATCH 29/37] dont use deco/ in imports --- wake/actions/associateCheckout.ts | 2 +- wake/actions/cart/addCoupon.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wake/actions/associateCheckout.ts b/wake/actions/associateCheckout.ts index 3d30eb7e1..cbce21d1f 100644 --- a/wake/actions/associateCheckout.ts +++ b/wake/actions/associateCheckout.ts @@ -1,4 +1,4 @@ -import { badRequest } from "deco/mod.ts"; +import { badRequest } from "@deco/deco"; import type { AppContext } from "../mod.ts"; import authenticate from "../utils/authenticate.ts"; import { getCartCookie } from "../utils/cart.ts"; diff --git a/wake/actions/cart/addCoupon.ts b/wake/actions/cart/addCoupon.ts index 116401fec..d59c61015 100644 --- a/wake/actions/cart/addCoupon.ts +++ b/wake/actions/cart/addCoupon.ts @@ -1,4 +1,4 @@ -import { badRequest } from "deco/mod.ts"; +import { badRequest } from "@deco/deco"; import { HttpError } from "../../../utils/http.ts"; import type { AppContext } from "../../mod.ts"; import { getCartCookie, setCartCookie } from "../../utils/cart.ts"; From b48f2ed3373502a1fc3f55cb6d3fc673e750ea63 Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Tue, 8 Oct 2024 14:19:14 -0300 Subject: [PATCH 30/37] format & fix conflict --- .github/workflows/ci.yaml | 2 +- .github/workflows/issues.yaml | 2 +- .github/workflows/releaser.yaml | 16 ++++++++-------- .../utils/storefront/storefront.graphql.gen.ts | 17 +++++++++++++++++ wake/loaders/productList.ts | 12 ++++++------ wake/loaders/productListingPage.ts | 9 ++++++--- 6 files changed, 39 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b7384362d..aa1d2bb32 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -51,4 +51,4 @@ jobs: - name: Benchmark continue-on-error: true - run: deno bench --lock=deno.lock --lock-write -A . \ No newline at end of file + run: deno bench --lock=deno.lock --lock-write -A . diff --git a/.github/workflows/issues.yaml b/.github/workflows/issues.yaml index 9504b5705..d5f99f015 100644 --- a/.github/workflows/issues.yaml +++ b/.github/workflows/issues.yaml @@ -15,4 +15,4 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_REPO: ${{ github.repository }} NUMBER: ${{ github.event.issue.number }} - LABELS: triage \ No newline at end of file + LABELS: triage diff --git a/.github/workflows/releaser.yaml b/.github/workflows/releaser.yaml index 5584f177e..f4fb8d2a0 100644 --- a/.github/workflows/releaser.yaml +++ b/.github/workflows/releaser.yaml @@ -9,9 +9,9 @@ on: - main permissions: - contents: write # Necessary for accessing and modifying repository content - pull-requests: write # Necessary for interacting with pull requests - actions: write # Necessary for triggering other workflows + contents: write # Necessary for accessing and modifying repository content + pull-requests: write # Necessary for interacting with pull requests + actions: write # Necessary for triggering other workflows jobs: tag-discussion: @@ -21,9 +21,9 @@ jobs: - name: Checkout Code uses: actions/checkout@v3 with: - ref: ${{ github.event.pull_request.base.ref }} # Checkout the base branch (target repository) - repository: ${{ github.event.pull_request.base.repo.full_name }} # Checkout from the target repo - + ref: ${{ github.event.pull_request.base.ref }} # Checkout the base branch (target repository) + repository: ${{ github.event.pull_request.base.repo.full_name }} # Checkout from the target repo + - name: Calculate new versions id: calculate_versions run: | @@ -162,11 +162,11 @@ jobs: run: | git tag ${{ steps.determine_version.outputs.new_version }} git push origin ${{ steps.determine_version.outputs.new_version }} - + - name: Trigger Release Workflow run: | curl -X POST \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Accept: application/vnd.github.everest-preview+json" \ https://api.github.com/repos/${{ github.repository }}/actions/workflows/release.yaml/dispatches \ - -d '{"ref":"main", "inputs":{"tag_name":"${{ steps.determine_version.outputs.new_version }}"}}' \ No newline at end of file + -d '{"ref":"main", "inputs":{"tag_name":"${{ steps.determine_version.outputs.new_version }}"}}' diff --git a/shopify/utils/storefront/storefront.graphql.gen.ts b/shopify/utils/storefront/storefront.graphql.gen.ts index 286430b30..f4038d73e 100644 --- a/shopify/utils/storefront/storefront.graphql.gen.ts +++ b/shopify/utils/storefront/storefront.graphql.gen.ts @@ -7704,6 +7704,8 @@ export type FilterFragment = { id: string, label: string, type: FilterType, valu export type CartFragment = { id: string, checkoutUrl: any, totalQuantity: number, lines: { nodes: Array<{ id: string, quantity: number, merchandise: { id: string, title: string, image?: { url: any, altText?: string | null } | null, product: { title: string }, price: { amount: any, currencyCode: CurrencyCode } }, cost: { totalAmount: { amount: any, currencyCode: CurrencyCode }, subtotalAmount: { amount: any, currencyCode: CurrencyCode }, amountPerQuantity: { amount: any, currencyCode: CurrencyCode }, compareAtAmountPerQuantity?: { amount: any, currencyCode: CurrencyCode } | null } } | { id: string, quantity: number, merchandise: { id: string, title: string, image?: { url: any, altText?: string | null } | null, product: { title: string }, price: { amount: any, currencyCode: CurrencyCode } }, cost: { totalAmount: { amount: any, currencyCode: CurrencyCode }, subtotalAmount: { amount: any, currencyCode: CurrencyCode }, amountPerQuantity: { amount: any, currencyCode: CurrencyCode }, compareAtAmountPerQuantity?: { amount: any, currencyCode: CurrencyCode } | null } }> }, cost: { subtotalAmount: { amount: any, currencyCode: CurrencyCode }, totalAmount: { amount: any, currencyCode: CurrencyCode }, checkoutChargeAmount: { amount: any, currencyCode: CurrencyCode } }, discountCodes: Array<{ code: string, applicable: boolean }>, discountAllocations: Array<{ discountedAmount: { amount: any, currencyCode: CurrencyCode } } | { discountedAmount: { amount: any, currencyCode: CurrencyCode } } | { discountedAmount: { amount: any, currencyCode: CurrencyCode } }> }; +export type CustomerFragment = { id: string, email?: string | null, firstName?: string | null, lastName?: string | null }; + export type CreateCartMutationVariables = Exact<{ [key: string]: never; }>; @@ -7767,6 +7769,13 @@ export type ProductRecommendationsQueryVariables = Exact<{ export type ProductRecommendationsQuery = { productRecommendations?: Array<{ availableForSale: boolean, createdAt: any, description: string, descriptionHtml: any, handle: string, id: string, isGiftCard: boolean, onlineStoreUrl?: any | null, productType: string, publishedAt: any, requiresSellingPlan: boolean, tags: Array, title: string, totalInventory?: number | null, updatedAt: any, vendor: string, featuredImage?: { altText?: string | null, url: any } | null, images: { nodes: Array<{ altText?: string | null, url: any }> }, media: { nodes: Array<{ alt?: string | null, mediaContentType: MediaContentType, previewImage?: { altText?: string | null, url: any } | null } | { alt?: string | null, mediaContentType: MediaContentType, previewImage?: { altText?: string | null, url: any } | null } | { alt?: string | null, mediaContentType: MediaContentType, previewImage?: { altText?: string | null, url: any } | null } | { alt?: string | null, mediaContentType: MediaContentType, previewImage?: { altText?: string | null, url: any } | null }> }, options: Array<{ name: string, values: Array }>, priceRange: { minVariantPrice: { amount: any, currencyCode: CurrencyCode }, maxVariantPrice: { amount: any, currencyCode: CurrencyCode } }, seo: { title?: string | null, description?: string | null }, variants: { nodes: Array<{ availableForSale: boolean, barcode?: string | null, currentlyNotInStock: boolean, id: string, quantityAvailable?: number | null, requiresShipping: boolean, sku?: string | null, title: string, weight?: number | null, weightUnit: WeightUnit, compareAtPrice?: { amount: any, currencyCode: CurrencyCode } | null, image?: { altText?: string | null, url: any } | null, price: { amount: any, currencyCode: CurrencyCode }, selectedOptions: Array<{ name: string, value: string }>, unitPrice?: { amount: any, currencyCode: CurrencyCode } | null, unitPriceMeasurement?: { measuredType?: UnitPriceMeasurementMeasuredType | null, quantityValue: number, referenceUnit?: UnitPriceMeasurementMeasuredUnit | null, quantityUnit?: UnitPriceMeasurementMeasuredUnit | null } | null }> }, collections: { nodes: Array<{ description: string, descriptionHtml: any, handle: string, id: string, title: string, updatedAt: any, image?: { altText?: string | null, url: any } | null }> } }> | null }; +export type FetchCustomerInfoQueryVariables = Exact<{ + customerAccessToken: Scalars['String']['input']; +}>; + + +export type FetchCustomerInfoQuery = { customer?: { id: string, email?: string | null, firstName?: string | null, lastName?: string | null } | null }; + export type AddItemToCartMutationVariables = Exact<{ cartId: Scalars['ID']['input']; lines: Array | CartLineInput; @@ -7790,3 +7799,11 @@ export type UpdateItemsMutationVariables = Exact<{ export type UpdateItemsMutation = { payload?: { cart?: { id: string, checkoutUrl: any, totalQuantity: number, lines: { nodes: Array<{ id: string, quantity: number, merchandise: { id: string, title: string, image?: { url: any, altText?: string | null } | null, product: { title: string }, price: { amount: any, currencyCode: CurrencyCode } }, cost: { totalAmount: { amount: any, currencyCode: CurrencyCode }, subtotalAmount: { amount: any, currencyCode: CurrencyCode }, amountPerQuantity: { amount: any, currencyCode: CurrencyCode }, compareAtAmountPerQuantity?: { amount: any, currencyCode: CurrencyCode } | null } } | { id: string, quantity: number, merchandise: { id: string, title: string, image?: { url: any, altText?: string | null } | null, product: { title: string }, price: { amount: any, currencyCode: CurrencyCode } }, cost: { totalAmount: { amount: any, currencyCode: CurrencyCode }, subtotalAmount: { amount: any, currencyCode: CurrencyCode }, amountPerQuantity: { amount: any, currencyCode: CurrencyCode }, compareAtAmountPerQuantity?: { amount: any, currencyCode: CurrencyCode } | null } }> }, cost: { subtotalAmount: { amount: any, currencyCode: CurrencyCode }, totalAmount: { amount: any, currencyCode: CurrencyCode }, checkoutChargeAmount: { amount: any, currencyCode: CurrencyCode } }, discountCodes: Array<{ code: string, applicable: boolean }>, discountAllocations: Array<{ discountedAmount: { amount: any, currencyCode: CurrencyCode } } | { discountedAmount: { amount: any, currencyCode: CurrencyCode } } | { discountedAmount: { amount: any, currencyCode: CurrencyCode } }> } | null } | null }; + +export type SignInWithEmailAndPasswordMutationVariables = Exact<{ + email: Scalars['String']['input']; + password: Scalars['String']['input']; +}>; + + +export type SignInWithEmailAndPasswordMutation = { customerAccessTokenCreate?: { customerAccessToken?: { accessToken: string, expiresAt: any } | null, customerUserErrors: Array<{ code?: CustomerErrorCode | null, message: string }> } | null }; diff --git a/wake/loaders/productList.ts b/wake/loaders/productList.ts index 5538b913f..a76ebc019 100644 --- a/wake/loaders/productList.ts +++ b/wake/loaders/productList.ts @@ -142,12 +142,12 @@ const productListLoader = async ( const url = new URL(req.url); const { storefront } = ctx; - console.log(props.filters) - console.log(props.filters) - console.log(props.filters) - console.log(props.filters) - console.log(props.filters) - console.log(props.filters) + console.log(props.filters); + console.log(props.filters); + console.log(props.filters); + console.log(props.filters); + console.log(props.filters); + console.log(props.filters); const headers = parseHeaders(req.headers); diff --git a/wake/loaders/productListingPage.ts b/wake/loaders/productListingPage.ts index d56e5c454..b174c41aa 100644 --- a/wake/loaders/productListingPage.ts +++ b/wake/loaders/productListingPage.ts @@ -201,9 +201,12 @@ const searchLoader = async ( } } - const urlData = await storefront.query({ - variables: { - url: url.pathname, + const urlData = await storefront.query( + { + variables: { + url: url.pathname, + }, + ...GetURL, }, { headers, From 02e403607a376de8a77110e51710f7e6b060c8c7 Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Tue, 8 Oct 2024 22:10:37 -0300 Subject: [PATCH 31/37] add kitGroupId to removeKit action --- wake/actions/cart/removeKit.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wake/actions/cart/removeKit.ts b/wake/actions/cart/removeKit.ts index 928b943ee..0434e2c41 100644 --- a/wake/actions/cart/removeKit.ts +++ b/wake/actions/cart/removeKit.ts @@ -23,7 +23,9 @@ export interface Props { products: KitItem[]; quantity: number; kitId: number; + kitGroupId: string; } + const action = async ( props: Props, req: Request, @@ -32,7 +34,6 @@ const action = async ( const { storefront } = ctx; const cartId = getCartCookie(req.headers); const headers = parseHeaders(req.headers); - const { quantity, kitId, products } = props; if (!cartId) { throw new HttpError(400, "Missing cart cookie"); @@ -42,7 +43,7 @@ const action = async ( RemoveKitMutation, RemoveKitMutationVariables >({ - variables: { input: { id: cartId, quantity, kitId, products } }, + variables: { input: { id: cartId, ...props } }, ...RemoveKit, }, { headers }); From b5e5bf6720af5cb4683ed0f3ab7dc16802fe260b Mon Sep 17 00:00:00 2001 From: decobot Date: Thu, 24 Oct 2024 15:00:59 -0300 Subject: [PATCH 32/37] :wrench: feat: remove delete checkout cookie from logout invoke --- wake/actions/logout.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index 58997742d..ab7003dd9 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -1,6 +1,5 @@ import type { AppContext } from "../mod.ts"; import { deleteCookie } from "std/http/cookie.ts"; -import { CART_COOKIE } from "../utils/cart.ts"; export default function ( _props: object, @@ -9,5 +8,4 @@ export default function ( ) { deleteCookie(response.headers, "customerToken", { path: "/" }); deleteCookie(response.headers, "fbits-login", { path: "/" }); - deleteCookie(response.headers, CART_COOKIE, { path: "/" }); } From 57a0ae52702b6fed6271d0b18d42bced049c05bb Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Fri, 25 Oct 2024 18:52:08 -0300 Subject: [PATCH 33/37] return signup error --- wake/actions/signupPerson.ts | 33 +++++++++++++++++++-------------- wake/utils/error.ts | 7 +++++++ 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 wake/utils/error.ts diff --git a/wake/actions/signupPerson.ts b/wake/actions/signupPerson.ts index 982ad5776..845875fc1 100644 --- a/wake/actions/signupPerson.ts +++ b/wake/actions/signupPerson.ts @@ -5,27 +5,32 @@ import type { CustomerCreateMutationVariables, } from "../utils/graphql/storefront.graphql.gen.ts"; import { CustomerCreate } from "../utils/graphql/queries.ts"; +import type { WakeGraphqlError } from "../utils/error.ts"; // https://wakecommerce.readme.io/docs/storefront-api-customercreate export default async function ( props: Props, req: Request, - { storefront }: AppContext, -): Promise { + { storefront, response }: AppContext, +): Promise { const headers = parseHeaders(req.headers); - const { customerCreate } = await storefront.query< - CustomerCreateMutation, - CustomerCreateMutationVariables - >( - { - variables: { input: { ...props, customerType: "PERSON" } }, - ...CustomerCreate, - }, - { headers }, - ); - - return customerCreate ?? null; + try { + const { customerCreate } = await storefront.query< + CustomerCreateMutation, + CustomerCreateMutationVariables + >( + { + variables: { input: { ...props, customerType: "PERSON" } }, + ...CustomerCreate, + }, + { headers }, + ); + return customerCreate ?? null; + } catch (err) { + response.status = 400; + return err as WakeGraphqlError; + } } interface Props { diff --git a/wake/utils/error.ts b/wake/utils/error.ts new file mode 100644 index 000000000..a9f4c086f --- /dev/null +++ b/wake/utils/error.ts @@ -0,0 +1,7 @@ +export interface WakeGraphqlError { + message: string; + path: string[]; + extensions?: { + code: string; + }; +} From 5d4bb94e011e8a2f14e9e89b68c9cde646d6a06f Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Fri, 25 Oct 2024 18:52:46 -0300 Subject: [PATCH 34/37] revert delete cookie --- wake/actions/logout.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wake/actions/logout.ts b/wake/actions/logout.ts index ab7003dd9..58997742d 100644 --- a/wake/actions/logout.ts +++ b/wake/actions/logout.ts @@ -1,5 +1,6 @@ import type { AppContext } from "../mod.ts"; import { deleteCookie } from "std/http/cookie.ts"; +import { CART_COOKIE } from "../utils/cart.ts"; export default function ( _props: object, @@ -8,4 +9,5 @@ export default function ( ) { deleteCookie(response.headers, "customerToken", { path: "/" }); deleteCookie(response.headers, "fbits-login", { path: "/" }); + deleteCookie(response.headers, CART_COOKIE, { path: "/" }); } From 9823dc85960a9a0bf6ca770fca444d740170b6f8 Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Mon, 28 Oct 2024 09:27:58 -0300 Subject: [PATCH 35/37] signupPerson: return err --- wake/actions/signupPerson.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/wake/actions/signupPerson.ts b/wake/actions/signupPerson.ts index 845875fc1..55a543885 100644 --- a/wake/actions/signupPerson.ts +++ b/wake/actions/signupPerson.ts @@ -12,7 +12,7 @@ export default async function ( props: Props, req: Request, { storefront, response }: AppContext, -): Promise { +): Promise { const headers = parseHeaders(req.headers); try { @@ -28,8 +28,12 @@ export default async function ( ); return customerCreate ?? null; } catch (err) { - response.status = 400; - return err as WakeGraphqlError; + if (Array.isArray(err)) { + return err as WakeGraphqlError[]; + } + + response.status = 500; + return null } } From d6777adfdcac083c647dea567117e2806de7803f Mon Sep 17 00:00:00 2001 From: viktormarinho Date: Mon, 28 Oct 2024 13:43:06 -0300 Subject: [PATCH 36/37] fix: addCoupon action --- wake/actions/cart/addCoupon.ts | 6 +++++- wake/utils/graphql/queries.ts | 3 ++- wake/utils/graphql/storefront.graphql.gen.ts | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/wake/actions/cart/addCoupon.ts b/wake/actions/cart/addCoupon.ts index d59c61015..d87f2f790 100644 --- a/wake/actions/cart/addCoupon.ts +++ b/wake/actions/cart/addCoupon.ts @@ -9,6 +9,8 @@ import type { CheckoutFragment, } from "../../utils/graphql/storefront.graphql.gen.ts"; import { parseHeaders } from "../../utils/parseHeaders.ts"; +import ensureCustomerToken from "../../utils/ensureCustomerToken.ts"; +import authenticate from "../../utils/authenticate.ts"; export interface Props { coupon: string; @@ -22,18 +24,20 @@ const action = async ( const { storefront } = ctx; const cartId = getCartCookie(req.headers); const headers = parseHeaders(req.headers); + const customerAccessToken = ensureCustomerToken(await authenticate(req, ctx)); if (!cartId) { throw new HttpError(400, "Missing cart cookie"); } try { + const variables = { checkoutId: cartId, customerAccessToken, ...props }; const data = await storefront.query< AddCouponMutation, AddCouponMutationVariables >( { - variables: { checkoutId: cartId, ...props }, + variables, ...AddCoupon, }, { headers }, diff --git a/wake/utils/graphql/queries.ts b/wake/utils/graphql/queries.ts index acca1ad36..5f2d99e4c 100644 --- a/wake/utils/graphql/queries.ts +++ b/wake/utils/graphql/queries.ts @@ -1124,10 +1124,11 @@ export const Search = { export const AddCoupon = { fragments: [Checkout], - query: gql`mutation AddCoupon($checkoutId: Uuid!, $coupon: String!) { + query: gql`mutation AddCoupon($checkoutId: Uuid!, $coupon: String!, $customerAccessToken: String!) { checkout: checkoutAddCoupon( checkoutId: $checkoutId coupon: $coupon + customerAccessToken: $customerAccessToken ) { ...Checkout } }`, }; diff --git a/wake/utils/graphql/storefront.graphql.gen.ts b/wake/utils/graphql/storefront.graphql.gen.ts index 12c46b945..1f202f32e 100644 --- a/wake/utils/graphql/storefront.graphql.gen.ts +++ b/wake/utils/graphql/storefront.graphql.gen.ts @@ -5065,6 +5065,7 @@ export type SearchQuery = { result?: { pageSize: number, redirectUrl?: string | export type AddCouponMutationVariables = Exact<{ checkoutId: Scalars['Uuid']['input']; coupon: Scalars['String']['input']; + customerAccessToken: Scalars['String']['input']; }>; From c1ba72a4442df0df3f668b572017eaa800c6ca5d Mon Sep 17 00:00:00 2001 From: decobot Date: Wed, 30 Oct 2024 20:58:25 -0400 Subject: [PATCH 37/37] fix: similar products in pdp if it's a buyList --- wake/loaders/productDetailsPage.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/wake/loaders/productDetailsPage.ts b/wake/loaders/productDetailsPage.ts index 1316a98a1..f7692ee1c 100644 --- a/wake/loaders/productDetailsPage.ts +++ b/wake/loaders/productDetailsPage.ts @@ -121,6 +121,20 @@ async function loader( }) ?? [] : []; + const buyListSimilarProducts = wakeProductOrBuyList.similarProducts?.length + ? await ctx.invoke.wake.loaders.productList({ + first: wakeProductOrBuyList.similarProducts.length, + sortDirection: 'ASC', + filters: { + productId: wakeProductOrBuyList.similarProducts?.map( + (sp) => Number(sp!.alias?.split('-').at(-1)) + ), + mainVariant: true + }, + getVariations: true + }) + : null + const product = toProduct( wakeProductOrBuyList, { base: url }, @@ -143,6 +157,7 @@ async function loader( }; }, ) ?? [], + isSimilarTo: buyListSimilarProducts ?? product.isSimilarTo }, seo: { canonical: product.isVariantOf?.url ?? "",