@faststore/api 2.2.0-alpha.6 → 2.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"api.esm.js","sources":["../src/platforms/vtex/clients/fetch.ts","../src/platforms/vtex/clients/commerce/index.ts","../src/platforms/vtex/clients/search/index.ts","../src/platforms/vtex/clients/sp/index.ts","../src/platforms/vtex/clients/index.ts","../src/platforms/vtex/loaders/salesChannel.ts","../src/platforms/vtex/loaders/simulation.ts","../src/platforms/vtex/utils/enhanceSku.ts","../src/platforms/errors.ts","../src/platforms/vtex/loaders/sku.ts","../src/platforms/vtex/loaders/collection.ts","../src/platforms/vtex/loaders/index.ts","../src/platforms/vtex/utils/productStock.ts","../src/platforms/vtex/resolvers/aggregateOffer.ts","../src/platforms/vtex/resolvers/aggregateRating.ts","../src/platforms/vtex/utils/slugify.ts","../src/platforms/vtex/resolvers/collection.ts","../src/platforms/vtex/utils/facets.ts","../src/platforms/vtex/utils/orderStatistics.ts","../src/platforms/vtex/resolvers/facet.ts","../src/platforms/vtex/resolvers/faceValue.ts","../src/platforms/vtex/resolvers/subscribeToNewsletter.ts","../src/platforms/vtex/utils/channel.ts","../src/platforms/vtex/utils/contex.ts","../src/platforms/vtex/utils/md5.ts","../src/platforms/vtex/utils/propertyValue.ts","../src/platforms/vtex/utils/shouldUpdateShippingData.ts","../src/platforms/vtex/utils/getAddressOrderForm.ts","../src/platforms/vtex/utils/createNewAddress.ts","../src/platforms/vtex/resolvers/validateCart.ts","../src/platforms/vtex/resolvers/validateSession.ts","../src/platforms/vtex/resolvers/mutation.ts","../src/platforms/vtex/resolvers/objectOrString.ts","../src/platforms/vtex/resolvers/offer.ts","../src/platforms/vtex/utils/canonical.ts","../src/platforms/vtex/utils/enhanceCommercialOffer.ts","../src/platforms/vtex/resolvers/product.ts","../src/platforms/vtex/resolvers/productGroup.ts","../src/platforms/vtex/resolvers/propertyValue.ts","../src/platforms/vtex/utils/sort.ts","../src/platforms/vtex/utils/sku.ts","../src/platforms/vtex/resolvers/query.ts","../src/platforms/vtex/resolvers/review.ts","../src/platforms/vtex/resolvers/searchResult.ts","../src/platforms/vtex/resolvers/seo.ts","../src/platforms/vtex/resolvers/shippingSLA.ts","../src/platforms/vtex/utils/skuVariants.ts","../src/platforms/vtex/resolvers/skuVariations.ts","../src/platforms/vtex/index.ts","../src/typeDefs/index.ts","../src/directives/cacheControl.ts","../src/telemetry/useFaststoreTelemetry.ts","../src/telemetry/index.ts","../src/index.ts"],"sourcesContent":["import fetch from 'isomorphic-unfetch'\nimport packageJson from '../../../../package.json'\n\nconst USER_AGENT = `${packageJson.name}@${packageJson.version}`\n\nexport const fetchAPI = async (info: RequestInfo, init?: RequestInit) => {\n const response = await fetch(info, {\n ...init,\n headers: {\n ...init?.headers,\n 'User-Agent': USER_AGENT,\n },\n })\n\n if (response.ok) {\n return response.status !== 204 ? response.json() : undefined\n }\n\n console.error(info, init, response)\n const text = await response.text()\n\n throw new Error(text)\n}\n","import { FACET_CROSS_SELLING_MAP } from '../../utils/facets'\nimport { fetchAPI } from '../fetch'\n\nimport type { PortalProduct } from './types/Product'\nimport type { Context, Options } from '../../index'\nimport type { Brand } from './types/Brand'\nimport type { CategoryTree } from './types/CategoryTree'\nimport type { OrderForm, OrderFormInputItem } from './types/OrderForm'\nimport type { PortalPagetype } from './types/Portal'\nimport type { Region, RegionInput } from './types/Region'\nimport type {\n Simulation,\n SimulationArgs,\n SimulationOptions,\n} from './types/Simulation'\nimport type { Session } from './types/Session'\nimport type { Channel } from '../../utils/channel'\nimport type { SalesChannel } from './types/SalesChannel'\nimport { MasterDataResponse } from './types/Newsletter'\nimport type { Address, AddressInput } from './types/Address'\nimport { DeliveryMode, SelectedAddress } from './types/ShippingData'\n\ntype ValueOf<T> = T extends Record<string, infer K> ? K : never\n\nconst BASE_INIT = {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n}\n\nexport const VtexCommerce = (\n { account, environment, incrementAddress }: Options,\n ctx: Context\n) => {\n const base = `https://${account}.${environment}.com.br`\n\n return {\n catalog: {\n salesChannel: (sc: string): Promise<SalesChannel> =>\n fetchAPI(`${base}/api/catalog_system/pub/saleschannel/${sc}`),\n brand: {\n list: (): Promise<Brand[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/brand/list`),\n },\n category: {\n tree: (depth = 3): Promise<CategoryTree[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/category/tree/${depth}`),\n },\n portal: {\n pagetype: (slug: string): Promise<PortalPagetype> =>\n fetchAPI(`${base}/api/catalog_system/pub/portal/pagetype/${slug}`),\n },\n products: {\n crossselling: ({\n type,\n productId,\n groupByProduct = true,\n }: {\n type: ValueOf<typeof FACET_CROSS_SELLING_MAP>\n productId: string\n groupByProduct?: boolean\n }): Promise<PortalProduct[]> => {\n const params = new URLSearchParams({\n sc: ctx.storage.channel.salesChannel,\n groupByProduct: groupByProduct.toString(),\n })\n\n return fetchAPI(\n `${base}/api/catalog_system/pub/products/crossselling/${type}/${productId}?${params}`\n )\n },\n },\n },\n checkout: {\n simulation: (\n args: SimulationArgs,\n { salesChannel }: SimulationOptions = ctx.storage.channel\n ): Promise<Simulation> => {\n const params = new URLSearchParams({\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForms/simulation?${params.toString()}`,\n {\n ...BASE_INIT,\n body: JSON.stringify(args),\n }\n )\n },\n\n shippingData: (\n {\n id,\n index,\n deliveryMode,\n selectedAddresses,\n }: {\n id: string\n index: number\n deliveryMode?: DeliveryMode | null\n selectedAddresses: SelectedAddress[]\n },\n setDeliveryWindow?: boolean\n ): Promise<OrderForm> => {\n const deliveryWindow = setDeliveryWindow\n ? {\n startDateUtc: deliveryMode?.deliveryWindow?.startDate,\n endDateUtc: deliveryMode?.deliveryWindow?.endDate,\n }\n : null\n\n const mappedBody = {\n logisticsInfo: Array.from({ length: index }, (_, itemIndex) => ({\n itemIndex,\n selectedDeliveryChannel: deliveryMode?.deliveryChannel || null,\n selectedSla: deliveryMode?.deliveryMethod || null,\n deliveryWindow: deliveryWindow,\n })),\n selectedAddresses: selectedAddresses,\n clearAddressIfPostalCodeNotFound: incrementAddress,\n }\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/attachments/shippingData`,\n {\n ...BASE_INIT,\n body: JSON.stringify(mappedBody),\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n }\n )\n },\n\n orderForm: ({\n id,\n refreshOutdatedData = true,\n channel = ctx.storage.channel,\n }: {\n id: string\n refreshOutdatedData?: boolean\n channel?: Required<Channel>\n }): Promise<OrderForm> => {\n const { salesChannel } = channel\n const params = new URLSearchParams({\n refreshOutdatedData: refreshOutdatedData.toString(),\n sc: salesChannel,\n })\n const requestInit: RequestInit = ctx.headers\n ? {\n ...BASE_INIT,\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n }\n : BASE_INIT\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}?${params.toString()}`,\n requestInit\n )\n },\n updateOrderFormItems: ({\n id,\n orderItems,\n allowOutdatedData = 'paymentData',\n salesChannel = ctx.storage.channel.salesChannel,\n shouldSplitItem = true,\n }: {\n id: string\n orderItems: OrderFormInputItem[]\n allowOutdatedData?: 'paymentData'\n salesChannel?: string\n shouldSplitItem?: boolean | null\n }): Promise<OrderForm> => {\n const params = new URLSearchParams({\n allowOutdatedData,\n sc: salesChannel,\n })\n\n const items = JSON.stringify({\n orderItems,\n noSplitItem: !shouldSplitItem,\n })\n\n const requestInit: RequestInit = ctx.headers\n ? {\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n body: items,\n method: 'PATCH',\n }\n : {\n headers: {\n 'content-type': 'application/json',\n },\n body: items,\n method: 'PATCH',\n }\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/items?${params}`,\n requestInit\n )\n },\n setCustomData: ({\n id,\n appId,\n key,\n value,\n }: {\n id: string\n appId: string\n key: string\n value: string\n }): Promise<OrderForm> => {\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/customData/${appId}/${key}`,\n {\n ...BASE_INIT,\n body: JSON.stringify({ value }),\n method: 'PUT',\n }\n )\n },\n region: async ({\n postalCode,\n geoCoordinates,\n country,\n salesChannel,\n }: RegionInput): Promise<Region[]> => {\n const params = new URLSearchParams({\n country: country,\n sc: salesChannel ?? '',\n })\n\n postalCode\n ? params.append('postalCode', postalCode)\n : params.append(\n 'geoCoordinates',\n `${geoCoordinates?.longitude};${geoCoordinates?.latitude}`\n )\n\n const url = `${base}/api/checkout/pub/regions/?${params.toString()}`\n return fetchAPI(url)\n },\n address: async ({\n postalCode,\n country,\n }: AddressInput): Promise<Address> => {\n return fetchAPI(\n `${base}/api/checkout/pub/postal-code/${country}/${postalCode}`\n )\n },\n },\n session: (search: string): Promise<Session> => {\n const params = new URLSearchParams(search)\n\n params.set(\n 'items',\n 'profile.id,profile.email,profile.firstName,profile.lastName,store.channel,store.countryCode,store.cultureInfo,store.currencyCode,store.currencySymbol'\n )\n return fetchAPI(`${base}/api/sessions?${params.toString()}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n body: '{}',\n })\n },\n subscribeToNewsletter: (data: {\n name: string\n email: string\n }): Promise<MasterDataResponse> => {\n return fetchAPI(`${base}/api/dataentities/NL/documents/`, {\n ...BASE_INIT,\n body: JSON.stringify({ ...data, isNewsletterOptIn: true }),\n method: 'PATCH',\n })\n },\n }\n}\n","import { fetchAPI } from '../fetch'\nimport type { IStoreSelectedFacet } from '../../../../__generated__/schema'\nimport type { Context, Options } from '../../'\nimport type { SelectedFacet } from '../../utils/facets'\nimport type {\n Facet,\n FacetValueBoolean,\n FacetSearchResult,\n} from './types/FacetSearchResult'\nimport type {\n ProductSearchResult,\n Suggestion,\n} from './types/ProductSearchResult'\n\nexport type Sort =\n | 'price:desc'\n | 'price:asc'\n | 'orders:desc'\n | 'name:desc'\n | 'name:asc'\n | 'release:desc'\n | 'discount:desc'\n | ''\n\nexport interface SearchArgs {\n query?: string\n page: number\n count: number\n type: 'product_search' | 'facets'\n sort?: Sort\n selectedFacets?: SelectedFacet[]\n fuzzy?: '0' | '1' | 'auto'\n hideUnavailableItems?: boolean\n}\n\nexport interface ProductLocator {\n field: 'id' | 'slug'\n value: string\n}\n\nconst POLICY_KEY = 'trade-policy'\nconst REGION_KEY = 'region-id'\nconst CHANNEL_KEYS = new Set([POLICY_KEY, REGION_KEY])\n\nexport const isFacetBoolean = (\n facet: Facet\n): facet is Facet<FacetValueBoolean> => facet.type === 'TEXT'\n\nexport const IntelligentSearch = (\n { account, environment, hideUnavailableItems }: Options,\n ctx: Context\n) => {\n const base = `https://${account}.${environment}.com.br/api/io`\n\n const getPolicyFacet = (): IStoreSelectedFacet | null => {\n const { salesChannel } = ctx.storage.channel\n\n if (!salesChannel) {\n return null\n }\n\n return {\n key: POLICY_KEY,\n value: salesChannel,\n }\n }\n\n const getRegionFacet = (): IStoreSelectedFacet | null => {\n const { regionId, seller } = ctx.storage.channel\n const sellerRegionId = seller\n ? Buffer.from(`SW#${seller}`).toString('base64')\n : null\n const facet = sellerRegionId ?? regionId\n\n if (!facet) {\n return null\n }\n\n return {\n key: REGION_KEY,\n value: facet,\n }\n }\n\n const addDefaultFacets = (facets: SelectedFacet[]) => {\n const withDefaultFacets = facets.filter(({ key }) => !CHANNEL_KEYS.has(key))\n\n const policyFacet =\n facets.find(({ key }) => key === POLICY_KEY) ?? getPolicyFacet()\n\n const regionFacet =\n facets.find(({ key }) => key === REGION_KEY) ?? getRegionFacet()\n\n if (policyFacet !== null) {\n withDefaultFacets.push(policyFacet)\n }\n\n if (regionFacet !== null) {\n withDefaultFacets.push(regionFacet)\n }\n\n return withDefaultFacets\n }\n\n const search = <T>({\n query = '',\n page,\n count,\n sort = '',\n selectedFacets = [],\n type,\n fuzzy = 'auto',\n }: SearchArgs): Promise<T> => {\n const params = new URLSearchParams({\n page: (page + 1).toString(),\n count: count.toString(),\n query,\n sort,\n fuzzy,\n locale: ctx.storage.locale,\n })\n\n if (hideUnavailableItems !== undefined) {\n params.append('hideUnavailableItems', hideUnavailableItems.toString())\n }\n\n const pathname = addDefaultFacets(selectedFacets)\n .map(({ key, value }) => `${key}/${value}`)\n .join('/')\n\n return fetchAPI(\n `${base}/_v/api/intelligent-search/${type}/${pathname}?${params.toString()}`\n )\n }\n\n const products = (args: Omit<SearchArgs, 'type'>) =>\n search<ProductSearchResult>({ ...args, type: 'product_search' })\n\n const suggestedTerms = (\n args: Omit<SearchArgs, 'type'>\n ): Promise<Suggestion> => {\n const params = new URLSearchParams({\n query: args.query?.toString() ?? '',\n locale: ctx.storage.locale,\n })\n\n return fetchAPI(\n `${base}/_v/api/intelligent-search/search_suggestions?${params.toString()}`\n )\n }\n\n const topSearches = (): Promise<Suggestion> => {\n const params = new URLSearchParams({\n locale: ctx.storage.locale,\n })\n\n return fetchAPI(\n `${base}/_v/api/intelligent-search/top_searches?${params.toString()}`\n )\n }\n\n const facets = (args: Omit<SearchArgs, 'type'>) =>\n search<FacetSearchResult>({ ...args, type: 'facets' })\n\n return {\n facets,\n products,\n suggestedTerms,\n topSearches,\n }\n}\n","/**\n * Client for SP, Intelligent search's analytics event API\n * More info at: https://www.notion.so/vtexhandbook/Event-API-Documentation-48eee26730cf4d7f80f8fd7262231f84\n */\nimport { fetchAPI } from '../fetch'\nimport type { Options, Context } from '../../'\n\nconst THIRTY_MINUTES_S = 30 * 60\nconst ONE_YEAR_S = 365 * 24 * 3600\n\nconst randomUUID = () => (Math.random() * 1e6).toFixed(0)\n\nconst timelapsed = (past: number) => (Date.now() - past) / 1e3\n\nconst createId = (expiresSecond: number) => {\n let payload = randomUUID()\n let createdAt = Date.now()\n\n return () => {\n if (timelapsed(createdAt) > expiresSecond) {\n payload = randomUUID()\n createdAt = Date.now()\n }\n\n return payload\n }\n}\n\nconst user = {\n anonymous: createId(ONE_YEAR_S),\n session: createId(THIRTY_MINUTES_S),\n}\n\nexport type SearchEvent = {\n type: 'search.query'\n text: string // 'zapatilha'\n misspelled: boolean\n match: number\n operator: 'and' | 'or'\n locale: string\n session?: string\n anonymous?: string\n}\n\nexport const SP = ({ account }: Options, _: Context) => {\n const base = `https://sp.vtex.com/event-api/v1/${account}/event`\n\n const sendEvent = (options: SearchEvent) => {\n return fetchAPI(base, {\n method: 'POST',\n body: JSON.stringify({\n ...options,\n agent: '@faststore/api',\n anonymous: user.anonymous(), // 'zZlNhqz1vFJP6iPG5Oqtt'\n session: user.session(), // 'Om1TNluGvgmSgU5OOTvkkd'\n }),\n headers: {\n 'content-type': 'application/json',\n },\n })\n }\n\n return {\n sendEvent,\n }\n}\n","import { VtexCommerce } from './commerce'\nimport { IntelligentSearch } from './search'\nimport { SP } from './sp'\nimport type { Context, Options } from '..'\n\nexport type Clients = ReturnType<typeof getClients>\n\nexport const getClients = (options: Options, ctx: Context) => {\n const search = IntelligentSearch(options, ctx)\n const commerce = VtexCommerce(options, ctx)\n const sp = SP(options, ctx)\n\n return {\n search,\n commerce,\n sp,\n }\n}\n","import DataLoader from \"dataloader\";\n\nimport { Options } from \"..\";\nimport { Clients } from \"../clients\";\n\nimport type { SalesChannel } from \"./../clients/commerce/types/SalesChannel\";\n\nexport const getSalesChannelLoader = (_: Options, clients: Clients) => {\n const loader = async (channels: readonly string[]) =>\n Promise.all(\n channels.map((sc) => clients.commerce.catalog.salesChannel(sc)),\n );\n\n return new DataLoader<string, SalesChannel>(loader);\n};\n","import DataLoader from 'dataloader'\nimport pLimit from 'p-limit'\n\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\nimport type {\n ShippingItem,\n Simulation,\n SimulationArgs,\n} from '../clients/commerce/types/Simulation'\n\n// Limits concurrent requests to the API per request cycle\nconst CONCURRENT_REQUESTS_MAX = 1\n\nexport const getSimulationLoader = (_: Options, clients: Clients) => {\n const limit = pLimit(CONCURRENT_REQUESTS_MAX)\n\n const loader = async (simulationArgs: readonly SimulationArgs[]) => {\n const allItems = simulationArgs.reduce((acc, { items }: SimulationArgs) => {\n return [...acc, items]\n }, [] as ShippingItem[][])\n\n const items = [...allItems.flat()]\n const simulation = await clients.commerce.checkout.simulation({\n country: simulationArgs[0].country,\n postalCode: simulationArgs[0].postalCode,\n items,\n })\n\n // Sort and filter simulation since Checkout API may return\n // items that we didn't ask for\n const simulated = simulation.items.reduce((acc, item) => {\n const index = item.requestIndex\n\n if (typeof index === 'number' && index < acc.length) {\n acc[index] = item\n }\n\n return acc\n }, Array(items.length).fill(null) as Simulation['items'])\n\n const itemsIndices = allItems.reduce(\n (acc, curr) => [...acc, curr.length + acc[acc.length - 1]],\n [0]\n )\n\n return allItems.map((__, index) => ({\n ...simulation,\n items: simulated\n .slice(itemsIndices[index], itemsIndices[index + 1])\n .filter((item) => Boolean(item)),\n }))\n }\n\n const limited = async (allItems: readonly SimulationArgs[]) =>\n limit(loader, allItems)\n\n return new DataLoader<SimulationArgs, Simulation>(limited, {\n maxBatchSize: 50,\n })\n}\n","import type { Product, Item } from '../clients/search/types/ProductSearchResult'\n\nexport type EnhancedSku = Item & { isVariantOf: Product }\n\nexport const enhanceSku = (item: Item, product: Product): EnhancedSku => ({\n ...item,\n isVariantOf: product,\n})\n","type ErrorType = 'BadRequestError' | 'NotFoundError' | 'RedirectError'\n\ninterface Extension {\n type: ErrorType\n status: number\n}\n\nclass FastStoreError<T extends Extension = Extension> extends Error {\n constructor(public extensions: T, message?: string) {\n super(message)\n this.name = 'FastStoreError'\n }\n}\n\nexport class BadRequestError extends FastStoreError {\n constructor(message?: string) {\n super({ status: 400, type: 'BadRequestError' }, message)\n }\n}\n\nexport class NotFoundError extends FastStoreError {\n constructor(message?: string) {\n super({ status: 404, type: 'NotFoundError' }, message)\n }\n}\n\nexport const isFastStoreError = (error: any): error is FastStoreError =>\n error?.name === 'FastStoreError'\n\nexport const isNotFoundError = (error: any): error is NotFoundError =>\n error?.extensions?.type === 'NotFoundError'\n\nexport const isBadRequestError = (error: any): error is BadRequestError =>\n error?.extensions?.type === 'BadRequestError'\n","import DataLoader from 'dataloader'\n\nimport { enhanceSku } from '../utils/enhanceSku'\nimport { NotFoundError } from '../../errors'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\nexport const getSkuLoader = (_: Options, clients: Clients) => {\n const loader = async (skuIds: readonly string[]) => {\n const { products } = await clients.search.products({\n query: `sku:${skuIds.join(';')}`,\n page: 0,\n count: skuIds.length,\n })\n\n const skuBySkuId = products.reduce((acc, product) => {\n for (const sku of product.items) {\n acc[sku.itemId] = enhanceSku(sku, product)\n }\n\n return acc\n }, {} as Record<string, EnhancedSku>)\n\n const skus = skuIds.map((skuId) => skuBySkuId[skuId])\n const missingSkus = skuIds.filter((skuId) => !skuBySkuId[skuId])\n\n if (missingSkus.length > 0) {\n throw new NotFoundError(\n `Search API did not found the following skus: ${missingSkus.join(',')}`\n )\n }\n\n return skus\n }\n\n return new DataLoader<string, EnhancedSku>(loader, {\n maxBatchSize: 99, // Max allowed batch size of Search API\n })\n}\n","import DataLoader from 'dataloader'\nimport pLimit from 'p-limit'\n\nimport { NotFoundError } from '../../errors'\nimport type { CollectionPageType } from '../clients/commerce/types/Portal'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\n// Limits concurrent requests to 20 so that they don't timeout\nconst CONCURRENT_REQUESTS_MAX = 20\n\nconst collectionPageTypes = new Set([\n 'brand',\n 'category',\n 'department',\n 'subcategory',\n 'collection',\n 'cluster',\n] as const)\n\nexport const isCollectionPageType = (x: any): x is CollectionPageType =>\n typeof x.pageType === 'string' &&\n collectionPageTypes.has(x.pageType.toLowerCase())\n\nexport const getCollectionLoader = (_: Options, clients: Clients) => {\n const limit = pLimit(CONCURRENT_REQUESTS_MAX)\n\n const loader = async (\n slugs: readonly string[]\n ): Promise<CollectionPageType[]> => {\n return Promise.all(\n slugs.map((slug: string) =>\n limit(async () => {\n const page = await clients.commerce.catalog.portal.pagetype(slug)\n\n if (isCollectionPageType(page)) {\n return page\n }\n\n throw new NotFoundError(\n `Catalog returned ${page.pageType} for slug: ${slug}. This usually happens when there is more than one category with the same name in the same category tree level.`\n )\n })\n )\n )\n }\n\n return new DataLoader<string, CollectionPageType>(loader, {\n // DataLoader is being used to cache requests, not to batch them\n batch: false,\n })\n}\n","import { getSalesChannelLoader } from './salesChannel';\nimport { getSimulationLoader } from './simulation'\nimport { getSkuLoader } from './sku'\nimport { getCollectionLoader } from './collection'\nimport type { Context, Options } from '..'\n\nexport type Loaders = ReturnType<typeof getLoaders>\n\nexport const getLoaders = (options: Options, { clients }: Context) => {\n const skuLoader = getSkuLoader(options, clients)\n const simulationLoader = getSimulationLoader(options, clients)\n const collectionLoader = getCollectionLoader(options, clients)\n const salesChannelLoader = getSalesChannelLoader(options, clients)\n\n return {\n skuLoader,\n simulationLoader,\n collectionLoader,\n salesChannelLoader\n }\n}\n","import type { CommertialOffer } from '../clients/search/types/ProductSearchResult'\n\nexport const inStock = (offer: Pick<CommertialOffer, 'AvailableQuantity'>) =>\n offer.AvailableQuantity > 0\n\nexport const price = (offer: Pick<CommertialOffer, 'spotPrice'>) =>\n offer.spotPrice ?? 0\nexport const sellingPrice = (offer: CommertialOffer) => offer.Price ?? 0\n\nexport const availability = (available: boolean) =>\n available ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock'\n\n// Smallest Available Spot Price First\nexport const bestOfferFirst = (\n a: Pick<CommertialOffer, 'AvailableQuantity' | 'spotPrice'>,\n b: Pick<CommertialOffer, 'AvailableQuantity' | 'spotPrice'>\n) => {\n if (inStock(a) && !inStock(b)) {\n return -1\n }\n\n if (!inStock(a) && inStock(b)) {\n return 1\n }\n\n return price(a) - price(b)\n}\n\nexport const inStockOrderFormItem = (itemAvailability: string) =>\n itemAvailability === 'available'\n","import { inStock, price } from '../utils/productStock'\nimport type { StoreProduct } from './product'\nimport type { PromiseType } from '../../../typings'\nimport type { Resolver } from '..'\n\nexport type Root = PromiseType<ReturnType<typeof StoreProduct.offers>>\n\nexport const StoreAggregateOffer: Record<string, Resolver<Root>> & {\n offers: Resolver<Root, any, Root>\n} = {\n highPrice: (offers) => {\n const availableOffers = offers.filter(inStock)\n const highOffer = availableOffers[availableOffers.length - 1]\n\n return highOffer != null ? price(highOffer) : 0\n },\n lowPrice: (offers) => {\n const [lowOffer] = offers.filter(inStock)\n\n return lowOffer ? price(lowOffer) : 0\n },\n offerCount: (offers) => offers.length,\n priceCurrency: async (_, __, ctx) => {\n const { \n loaders: { salesChannelLoader }, \n storage: { channel } \n } = ctx\n\n const sc = await salesChannelLoader.load(channel.salesChannel);\n \n return sc.CurrencyCode ?? '';\n },\n offers: (offers) => offers,\n}\n","import type { Resolver } from '..'\n\n// TODO: Add a review system integration\nexport const StoreAggregateRating: Record<string, Resolver> = {\n ratingValue: () => 5,\n reviewCount: () => 0,\n}\n","/**\n * VTEX catalog slugify function\n *\n * Copied from:\n * https://github.com/vtex/rewriter/blob/1ce2010783e0586cab42534ce2fb7a983d8a3a84/node/clients/catalog.ts#L72\n *\n * Sometimes, we need to slugify strings for creating urls. An example is the\n * brand urls, where we create them from the brand's name.\n * This slugify function should match exactly what VTEX catalog generates. Any mismatch\n * will lead to broken links.\n * Hopefully, we had this function implemented on VTEX IO and we've been using it for\n * years now. However, looking at the code, I think we can save lots of computing. I'm\n * in a hurry for doing these tests now, so I'll leave a small TODO.\n *\n * TODO: Research for better ways of computing this slugify function. Things I'd try are:\n * - Join those 3 regexs for special characters into a single one.\n * - Replace the regexp of `removeDiacritics` function with a Map. We can make the complexity\n * of this function be O(n) with n=string.length\n *\n */\nconst from =\n 'ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆÍÌÎÏŇÑÓÖÒÔÕØŘŔŠŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇíìîïňñóöòôõøðřŕšťúůüùûýÿžþÞĐđ߯a'\n\nconst to =\n 'AAAAAACCCDEEEEEEEEIIIINNOOOOOORRSTUUUUUYYZaaaaaacccdeeeeeeeeiiiinnooooooorrstuuuuuyyzbBDdBAa'\n\nconst removeDiacritics = (str: string) => {\n let newStr = str.slice(0)\n\n for (let i = 0; i < from.length; i++) {\n newStr = newStr.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i))\n }\n\n return newStr\n}\n\nconst slugifySpecialCharacters = (str: string) => {\n return str.replace(/[·/_,:]/, '-')\n}\n\nexport function slugify(str: string) {\n const noCommas = str.replace(/,/g, '')\n const replaced = noCommas.replace(/[*+~.()'\"!:@&\\[\\]`/ %$#?{}|><=_^]/g, '-')\n const slugified = slugifySpecialCharacters(removeDiacritics(replaced))\n\n return slugified.toLowerCase()\n}\n","import { isCollectionPageType } from '../loaders/collection'\nimport { slugify } from '../utils/slugify'\nimport type { Resolver } from '..'\nimport type { Brand } from '../clients/commerce/types/Brand'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { CollectionPageType } from '../clients/commerce/types/Portal'\n\nexport type Root = Brand | (CategoryTree & { level: number }) | CollectionPageType\n\nconst isBrand = (x: any): x is Brand | CollectionPageType =>\n x.type === 'brand' ||\n (isCollectionPageType(x) && x.pageType.toLowerCase() === 'brand')\n\nconst isCollection = (x: Root): x is CollectionPageType =>\n isCollectionPageType(x) && x.pageType.toLowerCase() === 'collection'\n\nconst slugifyRoot = (root: Root) => {\n if (isBrand(root) || isCollection(root)) {\n return slugify(root.name)\n }\n\n if (isCollectionPageType(root)) {\n return new URL(`https://${root.url}`).pathname.slice(1).toLowerCase()\n }\n\n return new URL(root.url).pathname.slice(1).toLowerCase()\n}\n\nexport const StoreCollection: Record<string, Resolver<Root>> = {\n id: ({ id }) => id.toString(),\n slug: (root) => slugifyRoot(root),\n seo: (root) =>\n isBrand(root) || isCollectionPageType(root)\n ? {\n title: root.title,\n description: root.metaTagDescription,\n }\n : {\n title: root.Title,\n description: root.MetaTagDescription,\n },\n type: (root) =>\n isBrand(root)\n ? 'Brand'\n : isCollectionPageType(root)\n ? root.pageType\n : root.level === 0\n ? 'Department'\n : 'Category',\n meta: (root) => {\n const slug = slugifyRoot(root)\n\n return isBrand(root)\n ? {\n selectedFacets: [{ key: 'brand', value: slug }],\n }\n : isCollection(root)\n ? {\n selectedFacets: [{ key: 'productclusterids', value: root.id }],\n }\n : {\n selectedFacets: slug.split('/').map((segment, index) => ({\n key: `category-${index + 1}`,\n value: segment,\n })),\n }\n },\n breadcrumbList: async (root, _, ctx) => {\n const {\n loaders: { collectionLoader },\n } = ctx\n\n const slug = slugifyRoot(root)\n\n /**\n * Split slug into segments so we fetch all data for\n * the breadcrumb. For instance, if we get `/foo/bar`\n * we need all metadata for both `/foo` and `/bar` and\n * thus we need to fetch pageType for `/foo` and `/bar`\n */\n const segments = slug.split('/').filter((segment) => Boolean(segment))\n const slugs = segments.map((__, index) =>\n segments.slice(0, index + 1).join('/')\n )\n\n const collections: (CollectionPageType & {\n slug: string\n })[] = await Promise.all(\n slugs.map(async (s) => {\n const collection = await collectionLoader.load(s)\n return { slug: s, ...collection }\n })\n )\n\n return {\n itemListElement: collections.map((collection, index) => ({\n item: isCollection(collection)\n ? `/${collection.slug}`\n : new URL(\n `https://${(collection as CollectionPageType).url}`\n ).pathname.toLowerCase(),\n name: collection.name,\n position: index + 1,\n })),\n numberOfItems: collections.length,\n }\n },\n}\n","import type { Maybe } from '../../../__generated__/schema'\nimport { BadRequestError } from '../../errors'\n\nexport interface SelectedFacet {\n key: string\n value: string\n}\n\nexport interface CrossSellingFacet {\n key: keyof typeof FACET_CROSS_SELLING_MAP\n value: string\n}\n\nexport const FACET_CROSS_SELLING_MAP = {\n buy: \"whoboughtalsobought\",\n view: \"whosawalsosaw\",\n similars: \"similars\",\n viewAndBought: \"whosawalsobought\",\n accessories: \"accessories\",\n suggestions: \"suggestions\",\n} as const\n\n/**\n * Transform facets from the store to VTEX platform facets.\n * For instance, the channel in Store becomes trade-policy and regionId in VTEX's realm\n * */\nexport const transformSelectedFacet = ({ key, value }: SelectedFacet) => {\n switch (key) {\n case 'price': {\n return { key, value: value.replace('-to-', ':') }\n }\n \n case 'channel': \n case 'locale': \n case \"buy\":\n case \"view\":\n case \"similars\":\n case \"viewAndBought\":\n case \"accessories\":\n case \"suggestions\": {\n return [] // remove this facet from search\n }\n\n default:\n return { key, value }\n }\n}\n\nexport const parseRange = (range: string): [number, number] | null => {\n const splitted = range.split(':').map(Number)\n\n if (\n splitted.length !== 2 ||\n Number.isNaN(splitted[0]) ||\n Number.isNaN(splitted[1])\n ) {\n return null\n }\n\n return splitted as [number, number]\n}\n\nexport const isCrossSelling = (\n x: string,\n): x is CrossSellingFacet['key'] =>\n typeof (FACET_CROSS_SELLING_MAP as Record<string, string>)[x] === \"string\"\n\nexport const findCrossSelling = (facets?: Maybe<SelectedFacet[]>) => {\n const filtered = facets?.filter((x): x is CrossSellingFacet => isCrossSelling(x.key))\n\n if (Array.isArray(filtered) && filtered.length > 1) {\n throw new BadRequestError(\n `You passed ${filtered.length} cross selling facets but only one is allowed. Please leave one of the following facet: ${filtered.map(x => x.key).join(',')}`\n )\n }\n\n return filtered?.[0] ?? null\n}\n\nexport const findSlug = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((x) => x.key === 'slug')?.value ?? null\n\nexport const findSkuId = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((x) => x.key === 'id')?.value ?? null\n\nexport const findLocale = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((x) => x.key === 'locale')?.value ?? null\n\nexport const findChannel = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((facet) => facet.key === 'channel')?.value ?? null\n","/**\n * More info at: https://en.wikipedia.org/wiki/Order_statistic\n */\n\n// O(n) search to find the max of an array\nexport const min = <T>(array: T[], cmp: (a: T, b: T) => number) => {\n let best = 0\n\n for (let curr = 1; curr < array.length; curr++) {\n if (cmp(array[best], array[curr]) > 0) {\n best = curr\n }\n }\n\n return array[best]\n}\n","import { parseRange } from '../utils/facets'\nimport { min } from '../utils/orderStatistics'\nimport type {\n FacetValueBoolean,\n Facet,\n FacetValueRange,\n} from '../clients/search/types/FacetSearchResult'\nimport type { Resolver } from '..'\n\nexport type Root = Facet\n\nexport const StoreFacet: Record<string, Resolver<Root>> = {\n __resolveType: ({ type }) =>\n type === 'TEXT' ? 'StoreFacetBoolean' : 'StoreFacetRange',\n}\n\nexport const StoreFacetBoolean: Record<\n string,\n Resolver<Facet<FacetValueBoolean>>\n> = {\n key: ({ key }) => key,\n label: ({ name }) => name,\n values: ({ values }) => values.sort((a, b) => a.name.localeCompare(b.name)),\n}\n\nexport const StoreFacetRange: Record<\n string,\n Resolver<Facet<FacetValueRange>>\n> = {\n key: ({ key }) => key,\n label: ({ name }) => name,\n min: ({ values, key }, _, { storage: { searchArgs } }) => {\n /**\n * Fetch the selected range the user queried.\n *\n * This is necessary because, differently from boolean facets, Search API does\n * not return the selected values, making us have to implement it in here\n */\n const selectedRange = parseRange(\n searchArgs?.selectedFacets?.find((facet) => facet.key === key)?.value ??\n ''\n )\n\n const facet = min(values, (a, b) => a.range.from - b.range.from)\n const globalMin = facet?.range.from ?? 0\n\n return {\n selected: selectedRange?.[0] ?? globalMin,\n absolute: globalMin,\n }\n },\n max: ({ values, key }, _, { storage: { searchArgs } }) => {\n /**\n * Fetch the selected range the user queried.\n *\n * This is necessary because, differently from boolean facets, Search API does\n * not return the selected values, making us have to implement it in here\n */\n const selectedRange = parseRange(\n searchArgs?.selectedFacets?.find((facet) => facet.key === key)?.value ??\n ''\n )\n\n const facet = min(values, (a, b) => b.range.to - a.range.to)\n const globalMax = facet?.range.to ?? 0\n\n return {\n selected: selectedRange?.[1] ?? globalMax,\n absolute: globalMax,\n }\n },\n}\n","import type { Resolver } from '..'\nimport type { FacetValueBoolean } from '../clients/search/types/FacetSearchResult'\n\nexport const StoreFacetValueBoolean: Record<\n string,\n Resolver<FacetValueBoolean>\n> = {\n value: ({ value }) => value,\n label: ({ name }) => name || 'unknown',\n selected: ({ selected }) => selected,\n quantity: ({ quantity }) => quantity,\n}\n","import type { Context } from '..'\nimport type {\n MutationSubscribeToNewsletterArgs,\n PersonNewsletter,\n} from '../../../__generated__/schema'\n\nexport const subscribeToNewsletter = async (\n _: any,\n { data }: MutationSubscribeToNewsletterArgs,\n { clients: { commerce } }: Context\n): Promise<PersonNewsletter | null> => {\n const response = await commerce.subscribeToNewsletter(data)\n return { id: response?.Id }\n}\n","export interface Channel {\n seller?: string\n regionId?: string\n salesChannel?: string\n}\n\nexport default class ChannelMarshal {\n public static parse(channelString: string): Required<Channel> {\n try {\n const parsedChannel = JSON.parse(channelString) as Channel\n\n return {\n seller: parsedChannel.seller ?? '',\n regionId: parsedChannel.regionId ?? '',\n salesChannel: parsedChannel.salesChannel ?? '',\n }\n } catch (error) {\n console.error(error)\n\n throw new Error('Malformed channel string')\n }\n }\n\n public static stringify(channel: Channel): string {\n return JSON.stringify(channel)\n }\n}\n","import ChannelMarshal from './channel'\nimport type { Context } from '..'\n\nexport const mutateChannelContext = (ctx: Context, channelString: string) => {\n ctx.storage.channel = ChannelMarshal.parse(channelString)\n}\n\nexport const mutateLocaleContext = (ctx: Context, locale: string) => {\n ctx.storage.locale = locale\n}\n","import crypto from 'crypto'\n\nexport const md5 = (payload: string) =>\n crypto.createHash('md5').update(payload).digest('hex')\n","import type { IStorePropertyValue } from '../../../__generated__/schema'\nimport type { Attachment } from '../clients/commerce/types/OrderForm'\nimport { md5 } from './md5'\n\nexport const VALUE_REFERENCES = {\n attachment: 'ATTACHMENT',\n specification: 'SPECIFICATION',\n} as const\n\nexport function attachmentToPropertyValue(attachment: Attachment) {\n return {\n name: attachment.name,\n value: attachment.content,\n valueReference: VALUE_REFERENCES.attachment,\n }\n}\n\nexport function getPropertyId(item: IStorePropertyValue) {\n return md5(\n `${item.name}:${JSON.stringify(item.value)}:${item.valueReference}`\n )\n}\n","import {\n IStoreGeoCoordinates,\n IStoreSession,\n} from '../../../__generated__/schema'\nimport {\n CheckoutAddress,\n OrderForm,\n LogisticsInfo,\n} from '../clients/commerce/types/OrderForm'\n\nexport const shouldUpdateShippingData = (\n orderForm: OrderForm,\n session: IStoreSession\n) => {\n if (!hasSessionPostalCodeOrGeoCoordinates(session)) {\n return { updateShipping: false, addressChanged: false }\n }\n\n if (!hasItems(orderForm)) {\n return { updateShipping: false, addressChanged: false }\n }\n\n const [selectedAddress] = orderForm?.shippingData?.selectedAddresses ?? []\n if (\n checkPostalCode(selectedAddress, session.postalCode) ||\n checkGeoCoordinates(selectedAddress, session.geoCoordinates) ||\n checkAddressType(selectedAddress, session.addressType)\n ) {\n return { updateShipping: true, addressChanged: true }\n }\n\n // The logisticsInfo will always exist if there´s at least one item inside the cart\n const { logisticsInfo } = orderForm.shippingData!\n\n if (shouldUpdateDeliveryInfo(logisticsInfo, session)) {\n return { updateShipping: true, addressChanged: false }\n }\n return { updateShipping: false, addressChanged: false }\n}\n\n// Validate if theres any postal Code or GeoCoordinates set at the session\nconst hasSessionPostalCodeOrGeoCoordinates = (session: IStoreSession) => {\n return (\n !!session.postalCode ||\n (session.geoCoordinates?.latitude && session.geoCoordinates?.longitude)\n )\n}\n\n// Validate if theres a difference between the session postal code and orderForm postal code\nconst checkPostalCode = (\n address: CheckoutAddress | null,\n postalCode: string | null | undefined\n) => {\n return typeof postalCode === 'string' && address?.postalCode !== postalCode\n}\n\n// Validate if theres a difference between the session geoCoords and orderForm geoCoords\nconst checkGeoCoordinates = (\n address: CheckoutAddress | null,\n geoCoordinates: IStoreGeoCoordinates | null | undefined\n) => {\n return (\n typeof geoCoordinates?.latitude === 'number' &&\n typeof geoCoordinates?.longitude === 'number' &&\n (address?.geoCoordinates[0] !== geoCoordinates?.longitude ||\n address?.geoCoordinates[1] !== geoCoordinates?.latitude)\n )\n}\n\nconst checkAddressType = (\n address: CheckoutAddress | null,\n addressType: string | null | undefined\n) => {\n return typeof addressType === 'string' && address?.addressType !== addressType\n}\n\n// Validate if theres any item inside the orderForm\nconst hasItems = (orderForm: OrderForm) => {\n return orderForm.items.length !== 0\n}\n\nconst shouldUpdateDeliveryInfo = (\n logisticsInfo: LogisticsInfo[],\n session: IStoreSession | null\n) => {\n const deliveryChannel = session?.deliveryMode?.deliveryChannel\n const deliveryMethod = session?.deliveryMode?.deliveryMethod\n const { startDate, endDate } = session?.deliveryMode?.deliveryWindow || {}\n\n return logisticsInfo.some(\n ({ selectedDeliveryChannel, selectedSla, slas }) => {\n const checkDeliveryChannel =\n deliveryChannel && selectedDeliveryChannel !== deliveryChannel\n const checkDeliveryMethod =\n deliveryMethod && selectedSla !== deliveryMethod\n\n return slas?.some((sla) => {\n if (\n (checkDeliveryChannel && sla.deliveryChannel === deliveryChannel) ||\n (checkDeliveryMethod && sla.id === deliveryMethod)\n ) {\n return true\n }\n return (\n startDate &&\n endDate &&\n sla.deliveryChannel === deliveryChannel &&\n sla.id === deliveryMethod &&\n (!sla?.deliveryWindow ||\n sla?.deliveryWindow?.startDateUtc !== startDate ||\n sla?.deliveryWindow?.endDateUtc !== endDate) &&\n sla.availableDeliveryWindows?.some(\n (window) =>\n window?.startDateUtc === startDate &&\n window?.endDateUtc === endDate\n )\n )\n })\n }\n )\n}\n","import { IStoreSession } from '../../../__generated__/schema'\nimport { OrderForm } from '../clients/commerce/types/OrderForm'\n\nexport const getAddressOrderForm = (\n orderForm: OrderForm,\n session: IStoreSession,\n addressChanged: boolean\n) => {\n const postalCode = session.postalCode\n const geoCoordinates = session.geoCoordinates\n const availableAddresses = orderForm?.shippingData?.availableAddresses ?? []\n const selectedAddresses = orderForm?.shippingData?.selectedAddresses ?? []\n // Validate if no change for the address was made and the deliveryMode has changed we can return the address from the orderForm\n if (!addressChanged && selectedAddresses.length > 0) {\n return [selectedAddresses[0]]\n }\n\n // Validate if the address from the session already exists at the availableAddresses from the OrderForm to avoid duplication\n if (addressChanged && availableAddresses.length > 0) {\n for (const address of availableAddresses) {\n if (postalCode && geoCoordinates) {\n const addressMatcher =\n address.postalCode === postalCode ||\n (address.geoCoordinates[0] === geoCoordinates.longitude &&\n address.geoCoordinates[1] === geoCoordinates.latitude)\n if (addressMatcher) {\n return [address]\n }\n }\n if (postalCode && !geoCoordinates) {\n const addressMatcher = address.postalCode === postalCode\n if (addressMatcher) {\n return [address]\n }\n }\n if (geoCoordinates && !postalCode) {\n const addressMatcher =\n address.geoCoordinates[0] === geoCoordinates.longitude &&\n address.geoCoordinates[1] === geoCoordinates.latitude\n if (addressMatcher) {\n return [address]\n }\n }\n }\n }\n\n return null\n}\n","import { IStoreSession } from '../../../__generated__/schema'\nimport { SelectedAddress } from '../clients/commerce/types/ShippingData'\n\nexport const createNewAddress = (session: IStoreSession) => {\n const postalCode = session.postalCode\n const geoCoordinates = session.geoCoordinates\n\n // If the address from the session has changed and it do not exist we will create the new one\n const addressSession: SelectedAddress = {\n addressType: session.addressType || null,\n postalCode: postalCode || null,\n city: null,\n state: null,\n country: session.country || null,\n street: null,\n number: null,\n neighborhood: null,\n complement: null,\n reference: null,\n geoCoordinates: [],\n }\n\n if (geoCoordinates) {\n const latitude =\n typeof geoCoordinates === 'object' && 'latitude' in geoCoordinates\n ? geoCoordinates.latitude\n : null\n const longitude =\n typeof geoCoordinates === 'object' && 'longitude' in geoCoordinates\n ? geoCoordinates.longitude\n : null\n addressSession.geoCoordinates =\n latitude !== null && longitude !== null ? [longitude, latitude] : []\n }\n\n return [addressSession]\n}\n","import deepEquals from 'fast-deep-equal'\n\nimport { mutateChannelContext, mutateLocaleContext } from '../utils/contex'\nimport { md5 } from '../utils/md5'\nimport {\n attachmentToPropertyValue,\n getPropertyId,\n VALUE_REFERENCES,\n} from '../utils/propertyValue'\n\nimport type { Context } from '..'\nimport type {\n IStoreOffer,\n IStoreOrder,\n IStorePropertyValue,\n IStoreSession,\n Maybe,\n MutationValidateCartArgs,\n} from '../../../__generated__/schema'\nimport type {\n OrderForm,\n OrderFormInputItem,\n OrderFormItem,\n} from '../clients/commerce/types/OrderForm'\nimport { shouldUpdateShippingData } from '../utils/shouldUpdateShippingData'\nimport { getAddressOrderForm } from '../utils/getAddressOrderForm'\nimport { SelectedAddress } from '../clients/commerce/types/ShippingData'\nimport { createNewAddress } from '../utils/createNewAddress'\n\ntype Indexed<T> = T & { index?: number }\n\nconst isAttachment = (value: IStorePropertyValue) =>\n value.valueReference === VALUE_REFERENCES.attachment\n\nconst getId = (item: IStoreOffer) =>\n [\n item.itemOffered.sku,\n item.seller.identifier,\n item.price < 0.01 ? 'Gift' : undefined,\n item.itemOffered.additionalProperty\n ?.filter(isAttachment)\n .map(getPropertyId)\n .join('-'),\n ]\n .filter(Boolean)\n .join('::')\n\nconst orderFormItemToOffer = (\n item: OrderFormItem,\n index?: number\n): Indexed<IStoreOffer> => ({\n listPrice: item.listPrice / 100,\n price: item.sellingPrice / 100,\n quantity: item.quantity,\n seller: { identifier: item.seller },\n itemOffered: {\n sku: item.id,\n image: [],\n name: item.name,\n additionalProperty: item.attachments.map(attachmentToPropertyValue),\n },\n index,\n})\n\nconst offerToOrderItemInput = (\n offer: Indexed<IStoreOffer>\n): OrderFormInputItem => ({\n quantity: offer.quantity,\n seller: offer.seller.identifier,\n id: offer.itemOffered.sku,\n index: offer.index,\n attachments: (\n offer.itemOffered.additionalProperty?.filter(isAttachment) ?? []\n ).map((attachment) => ({\n name: attachment.name,\n content: attachment.value,\n })),\n})\n\nconst groupById = (offers: IStoreOffer[]): Map<string, IStoreOffer[]> =>\n offers.reduce((acc, item) => {\n const id = getId(item)\n\n if (!acc.has(id)) {\n acc.set(id, [])\n }\n\n acc.get(id)?.push(item)\n\n return acc\n }, new Map<string, IStoreOffer[]>())\n\nconst equals = (storeOrder: IStoreOrder, orderForm: OrderForm) => {\n const pick = (item: Indexed<IStoreOffer>, index: number) => ({\n ...item,\n itemOffered: {\n sku: item.itemOffered.sku,\n },\n index,\n })\n\n const orderFormItems = orderForm.items.map(orderFormItemToOffer).map(pick)\n const storeOrderItems = storeOrder.acceptedOffer.map(pick)\n\n const isSameOrder = storeOrder.orderNumber === orderForm.orderFormId\n const orderItemsAreSync = deepEquals(orderFormItems, storeOrderItems)\n\n return isSameOrder && orderItemsAreSync\n}\n\nconst joinItems = (form: OrderForm) => {\n const itemsById = form.items.reduce((acc, item) => {\n const id = getId(orderFormItemToOffer(item))\n\n if (!acc[id]) {\n acc[id] = []\n }\n\n acc[id].push(item)\n\n return acc\n }, {} as Record<string, OrderFormItem[]>)\n\n return {\n ...form,\n items: Object.values(itemsById).map((items) => {\n const [item] = items\n const quantity = items.reduce((acc, i) => acc + i.quantity, 0)\n const totalPrice = items.reduce(\n (acc, i) =>\n acc +\n (i?.priceDefinition?.total ??\n (i?.quantity ?? 0) * (i?.sellingPrice ?? 0)),\n 0\n )\n\n return {\n ...item,\n quantity,\n sellingPrice: totalPrice / quantity,\n }\n }),\n }\n}\n\nconst orderFormToCart = async (\n form: OrderForm,\n skuLoader: Context['loaders']['skuLoader']\n) => {\n return {\n order: {\n orderNumber: form.orderFormId,\n acceptedOffer: form.items.map(async (item) => ({\n ...item,\n product: await skuLoader.load(item.id),\n })),\n },\n messages: form.messages.map(({ text, status }) => ({\n text,\n status: status.toUpperCase(),\n })),\n }\n}\n\nconst getOrderFormEtag = ({ items }: OrderForm) => md5(JSON.stringify(items))\n\nconst setOrderFormEtag = async (\n form: OrderForm,\n commerce: Context['clients']['commerce']\n) => {\n try {\n const orderForm = await commerce.checkout.setCustomData({\n id: form.orderFormId,\n appId: 'faststore',\n key: 'cartEtag',\n value: getOrderFormEtag(form),\n })\n\n return orderForm\n } catch (err) {\n console.error(\n 'Error while setting custom data to orderForm.\\n Make sure to add the following custom app to the orderForm: \\n{\"fields\":[\"cartEtag\"],\"id\":\"faststore\",\"major\":1}.\\n More info at: https://developers.vtex.com/vtex-rest-api/docs/customizable-fields-with-checkout-api'\n )\n\n throw err\n }\n}\n\n/**\n * Checks if cartEtag stored on customData is up to date\n * @description If cartEtag is not up to date, this means that\n * another system changed the cart, like Checkout UI or Order Placed\n */\nconst isOrderFormStale = (form: OrderForm) => {\n const faststoreData = form.customData?.customApps.find(\n (app) => app.id === 'faststore'\n )\n\n const oldEtag = faststoreData?.fields?.cartEtag\n\n if (oldEtag == null) {\n return true\n }\n\n const newEtag = getOrderFormEtag(form)\n\n return newEtag !== oldEtag\n}\n\n// Returns the regionalized orderForm\nconst getOrderForm = async (id: string, { clients: { commerce } }: Context) => {\n return commerce.checkout.orderForm({\n id,\n })\n}\n\nconst updateOrderFormShippingData = async (\n orderForm: OrderForm,\n session: Maybe<IStoreSession> | undefined,\n { clients: { commerce } }: Context\n) => {\n // Stores that are not yet providing the session while validating the cart\n // should not be able to update the shipping data\n //\n // This was causing errors while validating regionalizated carts\n // because the following code was trying to change the shippingData to an undefined address/session\n\n if (!session) {\n return orderForm\n }\n\n const { updateShipping, addressChanged } = shouldUpdateShippingData(\n orderForm,\n session\n )\n\n if (updateShipping) {\n // Check if the orderForm address matches the one from the session\n const oldAddress = getAddressOrderForm(orderForm, session, addressChanged)\n\n const address = oldAddress ? oldAddress : createNewAddress(session)\n\n const selectedAddresses = address as SelectedAddress[]\n\n const hasDeliveryWindow = session.deliveryMode?.deliveryWindow\n ? true\n : false\n\n if (hasDeliveryWindow) {\n // if you have a Delivery Window you have to first get the delivery window to set the desired after\n await commerce.checkout.shippingData(\n {\n id: orderForm.orderFormId,\n index: orderForm.items.length,\n deliveryMode: session.deliveryMode,\n selectedAddresses: selectedAddresses,\n },\n false\n )\n }\n\n return commerce.checkout.shippingData(\n {\n id: orderForm.orderFormId,\n index: orderForm.items.length,\n deliveryMode: session.deliveryMode,\n selectedAddresses: selectedAddresses,\n },\n true\n )\n }\n return orderForm\n}\n\n/**\n * This resolver implements the optimistic cart behavior. The main idea in here\n * is that we receive a cart from the UI (as query params) and we validate it with\n * the commerce platform. If the cart is valid, we return null, if the cart is\n * invalid according to the commerce platform, we return the new cart the UI should use\n * instead.\n *\n * The algorithm is something like:\n * 1. Fetch orderForm from VTEX\n * 2. Compute delta changes between the orderForm and the UI's cart\n * 3. Update the orderForm in VTEX platform accordingly\n * 4. If any changes were made, send to the UI the new cart. Null otherwise\n */\nexport const validateCart = async (\n _: unknown,\n { cart: { order }, session }: MutationValidateCartArgs,\n ctx: Context\n) => {\n const { orderNumber, acceptedOffer, shouldSplitItem } = order\n const {\n clients: { commerce },\n loaders: { skuLoader },\n } = ctx\n\n const channel = session?.channel\n const locale = session?.locale\n\n if (channel) {\n mutateChannelContext(ctx, channel)\n }\n\n if (locale) {\n mutateLocaleContext(ctx, locale)\n }\n\n // Step1: Get OrderForm from VTEX Commerce\n const orderForm = await getOrderForm(orderNumber, ctx)\n\n // Step1.5: Check if another system changed the orderForm with this orderNumber\n // If so, this means the user interacted with this cart elsewhere and expects\n // to see this new cart state instead of what's stored on the user's browser.\n const isStale = isOrderFormStale(orderForm)\n\n if (isStale && orderNumber) {\n const newOrderForm = await setOrderFormEtag(orderForm, commerce).then(\n joinItems\n )\n return orderFormToCart(newOrderForm, skuLoader)\n }\n\n // Step2: Process items from both browser and checkout so they have the same shape\n const browserItemsById = groupById(acceptedOffer)\n const originItemsById = groupById(orderForm.items.map(orderFormItemToOffer))\n const originItems = Array.from(originItemsById.entries()) // items on the VTEX platform backend\n const browserItems = Array.from(browserItemsById.entries()) // items on the user's browser\n\n // Step3: Compute delta changes\n const { itemsToAdd, itemsToUpdate } = browserItems.reduce(\n (acc, [id, items]) => {\n const maybeOriginItem = originItemsById.get(id)\n\n // Adding new items to cart\n if (!maybeOriginItem) {\n items.forEach((item) => acc.itemsToAdd.push(item))\n\n return acc\n }\n\n // Update existing items\n const [head, ...tail] = maybeOriginItem\n const totalQuantity = items.reduce((acc, curr) => acc + curr.quantity, 0)\n\n // set total quantity to first item\n acc.itemsToUpdate.push({\n ...head,\n quantity: totalQuantity,\n })\n\n // Remove all the rest\n tail.forEach((item) => acc.itemsToUpdate.push({ ...item, quantity: 0 }))\n\n return acc\n },\n {\n itemsToAdd: [] as IStoreOffer[],\n itemsToUpdate: [] as IStoreOffer[],\n }\n )\n\n const itemsToDelete = originItems\n .filter(([id]) => !browserItemsById.has(id))\n .flatMap(([, items]) => items.map((item) => ({ ...item, quantity: 0 })))\n\n const changes = [...itemsToAdd, ...itemsToUpdate, ...itemsToDelete].map(\n offerToOrderItemInput\n )\n\n if (changes.length === 0) {\n return null\n }\n // Step4: Apply delta changes to order form\n const updatedOrderForm = await commerce.checkout\n // update orderForm items\n .updateOrderFormItems({\n id: orderForm.orderFormId,\n orderItems: changes,\n shouldSplitItem,\n })\n // update orderForm shippingData\n .then((form: OrderForm) => updateOrderFormShippingData(form, session, ctx))\n // update orderForm etag so we know last time we touched this orderForm\n .then((form: OrderForm) => setOrderFormEtag(form, commerce))\n .then(joinItems)\n\n // Step5: If no changes detected before/after updating orderForm, the order is validated\n if (equals(order, updatedOrderForm)) {\n return null\n }\n // Step6: There were changes, convert orderForm to StoreCart\n return orderFormToCart(updatedOrderForm, skuLoader)\n}\n","import deepEquals from 'fast-deep-equal'\n\nimport ChannelMarshal from '../utils/channel'\nimport type { Context } from '..'\nimport type {\n MutationValidateSessionArgs,\n StoreSession,\n} from '../../../__generated__/schema'\n\nexport const validateSession = async (\n _: any,\n { session: oldSession, search }: MutationValidateSessionArgs,\n { clients }: Context\n): Promise<StoreSession | null> => {\n const channel = ChannelMarshal.parse(oldSession.channel ?? '')\n const postalCode = String(oldSession.postalCode ?? '').replace(/\\D/g, '')\n const geoCoordinates = oldSession.geoCoordinates ?? null\n\n const country = oldSession.country ?? ''\n\n const params = new URLSearchParams(search)\n const salesChannel = params.get('sc') ?? channel.salesChannel\n\n params.set('sc', salesChannel)\n\n const [regionData, sessionData] = await Promise.all([\n postalCode || geoCoordinates\n ? clients.commerce.checkout.region({\n postalCode,\n geoCoordinates,\n country,\n salesChannel,\n })\n : Promise.resolve(null),\n clients.commerce.session(params.toString()).catch(() => null),\n ])\n\n const profile = sessionData?.namespaces.profile ?? null\n const store = sessionData?.namespaces.store ?? null\n const region = regionData?.[0]\n // Set seller only if it's inside a region\n const seller = region?.sellers.find((seller) => channel.seller === seller.id)\n\n const newSession = {\n ...oldSession,\n currency: {\n code: store?.currencyCode.value ?? oldSession.currency.code,\n symbol: store?.currencySymbol.value ?? oldSession.currency.symbol,\n },\n country: store?.countryCode.value ?? oldSession.country,\n channel: ChannelMarshal.stringify({\n salesChannel: store?.channel?.value ?? channel.salesChannel,\n regionId: region?.id ?? channel.regionId,\n seller: seller?.id,\n }),\n person: profile?.id\n ? {\n id: profile.id?.value ?? '',\n email: profile.email?.value ?? '',\n givenName: profile.firstName?.value ?? '',\n familyName: profile.lastName?.value ?? '',\n }\n : null,\n }\n\n if (deepEquals(oldSession, newSession)) {\n return null\n }\n\n return newSession\n}\n","import { subscribeToNewsletter } from './subscribeToNewsletter'\nimport { validateCart } from './validateCart'\nimport { validateSession } from './validateSession'\n\nexport const Mutation = {\n validateCart,\n validateSession,\n subscribeToNewsletter,\n}\n","import type { GraphQLScalarSerializer } from 'graphql'\nimport { GraphQLScalarType } from 'graphql'\nimport { Kind } from 'graphql/language'\n\nexport const ObjectOrString = new GraphQLScalarType({\n name: 'ObjectOrString',\n description:\n 'A string or the string representation of an object (a stringified object).',\n parseValue: toObjectOrString,\n serialize: stringify,\n parseLiteral(ast) {\n if (ast.kind === Kind.STRING) {\n return getValueAsObjectOrString(ast.value)\n }\n\n return null\n },\n})\n\nfunction toObjectOrString(value: GraphQLScalarSerializer<any>) {\n if (typeof value === 'string') {\n return getValueAsObjectOrString(value)\n }\n\n return null\n}\n\nfunction getValueAsObjectOrString(value: string) {\n try {\n return JSON.parse(value)\n } catch (e) {\n return value\n }\n}\n\nfunction stringify(value: GraphQLScalarSerializer<any>) {\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n return null\n}\n","import {\n availability,\n inStock,\n inStockOrderFormItem,\n price,\n sellingPrice,\n} from '../utils/productStock'\nimport type { Resolver } from '..'\nimport type { StoreAggregateOffer } from './aggregateOffer'\nimport type { ArrayElementType } from '../../../typings'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport type { OrderFormItem } from '../clients/commerce/types/OrderForm'\n\ntype OrderFormProduct = OrderFormItem & { product: EnhancedSku }\ntype SearchProduct = ArrayElementType<\n ReturnType<typeof StoreAggregateOffer.offers>\n>\nexport type Root = SearchProduct | OrderFormProduct\n\nconst isSearchItem = (item: Root): item is SearchProduct =>\n 'Price' in item && 'seller' in item && 'product' in item\n\nconst isOrderFormItem = (item: Root): item is OrderFormProduct =>\n 'skuName' in item\n\nexport const StoreOffer: Record<string, Resolver<Root>> = {\n priceCurrency: async (_, __, ctx) => {\n const { \n loaders: { salesChannelLoader }, \n storage: { channel } \n } = ctx\n\n const sc = await salesChannelLoader.load(channel.salesChannel);\n \n return sc.CurrencyCode ?? '';\n },\n priceValidUntil: (root) => {\n if (isSearchItem(root)) {\n return root.PriceValidUntil ?? ''\n }\n\n if (isOrderFormItem(root)) {\n return root.priceValidUntil ?? ''\n }\n\n return null\n },\n itemCondition: () => 'https://schema.org/NewCondition',\n availability: async (root) => {\n if (isSearchItem(root)) {\n return availability(inStock(root))\n }\n\n if (isOrderFormItem(root)) {\n return availability(inStockOrderFormItem(root.availability))\n }\n\n return null\n },\n seller: (root, _, ctx) => {\n if (isSearchItem(root)) {\n return {\n identifier: ctx.storage.channel?.seller || root.seller.sellerId || '',\n }\n }\n\n if (isOrderFormItem(root)) {\n return {\n identifier: root.seller,\n }\n }\n\n return null\n },\n price: (root) => {\n if (isSearchItem(root)) {\n return price(root)\n }\n\n if (isOrderFormItem(root)) {\n return root.sellingPrice / 1e2\n }\n\n return null\n },\n sellingPrice: (root) => {\n if (isSearchItem(root)) {\n return sellingPrice(root)\n }\n\n if (isOrderFormItem(root)) {\n return root.sellingPrice / 1e2\n }\n\n return null\n },\n listPrice: (root) => {\n if (isSearchItem(root)) {\n return root.ListPrice ?? 0\n }\n\n if (isOrderFormItem(root)) {\n return root.listPrice / 1e2\n }\n\n return null\n },\n itemOffered: (root) => {\n if (isSearchItem(root)) {\n return root.product\n }\n\n if (isOrderFormItem(root)) {\n return {\n ...root.product,\n attachmentsValues: root.attachments,\n }\n }\n\n return null\n },\n quantity: (root) => {\n if (isSearchItem(root)) {\n return root.AvailableQuantity ?? 0\n }\n\n if (isOrderFormItem(root)) {\n return root.quantity\n }\n\n return null\n },\n}\n","import type { Product } from '../clients/search/types/ProductSearchResult'\n\nexport const canonicalFromProduct = ({ linkText }: Product) => `/${linkText}/p`\n","import type { CommertialOffer } from '../clients/search/types/ProductSearchResult'\n\nexport type EnhancedCommercialOffer<S, P> = CommertialOffer & {\n seller: S\n product: P\n}\n\nexport const enhanceCommercialOffer = <S, P>({\n offer,\n seller,\n product,\n}: {\n offer: CommertialOffer\n seller: S\n product: P\n}): EnhancedCommercialOffer<S, P> => ({\n ...offer,\n product,\n seller,\n})\n","import { canonicalFromProduct } from '../utils/canonical'\nimport { enhanceCommercialOffer } from '../utils/enhanceCommercialOffer'\nimport { bestOfferFirst } from '../utils/productStock'\nimport { slugify } from '../utils/slugify'\nimport type { EnhancedCommercialOffer } from '../utils/enhanceCommercialOffer'\nimport type { Resolver } from '..'\nimport type { PromiseType } from '../../../typings'\nimport type { Query } from './query'\nimport {\n attachmentToPropertyValue,\n VALUE_REFERENCES,\n} from '../utils/propertyValue'\nimport type { Attachment } from '../clients/commerce/types/OrderForm'\n\ntype QueryProduct = PromiseType<ReturnType<typeof Query.product>>\n\nexport type Root = QueryProduct & {\n attachmentsValues?: Attachment[]\n}\n\nconst DEFAULT_IMAGE = {\n imageText: 'image',\n imageUrl:\n 'https://storecomponents.vtexassets.com/assets/faststore/images/image___117a6d3e229a96ad0e0d0876352566e2.svg',\n}\n\nconst getSlug = (link: string, id: string) => `${link}-${id}`\nconst getPath = (link: string, id: string) => `/${getSlug(link, id)}/p`\nconst nonEmptyArray = <T>(array: T[] | null | undefined) =>\n Array.isArray(array) && array.length > 0 ? array : null\n\nexport const StoreProduct: Record<string, Resolver<Root>> & {\n offers: Resolver<\n Root,\n any,\n Array<EnhancedCommercialOffer<Root['sellers'][number], Root>>\n >\n\n isVariantOf: Resolver<Root, any, Root>\n} = {\n productID: ({ itemId }) => itemId,\n name: ({ isVariantOf, name }) => name ?? isVariantOf.productName,\n slug: ({ isVariantOf: { linkText }, itemId }) => getSlug(linkText, itemId),\n description: ({ isVariantOf: { description } }) => description,\n seo: ({ isVariantOf }) => ({\n title: isVariantOf.productName,\n description: isVariantOf.description,\n canonical: canonicalFromProduct(isVariantOf),\n }),\n brand: ({ isVariantOf: { brand } }) => ({ name: brand }),\n breadcrumbList: ({\n isVariantOf: { categories, productName, linkText },\n itemId,\n }) => {\n return {\n itemListElement: [\n ...categories.reverse().map((categoryPath, index) => {\n const splitted = categoryPath.split('/')\n const name = splitted[splitted.length - 2]\n const item = splitted.map(slugify).join('/')\n\n return {\n name,\n item,\n position: index + 1,\n }\n }),\n {\n name: productName,\n item: getPath(linkText, itemId),\n position: categories.length + 1,\n },\n ],\n numberOfItems: categories.length,\n }\n },\n image: ({ images }) =>\n (nonEmptyArray(images) ?? [DEFAULT_IMAGE]).map(\n ({ imageUrl, imageText }) => ({\n alternateName: imageText ?? '',\n url: imageUrl.replace('vteximg.com.br', 'vtexassets.com'),\n })\n ),\n sku: ({ itemId }) => itemId,\n gtin: ({ referenceId }) => referenceId[0]?.Value ?? '',\n review: () => [],\n aggregateRating: () => ({}),\n offers: (root) =>\n root.sellers\n .map((seller) =>\n enhanceCommercialOffer({\n offer: seller.commertialOffer,\n seller,\n product: root,\n })\n )\n .sort(bestOfferFirst),\n isVariantOf: (root) => root,\n additionalProperty: ({\n // Search uses the name variations for specifications\n variations: specifications = [],\n attachmentsValues = [],\n }) => {\n const propertyValueSpecifications = specifications.flatMap(\n ({ name, values }) =>\n values.map((value) => ({\n name,\n value,\n valueReference: VALUE_REFERENCES.specification,\n }))\n )\n\n const propertyValueAttachments = attachmentsValues.map(\n attachmentToPropertyValue\n )\n\n return [...propertyValueSpecifications, ...propertyValueAttachments]\n },\n releaseDate: ({ isVariantOf: { releaseDate } }) => releaseDate ?? ''\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { PromiseType } from '../../../typings'\nimport type { StoreProduct } from './product'\nimport { VALUE_REFERENCES } from '../utils/propertyValue'\n\nexport type Root = PromiseType<ReturnType<typeof StoreProduct.isVariantOf>>\n\nconst BLOCKED_SPECIFICATIONS = new Set(['allSpecifications'])\n\nexport const StoreProductGroup: Record<string, Resolver<Root>> = {\n hasVariant: (root) =>\n root.isVariantOf.items.map((item) => enhanceSku(item, root.isVariantOf)),\n productGroupID: ({ isVariantOf }) => isVariantOf.productId,\n name: (root) => root.isVariantOf.productName,\n skuVariants: (root) => root,\n additionalProperty: ({ isVariantOf: { specificationGroups } }) =>\n specificationGroups\n // Filter sku specifications so we don't mix them with product specs.\n .filter(\n (specificationGroup) =>\n !BLOCKED_SPECIFICATIONS.has(specificationGroup.name)\n )\n // Transform specs back into product specs.\n .flatMap(({ specifications }) =>\n specifications.flatMap(({ name, values }) =>\n values.map((value) => ({\n name,\n value,\n valueReference: VALUE_REFERENCES.specification,\n }))\n )\n ),\n}\n","import type { Resolver } from '..'\nimport type { StorePropertyValue as StorePropertyValueType } from '../../../__generated__/schema'\nimport { getPropertyId } from '../utils/propertyValue'\n\nexport type Root = StorePropertyValueType\n\nexport const StorePropertyValue: Record<string, Resolver<Root>> = {\n propertyID: (root) => getPropertyId(root),\n name: ({ name }) => name,\n value: ({ value }) => value,\n valueReference: ({ valueReference }) => valueReference,\n}\n","export const SORT_MAP = {\n price_desc: 'price:desc',\n price_asc: 'price:asc',\n orders_desc: 'orders:desc',\n name_desc: 'name:desc',\n name_asc: 'name:asc',\n release_desc: 'release:desc',\n discount_desc: 'discount:desc',\n score_desc: '',\n} as const\n","import { min } from './orderStatistics'\nimport { bestOfferFirst } from './productStock'\nimport type { Item } from '../clients/search/types/ProductSearchResult'\n\n/**\n * This function implements Portal heuristics for returning the best sku for a product.\n *\n * The best sku is the one with the best (cheapest available) offer\n * */\nexport const pickBestSku = (skus: Item[]) => {\n const offersBySku = skus.flatMap((sku) =>\n sku.sellers.map((seller) => ({\n offer: seller.commertialOffer,\n sku,\n }))\n )\n\n const best = min(offersBySku, ({ offer: o1 }, { offer: o2 }) =>\n bestOfferFirst(o1, o2)\n )\n\n return best ? best.sku : skus[0]\n}\n\nexport const isValidSkuId = (skuId: string) =>\n skuId !== '' && !Number.isNaN(Number(skuId))\n","import { FACET_CROSS_SELLING_MAP } from './../utils/facets'\nimport { BadRequestError, NotFoundError } from '../../errors'\nimport { mutateChannelContext, mutateLocaleContext } from '../utils/contex'\nimport { enhanceSku } from '../utils/enhanceSku'\nimport {\n findChannel,\n findCrossSelling,\n findLocale,\n findSkuId,\n findSlug,\n transformSelectedFacet,\n} from '../utils/facets'\nimport { SORT_MAP } from '../utils/sort'\nimport { StoreCollection } from './collection'\nimport type {\n QueryAllCollectionsArgs,\n QueryAllProductsArgs,\n QueryCollectionArgs,\n QueryProductArgs,\n QuerySearchArgs,\n QuerySellersArgs,\n QueryShippingArgs,\n QueryRedirectArgs,\n} from '../../../__generated__/schema'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { Context } from '../index'\nimport { isValidSkuId, pickBestSku } from '../utils/sku'\nimport { SearchArgs } from '../clients/search'\n\nexport const Query = {\n product: async (_: unknown, { locator }: QueryProductArgs, ctx: Context) => {\n // Insert channel in context for later usage\n const channel = findChannel(locator)\n const locale = findLocale(locator)\n const id = findSkuId(locator)\n const slug = findSlug(locator)\n\n if (channel) {\n mutateChannelContext(ctx, channel)\n }\n\n if (locale) {\n mutateLocaleContext(ctx, locale)\n }\n\n const {\n loaders: { skuLoader },\n clients: { commerce, search },\n } = ctx\n\n try {\n const skuId = id ?? slug?.split('-').pop() ?? ''\n\n if (!isValidSkuId(skuId)) {\n throw new Error('Invalid SkuId')\n }\n\n const sku = await skuLoader.load(skuId)\n\n /**\n * Here be dragons 🦄🦄🦄\n *\n * In some cases, the slug has a valid skuId for a different\n * product. This condition makes sure that the fetched sku\n * is the one we actually asked for\n * */\n if (\n slug &&\n sku.isVariantOf.linkText &&\n !slug.startsWith(sku.isVariantOf.linkText)\n ) {\n throw new Error(\n `Slug was set but the fetched sku does not satisfy the slug condition. slug: ${slug}, linkText: ${sku.isVariantOf.linkText}`\n )\n }\n\n return sku\n } catch (err) {\n if (slug == null) {\n throw new BadRequestError('Missing slug or id')\n }\n\n const route = await commerce.catalog.portal.pagetype(`${slug}/p`)\n\n if (route.pageType !== 'Product' || !route.id) {\n throw new NotFoundError(`No product found for slug ${slug}`)\n }\n\n const {\n products: [product],\n } = await search.products({\n page: 0,\n count: 1,\n query: `product:${route.id}`,\n })\n\n if (!product) {\n throw new NotFoundError(`No product found for id ${route.id}`)\n }\n\n const sku = pickBestSku(product.items)\n\n return enhanceSku(sku, product)\n }\n },\n collection: (_: unknown, { slug }: QueryCollectionArgs, ctx: Context) => {\n const {\n loaders: { collectionLoader },\n } = ctx\n\n return collectionLoader.load(slug)\n },\n search: async (\n _: unknown,\n { first, after: maybeAfter, sort, term, selectedFacets }: QuerySearchArgs,\n ctx: Context\n ) => {\n // Insert channel in context for later usage\n const channel = findChannel(selectedFacets)\n const locale = findLocale(selectedFacets)\n const crossSelling = findCrossSelling(selectedFacets)\n\n if (channel) {\n mutateChannelContext(ctx, channel)\n }\n\n if (locale) {\n mutateLocaleContext(ctx, locale)\n }\n\n let query = term\n\n /**\n * In case we are using crossSelling, we need to modify the search\n * we will be performing on our search engine. The idea in here\n * is to use the cross selling API for fetching the productIds our\n * search will return for us.\n * Doing this two request workflow makes it possible to have cross\n * selling with Search features, like pagination, internationalization\n * etc\n */\n if (crossSelling) {\n const products = await ctx.clients.commerce.catalog.products.crossselling(\n {\n type: FACET_CROSS_SELLING_MAP[crossSelling.key],\n productId: crossSelling.value,\n }\n )\n\n query = `product:${products\n .map((x) => x.productId)\n .slice(0, first)\n .join(';')}`\n }\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const searchArgs: Omit<SearchArgs, 'type'> = {\n page: Math.ceil(after / first),\n count: first,\n query: query ?? undefined,\n sort: SORT_MAP[sort ?? 'score_desc'],\n selectedFacets: selectedFacets?.flatMap(transformSelectedFacet) ?? [],\n }\n\n const productSearchPromise = ctx.clients.search.products(searchArgs)\n\n return { searchArgs, productSearchPromise }\n },\n allProducts: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllProductsArgs,\n ctx: Context\n ) => {\n const {\n clients: { search },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const products = await search.products({\n page: Math.ceil(after / first),\n count: first,\n })\n\n const skus = products.products\n .map((product) => product.items.map((sku) => enhanceSku(sku, product)))\n .flat()\n .filter((sku) => sku.sellers.length > 0)\n\n return {\n pageInfo: {\n hasNextPage: products.pagination.after.length > 0,\n hasPreviousPage: products.pagination.before.length > 0,\n startCursor: '0',\n endCursor: products.recordsFiltered.toString(),\n totalCount: products.recordsFiltered,\n },\n // after + index is bigger than after+first itself because of the array flat() above\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: (after + index).toString(),\n })),\n }\n },\n allCollections: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllCollectionsArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n\n const [brands, tree] = await Promise.all([\n commerce.catalog.brand.list(),\n commerce.catalog.category.tree(),\n ])\n\n const categories: Array<CategoryTree & { level: number }> = []\n const dfs = (node: CategoryTree, level: number) => {\n categories.push({ ...node, level })\n\n for (const child of node.children) {\n dfs(child, level + 1)\n }\n }\n\n for (const node of tree) {\n dfs(node, 0)\n }\n\n const collections = [\n ...brands\n .filter((brand) => brand.isActive)\n .map((x) => ({ ...x, type: 'brand' })),\n ...categories,\n ]\n\n const validCollections = collections\n // Nullable slugs may cause one route to override the other\n .filter((node) => Boolean(StoreCollection.slug(node, null, ctx, null)))\n\n return {\n pageInfo: {\n hasNextPage: validCollections.length - after > first,\n hasPreviousPage: after > 0,\n startCursor: '0',\n endCursor: (\n Math.min(first, validCollections.length - after) - 1\n ).toString(),\n totalCount: validCollections.length,\n },\n edges: validCollections\n .slice(after, after + first)\n .map((node, index) => ({\n node,\n cursor: (after + index).toString(),\n })),\n }\n },\n shipping: async (\n _: unknown,\n { country, items, postalCode }: QueryShippingArgs,\n ctx: Context\n ) => {\n const {\n loaders: { simulationLoader },\n clients: { commerce },\n } = ctx\n\n const [simulation, address] = await Promise.all([\n simulationLoader.load({ country, items, postalCode }),\n commerce.checkout.address({ postalCode, country }),\n ])\n\n return {\n ...simulation,\n address,\n }\n },\n\n redirect: async (\n _: unknown,\n { term, selectedFacets }: QueryRedirectArgs,\n ctx: Context\n ) => {\n // Currently the search redirection can be done through a search term or filter (facet) so we limit the redirect query to always have one of these values otherwise we do not execute it.\n // https://help.vtex.com/en/tracks/vtex-intelligent-search--19wrbB7nEQcmwzDPl1l4Cb/4Gd2wLQFbCwTsh8RUDwSoL?&utm_source=autocomplete\n if (!term && (!selectedFacets || !selectedFacets.length)) {\n return null\n }\n\n const { redirect } = await ctx.clients.search.products({\n page: 1,\n count: 1,\n query: term ?? undefined,\n selectedFacets: selectedFacets?.flatMap(transformSelectedFacet) ?? [],\n })\n\n return {\n url: redirect,\n }\n },\n\n sellers: async (\n _: unknown,\n { postalCode, geoCoordinates, country, salesChannel }: QuerySellersArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const regionData = await commerce.checkout.region({\n postalCode,\n geoCoordinates,\n country,\n salesChannel,\n })\n const region = regionData?.[0]\n const { id, sellers } = region\n\n return {\n id,\n sellers,\n }\n },\n}\n","import type { Resolver } from '..'\n\nexport const StoreReview: Record<string, Resolver> = {\n reviewRating: () => ({\n ratingValue: 5,\n bestRating: 5,\n }),\n author: () => ({\n name: '',\n }),\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { SearchArgs } from '../clients/search'\nimport type { Facet } from '../clients/search/types/FacetSearchResult'\nimport { ProductSearchResult } from '../clients/search/types/ProductSearchResult'\n\nexport type Root = {\n searchArgs: Omit<SearchArgs, 'type'>\n productSearchPromise: Promise<ProductSearchResult>\n}\n\nconst isRootFacet = (facet: Facet) => facet.key === 'category-1'\n\nexport const StoreSearchResult: Record<string, Resolver<Root>> = {\n suggestions: async (root, _, ctx) => {\n const {\n clients: { search },\n } = ctx\n\n const { searchArgs } = root\n\n // If there's no search query, suggest the most popular searches.\n if (!searchArgs.query) {\n const topSearches = await search.topSearches()\n\n return {\n terms: topSearches.searches.map((item) => ({\n value: item.term,\n count: item.count,\n })),\n products: [],\n }\n }\n\n const { productSearchPromise } = root\n const [terms, productSearchResult] = await Promise.all([\n search.suggestedTerms(searchArgs),\n productSearchPromise,\n ])\n\n const skus = productSearchResult.products\n .map((product) => {\n const [maybeSku] = product.items\n\n return maybeSku && enhanceSku(maybeSku, product)\n })\n .filter((sku) => !!sku)\n\n const { searches } = terms\n\n return {\n terms: searches.map((item) => ({ value: item.term, count: item.count })),\n products: skus,\n }\n },\n products: async ({ productSearchPromise }) => {\n const productSearchResult = await productSearchPromise\n\n const skus = productSearchResult.products\n .map((product) => {\n const [maybeSku] = product.items\n\n return maybeSku && enhanceSku(maybeSku, product)\n })\n .filter((sku) => !!sku)\n\n return {\n pageInfo: {\n hasNextPage: productSearchResult.pagination.after.length > 0,\n hasPreviousPage: productSearchResult.pagination.before.length > 0,\n startCursor: '0',\n endCursor: productSearchResult.recordsFiltered.toString(),\n totalCount: productSearchResult.recordsFiltered,\n },\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: index.toString(),\n })),\n }\n },\n facets: async ({ searchArgs }, _, ctx) => {\n const {\n clients: { search: is },\n } = ctx\n\n ctx.storage.searchArgs = searchArgs\n\n const { facets = [] } = await is.facets(searchArgs)\n\n const isCollectionPage = !searchArgs.query\n\n const filteredFacets = facets\n // Remove root facet on category pages\n .filter((facet) => !isCollectionPage || !isRootFacet(facet))\n\n return filteredFacets\n },\n metadata: async ({ searchArgs, productSearchPromise }) => {\n if (!searchArgs.query) {\n return null\n }\n\n const productSearchResult = await productSearchPromise\n\n return {\n isTermMisspelled: productSearchResult.correction?.misspelled ?? false,\n logicalOperator: productSearchResult.operator,\n }\n },\n}\n","import type { Resolver } from '..'\n\nexport type Root = { title?: string; description?: string; canonical?: string }\n\nexport const StoreSeo: Record<string, Resolver<Root>> = {\n title: ({ title }) => title ?? '',\n description: ({ description }) => description ?? '',\n canonical: ({ canonical }) => canonical ?? '',\n titleTemplate: () => '',\n}\n","import type { Resolver } from '..'\n\ntype Unit = 'bd' | 'd' | 'h' | 'm'\nconst units = ['bd', 'd', 'h', 'm'] as const\n\nconst isUnit = (x: any): x is Unit => units.includes(x)\n\nconst localizedEstimates: Record<string, Record<string, string>> = {\n bd: {\n 0: 'Today',\n 1: 'In 1 business day',\n other: `Up to # business days`,\n },\n d: {\n 0: 'Today',\n 1: 'In 1 day',\n other: 'Up to # days',\n },\n h: {\n 0: 'Now',\n 1: 'In 1 hour',\n other: 'Up to # hours',\n },\n m: {\n 0: 'Now',\n 1: 'In 1 minute',\n other: 'Up to # minutes',\n },\n}\n\n/**\n * Transforms estimate (e.g 3bd) into friendly format (e.g Up to 3 business days)\n * based on https://github.com/vtex-apps/shipping-estimate-translator/blob/13e17055d6353dd3f3f4c31bae77ab049002809b/messages/en.json\n */\n\nexport const getLocalizedEstimates = (estimate: string): string => {\n const [amount, unit] = [estimate.split(/\\D+/)[0], estimate.split(/[0-9]+/)[1]]\n\n const isAmountNumber = amount !== '' && !Number.isNaN(Number(amount))\n const isUnitValid = isUnit(unit)\n\n if (!isAmountNumber || !isUnitValid) {\n return ''\n }\n\n const amountKey = Number(amount) < 2 ? Number(amount) : 'other'\n\n return localizedEstimates[unit][amountKey].replace('#', amount) ?? ''\n}\n\nexport type Root = {\n name?: string\n friendlyName?: string\n price?: number\n shippingEstimate?: string\n}\n\nexport const ShippingSLA: Record<string, Resolver<Root>> = {\n carrier: (root) => root?.friendlyName ?? root?.name ?? '',\n price: (root) => (root?.price ? root.price / 100 : root?.price),\n localizedEstimates: (root) =>\n root?.shippingEstimate ? getLocalizedEstimates(root.shippingEstimate) : '',\n}\n","import { StoreProduct as StoreProductType } from '../../..'\nimport type { Product, Item } from '../clients/search/types/ProductSearchResult'\n\nexport type SkuVariants = StoreProductType[]\n\nexport type SkuVariantsByName = Record<string, Array<FormattedSkuVariant>>\n\ntype FormattedSkuVariant = {\n alt: string\n src: string\n label: string\n value: string\n}\n\nfunction findSkuVariantImage(availableImages: Item['images']) {\n return (\n availableImages.find(\n (imageProperties) => imageProperties.imageLabel === 'skuvariation'\n ) ?? availableImages[0]\n )\n}\n\nexport function createSlugsMap(\n variants: Item[],\n dominantVariantName: string,\n baseSlug: string\n) {\n /**\n * Maps property value combinations to their respective SKU's slug. Enables\n * us to retrieve the slug for the SKU that matches the currently selected\n * variations in O(1) time.\n *\n * Example: `'Color-Red-Size-40': 'classic-shoes-37'`\n */\n const slugsMap: Record<string, string> = {}\n\n variants.forEach((variant) => {\n const skuSpecificationProperties = variant.variations\n\n if (skuSpecificationProperties.length === 0) {\n return\n }\n\n // Make sure that the 'name-value' pair for the dominant variation\n // is always the first one.\n const dominantNameValue = `${dominantVariantName}-${\n skuSpecificationProperties.find(\n (variationDetails) => variationDetails.name === dominantVariantName\n )?.values[0] ?? ''\n }`\n\n const skuVariantKey = skuSpecificationProperties.reduce((acc, property) => {\n const shouldIgnore = property.name === dominantVariantName\n\n if (shouldIgnore) {\n return acc\n }\n\n return acc + `-${property.name}-${property.values[0]}`\n }, dominantNameValue)\n\n slugsMap[skuVariantKey] = `${baseSlug}-${variant.itemId}`\n })\n\n return slugsMap\n}\n\nexport function getActiveSkuVariations(variations: Item['variations']) {\n const activeVariations: Record<string, string> = {}\n\n variations.forEach((variation) => {\n activeVariations[variation.name] = variation.values[0]\n })\n\n return activeVariations\n}\n\nexport function getVariantsByName(\n skuSpecifications: Product['skuSpecifications']\n) {\n const variants: Record<string, string[]> = {}\n\n skuSpecifications?.forEach((specification) => {\n variants[specification.field.originalName ?? specification.field.name] =\n specification.values.map((value) => value.originalName ?? value.name)\n })\n\n return variants\n}\n\nfunction compare(a: string, b: string) {\n // Values are always represented as Strings, so we need to handle numbers\n // in this special case.\n if (!Number.isNaN(Number(a) - Number(b))) {\n return Number(a) - Number(b)\n }\n\n if (a < b) {\n return -1\n }\n\n if (a > b) {\n return 1\n }\n\n return 0\n}\n\nfunction sortVariants(variantsByName: SkuVariantsByName) {\n const sortedVariants = variantsByName\n\n for (const variantProperty in variantsByName) {\n variantsByName[variantProperty].sort((a, b) => compare(a.value, b.value))\n }\n\n return sortedVariants\n}\n\nexport function getFormattedVariations(\n variants: Item[],\n dominantVariantName: string,\n dominantVariantValue: string\n) {\n /**\n * SKU options already formatted and indexed by their property name.\n *\n * Ex: {\n * `Size`: [\n * { label: '42', value: '42' },\n * { label: '41', value: '41' },\n * { label: '39', value: '39' },\n * ]\n * }\n */\n const variantsByName: SkuVariantsByName = {}\n\n const previouslySeenPropertyValues = new Set<string>()\n\n variants.forEach((variant) => {\n if (variant.variations.length === 0) {\n return\n }\n\n const variantImageToUse = findSkuVariantImage(variant.images)\n\n const dominantVariantEntry = variant.variations.find(\n (variation) => variation.name === dominantVariantName\n )\n\n const matchesDominantVariant =\n dominantVariantEntry?.values[0] === dominantVariantValue\n\n if (!matchesDominantVariant) {\n const nameValueIdentifier = `${dominantVariantName}-${dominantVariantEntry?.values[0]}`\n\n if (\n !dominantVariantEntry ||\n previouslySeenPropertyValues.has(nameValueIdentifier)\n ) {\n return\n }\n\n previouslySeenPropertyValues.add(nameValueIdentifier)\n\n const formattedVariant = {\n src: variantImageToUse.imageUrl,\n alt: variantImageToUse.imageLabel ?? '',\n label: `${dominantVariantName}: ${dominantVariantEntry.values[0]}`,\n value: dominantVariantEntry.values[0],\n }\n\n if (variantsByName[dominantVariantEntry.name]) {\n variantsByName[dominantVariantEntry.name].push(formattedVariant)\n } else {\n variantsByName[dominantVariantEntry.name] = [formattedVariant]\n }\n\n return\n }\n\n variant.variations.forEach((variationProperty) => {\n const nameValueIdentifier = `${variationProperty.name}-${variationProperty.values[0]}`\n\n if (previouslySeenPropertyValues.has(nameValueIdentifier)) {\n return\n }\n\n previouslySeenPropertyValues.add(nameValueIdentifier)\n\n const formattedVariant = {\n src: variantImageToUse.imageUrl,\n alt: variantImageToUse.imageLabel ?? '',\n label: `${variationProperty.name}: ${variationProperty.values[0]}`,\n value: variationProperty.values[0],\n }\n\n if (variantsByName[variationProperty.name]) {\n variantsByName[variationProperty.name].push(formattedVariant)\n } else {\n variantsByName[variationProperty.name] = [formattedVariant]\n }\n })\n })\n\n return sortVariants(variantsByName)\n}\n","import type { Resolver } from '..'\nimport type { PromiseType } from '../../../typings'\nimport type { StoreProduct } from './product'\nimport {\n createSlugsMap,\n getActiveSkuVariations,\n getFormattedVariations,\n getVariantsByName,\n} from '../utils/skuVariants'\n\nexport type Root = PromiseType<ReturnType<typeof StoreProduct.isVariantOf>>\n\ntype SlugsMapArgs = {\n dominantVariantName: string\n}\n\nexport const SkuVariants: Record<string, Resolver<Root>> = {\n activeVariations: (root) => getActiveSkuVariations(root.variations),\n allVariantsByName: (root) =>\n getVariantsByName(root.isVariantOf.skuSpecifications),\n\n slugsMap: (root, args) =>\n createSlugsMap(\n root.isVariantOf.items,\n (args as SlugsMapArgs).dominantVariantName ?? root.variations[0]?.name,\n root.isVariantOf.linkText\n ),\n\n availableVariations: (root, args) => {\n const dominantVariantName = (args as SlugsMapArgs).dominantVariantName ?? root.variations[0]?.name\n const activeVariations = getActiveSkuVariations(root.variations)\n\n const activeDominantVariationValue = activeVariations[dominantVariantName]\n\n const filteredFormattedVariations = getFormattedVariations(\n root.isVariantOf.items,\n dominantVariantName,\n activeDominantVariationValue\n )\n\n return filteredFormattedVariations\n },\n}\n","import { getClients } from './clients'\nimport { getLoaders } from './loaders'\nimport { StoreAggregateOffer } from './resolvers/aggregateOffer'\nimport { StoreAggregateRating } from './resolvers/aggregateRating'\nimport { StoreCollection } from './resolvers/collection'\nimport {\n StoreFacet,\n StoreFacetBoolean,\n StoreFacetRange,\n} from './resolvers/facet'\nimport { StoreFacetValueBoolean } from './resolvers/faceValue'\nimport { Mutation } from './resolvers/mutation'\nimport { ObjectOrString } from './resolvers/objectOrString'\nimport { StoreOffer } from './resolvers/offer'\nimport { StoreProduct } from './resolvers/product'\nimport { StoreProductGroup } from './resolvers/productGroup'\nimport { StorePropertyValue } from './resolvers/propertyValue'\nimport { Query } from './resolvers/query'\nimport { StoreReview } from './resolvers/review'\nimport { StoreSearchResult } from './resolvers/searchResult'\nimport { StoreSeo } from './resolvers/seo'\nimport { ShippingSLA } from './resolvers/shippingSLA'\nimport { SkuVariants } from './resolvers/skuVariations'\nimport ChannelMarshal from './utils/channel'\nimport type { Loaders } from './loaders'\nimport type { Clients } from './clients'\nimport type { Channel } from './utils/channel'\nimport type { SearchArgs } from './clients/search'\n\nexport interface Options {\n platform: 'vtex'\n account: string\n environment: 'vtexcommercestable' | 'vtexcommercebeta'\n // Default sales channel to use for fetching products\n channel: string\n locale: string\n hideUnavailableItems: boolean\n incrementAddress: boolean\n flags?: FeatureFlags\n}\n\ninterface FeatureFlags {\n enableOrderFormSync?: boolean\n}\n\nexport interface Context {\n clients: Clients\n loaders: Loaders\n /**\n * @description Storage updated at each request.\n *\n * Use this datastructure to store and share small values in the context.\n * Use it with caution since dependecy injection leads to a more complex code\n * */\n storage: {\n channel: Required<Channel>\n locale: string\n flags: FeatureFlags\n searchArgs?: Omit<SearchArgs, 'type'>\n }\n headers: Record<string, string>\n}\n\nexport type Resolver<R = unknown, A = unknown, Return = any> = (\n root: R,\n args: A,\n ctx: Context,\n info: any\n) => Return\n\nconst Resolvers = {\n StoreCollection,\n StoreAggregateOffer,\n StoreProduct,\n StoreSeo,\n StoreFacet,\n StoreFacetBoolean,\n StoreFacetRange,\n StoreFacetValueBoolean,\n StoreOffer,\n StoreAggregateRating,\n StoreReview,\n StoreProductGroup,\n StoreSearchResult,\n StorePropertyValue,\n SkuVariants,\n ShippingSLA,\n ObjectOrString,\n Query,\n Mutation,\n}\n\nexport const getContextFactory =\n (options: Options) =>\n (ctx: any): Context => {\n ctx.storage = {\n channel: ChannelMarshal.parse(options.channel),\n flags: options.flags ?? {},\n locale: options.locale,\n }\n ctx.clients = getClients(options, ctx)\n ctx.loaders = getLoaders(options, ctx)\n\n return ctx\n }\n\nexport const getResolvers = (_: Options) => Resolvers\n","import { print } from 'graphql'\n\nimport Address from './address.graphql'\nimport AggregateOffer from './aggregateOffer.graphql'\nimport AggregateRating from './aggregateRating.graphql'\nimport Author from './author.graphql'\nimport Brand from './brand.graphql'\nimport Breadcrumb from './breadcrumb.graphql'\nimport Cart from './cart.graphql'\nimport Collection from './collection.graphql'\nimport Facet from './facet.graphql'\nimport Image from './image.graphql'\nimport Mutation from './mutation.graphql'\nimport Newsletter from './newsletter.graphql'\nimport ObjectOrString from './objectOrString.graphql'\nimport Offer from './offer.graphql'\nimport Order from './order.graphql'\nimport Organization from './organization.graphql'\nimport PageInfo from './pageInfo.graphql'\nimport Person from './person.graphql'\nimport Product from './product.graphql'\nimport ProductGroup from './productGroup.graphql'\nimport PropertyValue from './propertyValue.graphql'\nimport Query from './query.graphql'\nimport Review from './review.graphql'\nimport Seo from './seo.graphql'\nimport Session from './session.graphql'\nimport ShippingSimulation from './shipping.graphql'\nimport SkuVariants from './skuVariants.graphql'\nimport Status from './status.graphql'\n\nexport const typeDefs = [\n Query,\n Mutation,\n Address,\n Brand,\n Breadcrumb,\n Collection,\n Facet,\n Image,\n PageInfo,\n Product,\n Seo,\n Offer,\n AggregateRating,\n Review,\n Author,\n ProductGroup,\n Organization,\n AggregateOffer,\n Order,\n Cart,\n Status,\n PropertyValue,\n Person,\n ObjectOrString,\n Session,\n Newsletter,\n SkuVariants,\n ShippingSimulation,\n]\n .map(print)\n .join('\\n')\n","import { getDirective, MapperKind, mapSchema } from \"@graphql-tools/utils\";\nimport { GraphQLSchema } from \"graphql\";\n\nimport type { Directive } from \"./index\";\n\nconst NAME = \"cacheControl\";\n\nexport interface CacheControl {\n sMaxAge?: number;\n staleWhileRevalidate?: number;\n scope?: string;\n}\n\nexport const stringify = (\n { scope = \"private\", sMaxAge = 0, staleWhileRevalidate = 0 }: CacheControl,\n) =>\n `${scope}, s-maxage=${sMaxAge}, stale-while-revalidate=${staleWhileRevalidate}`;\n\nconst min = (a: number | undefined, b: number | undefined) => {\n if (typeof a === \"number\" && typeof b === \"number\") {\n return a > b ? b : a;\n }\n\n if (typeof a === \"number\") {\n return a;\n }\n\n return b;\n};\n\nconst minScope = (\n a: string | undefined,\n b: string | undefined,\n) => {\n if (typeof a === \"string\" && typeof b === \"string\") {\n return a === \"public\" && b === \"public\" ? \"public\" : \"private\";\n }\n\n return a || b;\n};\n\nconst directive: Directive = {\n typeDefs:\n `directive @cacheControl(sMaxAge: Int, staleWhileRevalidate: Int, scope: String) on FIELD_DEFINITION`,\n transformer: (schema: GraphQLSchema) =>\n mapSchema(schema, {\n [MapperKind.OBJECT_FIELD]: (fieldConfig) => {\n const cacheControl = getDirective(schema, fieldConfig, NAME)?.[0] as\n | CacheControl\n | undefined;\n\n if (cacheControl) {\n const { sMaxAge, staleWhileRevalidate, scope } = cacheControl;\n\n const resolver = fieldConfig.resolve\n\n fieldConfig.resolve = (obj, args, ctx, info) => {\n ctx.cacheControl = {\n sMaxAge: min(ctx.cacheControl?.sMaxAge, sMaxAge),\n staleWhileRevalidate: min(\n ctx.cacheControl?.staleWhileRevalidate,\n staleWhileRevalidate,\n ),\n scope: minScope(ctx.cacheControl?.scope, scope),\n };\n\n return resolver?.(obj, args, ctx, info);\n };\n }\n\n return fieldConfig;\n },\n }),\n};\n\nexport default directive;\n","import type { Plugin, OnExecuteHookResult } from '@envelop/core'\nimport { isAsyncIterable } from '@envelop/core'\nimport { useOnResolve } from '@envelop/on-resolve'\nimport { SpanKind, Context, Span } from '@opentelemetry/api'\nimport {\n trace as openTelTrace,\n context as openTelContext,\n} from '@opentelemetry/api'\nimport type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'\nimport type { Path } from 'graphql/jsutils/Path'\nimport type { LoggerProvider } from '@opentelemetry/sdk-logs'\nimport type { LogRecord } from '@opentelemetry/api-logs'\nimport { SeverityNumber } from '@opentelemetry/api-logs'\nimport { print, Kind, OperationDefinitionNode } from 'graphql'\n\nexport enum AttributeName {\n EXECUTION_ERROR = 'graphql.error',\n EXECUTION_RESULT = 'graphql.result',\n RESOLVER_EXECUTION_ERROR = 'graphql.resolver.error',\n RESOLVER_EXCEPTION = 'graphql.resolver.exception',\n RESOLVER_FIELD_NAME = 'graphql.resolver.fieldName',\n RESOLVER_TYPE_NAME = 'graphql.resolver.typeName',\n RESOLVER_RESULT_TYPE = 'graphql.resolver.resultType',\n RESOLVER_ARGS = 'graphql.resolver.args',\n EXECUTION_OPERATION_NAME = 'graphql.operation.name',\n EXECUTION_OPERATION_TYPE = 'graphql.operation.type',\n EXECUTION_OPERATION_DOCUMENT = 'graphql.document',\n EXECUTION_VARIABLES = 'graphql.variables',\n}\n\nconst tracingSpanSymbol = Symbol('OPEN_TELEMETRY_GRAPHQL')\n\nexport type PluginContext = {\n [tracingSpanSymbol]: Span\n}\n\nfunction getResolverSpanKey(path: Path) {\n const nodes = []\n\n // If the first node (after reversed, it will be the last one) is an integer, that is, identifies a list,\n // we don't want to include it in the key. Note that this will only happen when analysing .prev paths in\n // a list of elements. We just want to remove the initial node that is a integer, not all of them.\n //\n // Nodes with keys 6bc73341b2a183fc::product::image::0::url would not be able to find\n // parents with key 6bc73341b2a183fc::product::image because of the \"0\" list index -\n // it would search for 6bc73341b2a183fc::product::image::0\n let currentPath: Path | undefined =\n nodes.length === 0 && Number.isInteger(path.key) ? path.prev : path\n\n while (currentPath) {\n nodes.push(currentPath.key)\n\n currentPath = currentPath.prev\n }\n\n return [...nodes].reverse().join('.')\n}\n\nexport const getFaststoreTelemetryPlugin = (\n tracingProvider: BasicTracerProvider,\n loggerProvider: LoggerProvider,\n serviceName: string,\n experimentalSendLogs: boolean\n): (() => Plugin<PluginContext>) => {\n return function useFaststoreTelemetry() {\n const tracer = tracingProvider.getTracer(serviceName)\n const logger = loggerProvider.getLogger(serviceName)\n\n const resolverContextsByRootSpans: Record<\n string,\n Record<string, Context>\n > = {}\n\n return {\n onPluginInit({ addPlugin }) {\n addPlugin(\n // eslint-disable-next-line\n useOnResolve(({ info, context }) => {\n if (\n context &&\n typeof context === 'object' &&\n context[tracingSpanSymbol]\n ) {\n tracer.getActiveSpanProcessor()\n const rootContextSpanId =\n context[tracingSpanSymbol].spanContext().spanId\n\n const { fieldName, returnType, parentType, path } = info\n\n const previousResolverSpanKey =\n path.prev && getResolverSpanKey(path.prev)\n\n let ctx: Context | null = null\n\n if (\n previousResolverSpanKey &&\n resolverContextsByRootSpans[rootContextSpanId][\n previousResolverSpanKey\n ]\n ) {\n ctx =\n resolverContextsByRootSpans[rootContextSpanId][\n previousResolverSpanKey\n ]\n } else {\n ctx = openTelTrace.setSpan(\n openTelContext.active(),\n context[tracingSpanSymbol]\n )\n\n resolverContextsByRootSpans[rootContextSpanId] =\n resolverContextsByRootSpans[rootContextSpanId] ?? {}\n }\n\n const resolverIndexInList = Number.isInteger(path.prev?.key)\n ? `[${path.prev?.key}]`\n : ''\n\n const resolverSpan = tracer.startSpan(\n `${parentType.toString()}.${fieldName}${resolverIndexInList}`,\n {\n attributes: {\n [AttributeName.RESOLVER_FIELD_NAME]: fieldName,\n [AttributeName.RESOLVER_TYPE_NAME]: parentType.toString(),\n [AttributeName.RESOLVER_RESULT_TYPE]: returnType.toString(),\n 'meta.span.path': getResolverSpanKey(path),\n },\n },\n ctx\n )\n\n const resolverCtx = openTelTrace.setSpan(ctx, resolverSpan)\n\n resolverContextsByRootSpans[rootContextSpanId][\n getResolverSpanKey(path)\n ] = resolverCtx\n\n return ({ result }) => {\n if (result instanceof Error) {\n resolverSpan.setAttributes({\n error: true,\n 'exception.category':\n AttributeName.RESOLVER_EXECUTION_ERROR,\n 'exception.message': result.message,\n 'exception.type': result.name,\n })\n resolverSpan.recordException(result)\n }\n\n resolverSpan.end()\n }\n }\n\n return () => {}\n })\n )\n },\n onExecute({ args, extendContext }) {\n const operationType = args.document.definitions\n .filter((def) => def.kind === Kind.OPERATION_DEFINITION)\n .map((def) => (def as OperationDefinitionNode).operation)?.[0]\n\n // Span name according to Semantic Conventions\n // https://github.com/open-telemetry/semantic-conventions\n let spanName = 'GraphQL Operation'\n\n if (operationType && args.operationName) {\n spanName = `${operationType} ${args.operationName}`\n } else if (operationType && !args.operationName) {\n spanName = operationType\n }\n\n const executionSpan = tracer.startSpan(spanName, {\n kind: SpanKind.SERVER,\n attributes: {\n [AttributeName.EXECUTION_OPERATION_NAME]:\n args.operationName ?? undefined,\n [AttributeName.EXECUTION_OPERATION_TYPE]:\n operationType ?? undefined,\n [AttributeName.EXECUTION_OPERATION_DOCUMENT]: print(args.document),\n },\n })\n\n const executeContext = openTelContext.active()\n\n const resultCbs: OnExecuteHookResult<PluginContext> = {\n onExecuteDone({ result }) {\n if (isAsyncIterable(result)) {\n executionSpan.end()\n // eslint-disable-next-line no-console\n console.warn(\n `Plugin \"newrelic\" encountered a AsyncIterator which is not supported yet, so tracing data is not available for the operation.`\n )\n\n return\n }\n\n const logRecord: LogRecord = {\n context: executeContext,\n attributes: {\n 'service.name': 'faststore-api',\n 'service.version': '1.12.38',\n 'service.name_and_version': 'faststore-api@1.12.38',\n 'vtex.search_index': 'faststore_beta_api',\n [AttributeName.EXECUTION_OPERATION_NAME]:\n args.operationName ?? undefined,\n [AttributeName.EXECUTION_OPERATION_DOCUMENT]: print(\n args.document\n ),\n [AttributeName.EXECUTION_VARIABLES]: JSON.stringify(\n args.variableValues ?? {}\n ),\n },\n }\n\n if (\n typeof result.data !== 'undefined' &&\n !(result.errors && result.errors.length > 0)\n ) {\n logRecord.severityNumber = SeverityNumber.INFO\n logRecord.severityText = 'Info'\n logRecord.attributes![AttributeName.EXECUTION_RESULT] =\n JSON.stringify(result)\n }\n\n if (result.errors && result.errors.length > 0) {\n logRecord.severityNumber = SeverityNumber.ERROR\n logRecord.severityText = 'Error'\n logRecord.attributes![AttributeName.EXECUTION_ERROR] =\n JSON.stringify(result.errors)\n\n executionSpan.setAttributes({\n error: true,\n 'exception.category': AttributeName.EXECUTION_ERROR,\n 'exception.message': JSON.stringify(result.errors),\n })\n }\n\n if (experimentalSendLogs) {\n logger.emit(logRecord)\n }\n\n executionSpan.end()\n },\n }\n\n extendContext({\n [tracingSpanSymbol]: executionSpan,\n })\n\n return resultCbs\n },\n }\n }\n}\n","import {\n BasicTracerProvider,\n SimpleSpanProcessor,\n ConsoleSpanExporter,\n} from '@opentelemetry/sdk-trace-base'\nimport { Resource } from '@opentelemetry/resources'\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'\nimport {\n LoggerProvider,\n SimpleLogRecordProcessor,\n ConsoleLogRecordExporter,\n} from '@opentelemetry/sdk-logs'\nimport { OTLPLogsExporter } from '@opentelemetry/exporter-logs-otlp-grpc'\n\nimport type { Options } from '../'\nimport { getFaststoreTelemetryPlugin } from './useFaststoreTelemetry'\nimport packageJson from '../../package.json'\n\nexport type GetTelemetryOptions = {\n mode?: 'verbose' | 'dev'\n experimentalSendLogs?: boolean\n}\n\nconst FASTSTORE_API_VERSION = packageJson.version\n\n// TODO: These urls are hardcoded for now, but they should be configurable via ENV variables\n// They are only acessible from within the VTEX network, so they are not a security risk\nconst TRACE_COLLECTOR_URL = 'opentelemetry-collector.vtex.systems'\nconst TRACE_COLLECTOR_URL_DEV = 'opentelemetry-collector-beta.vtex.systems'\nconst LOG_COLLECTOR_URL = 'opentelemetry-collector.vtex.systems'\n\nexport function getTelemetry(\n APIOptions: Options,\n telemetryOptions?: GetTelemetryOptions\n) {\n const honeycombCollectorOptions = {\n url:\n telemetryOptions?.mode === 'dev'\n ? TRACE_COLLECTOR_URL_DEV\n : TRACE_COLLECTOR_URL,\n }\n\n const openSearchCollectorOptions = {\n url: LOG_COLLECTOR_URL,\n }\n\n // Create a new tracer provider\n const tracerProvider = new BasicTracerProvider({\n resource: new Resource({\n 'service.name': 'faststore-api',\n 'service.version': FASTSTORE_API_VERSION,\n 'service.name_and_version': `faststore-api@${FASTSTORE_API_VERSION}`,\n platform: APIOptions.platform,\n [`${APIOptions.platform}.account`]: APIOptions.account,\n [`${APIOptions.platform}.environment`]: APIOptions.environment,\n // TODO: include the following properties in the logs\n // [`${APIOptions.platform}.options.hideUnavailableItems`]:\n // APIOptions.hideUnavailableItems,\n // [`${APIOptions.platform}.flags.enableOrderFormSync`]:\n // APIOptions.flags?.enableOrderFormSync,\n // channel: APIOptions.channel,\n locale: APIOptions.locale,\n }),\n })\n\n const loggerProvider = new LoggerProvider()\n\n // Create trace exporter\n const honeycombExporter = new OTLPTraceExporter(honeycombCollectorOptions)\n\n // Create log exporter\n const openSearchExporter = new OTLPLogsExporter(openSearchCollectorOptions)\n\n // Set up a span processor to export spans to Honeycomb\n const honeyCombSpanProcessor = new SimpleSpanProcessor(honeycombExporter)\n\n // Set up a log record processor to export spans to OpenSearch\n const openSearchLogProcessor = new SimpleLogRecordProcessor(\n openSearchExporter\n )\n\n // Register the span processor with the tracer provider\n tracerProvider.addSpanProcessor(honeyCombSpanProcessor)\n\n // Register the log record processor with the log provider\n loggerProvider.addLogRecordProcessor(openSearchLogProcessor)\n\n if (\n telemetryOptions?.mode === 'verbose' ||\n telemetryOptions?.mode === 'dev'\n ) {\n // Set up a console exporter for verbose mode\n const consoleExporter = new ConsoleSpanExporter()\n const verboseTraceProcessor = new SimpleSpanProcessor(consoleExporter)\n\n // Set up processors for verbose mode\n const consoleLogExporter = new ConsoleLogRecordExporter()\n const veboseLogRecordExporter = new SimpleLogRecordProcessor(\n consoleLogExporter\n )\n\n tracerProvider.addSpanProcessor(verboseTraceProcessor)\n loggerProvider.addLogRecordProcessor(veboseLogRecordExporter)\n }\n\n const useFaststoreTelemetry = getFaststoreTelemetryPlugin(\n // The @opentelemetry/sdk-trace-base was renamed from @opentelemetry/tracing but the\n // envelop plugin doesn't support this change yet. This causes the class type to be incompatible,\n // even if they are the same. https://github.com/n1ru4l/envelop/issues/1610\n tracerProvider as any,\n loggerProvider,\n 'faststore-api',\n telemetryOptions?.experimentalSendLogs ?? false\n )\n\n return { useFaststoreTelemetry }\n}\n","import { makeExecutableSchema } from '@graphql-tools/schema'\n\nimport {\n getContextFactory as getContextFactoryVTEX,\n getResolvers as getResolversVTEX,\n} from './platforms/vtex'\nimport { typeDefs } from './typeDefs'\nimport cacheControlDirective from './directives/cacheControl'\nimport type { Directive } from './directives'\nimport type { Options as OptionsVTEX } from './platforms/vtex'\n\nexport * from './__generated__/schema'\nexport * from './platforms/errors'\nexport * from './telemetry'\nexport { stringify as stringifyCacheControl } from './directives/cacheControl'\nexport type { CacheControl } from './directives/cacheControl'\n\nexport type Options = OptionsVTEX\n\nconst platforms = {\n vtex: {\n getResolvers: getResolversVTEX,\n getContextFactory: getContextFactoryVTEX,\n },\n}\n\nconst directives: Directive[] = [\n cacheControlDirective\n]\n\nexport const getTypeDefs = () => [typeDefs, ...directives.map(d => d.typeDefs)]\n\nexport const getResolvers = (options: Options) =>\n platforms[options.platform].getResolvers(options)\n\nexport const getContextFactory = (options: Options) =>\n platforms[options.platform].getContextFactory(options)\n\nexport const getSchema = async (options: Options) => {\n const schema = makeExecutableSchema({\n resolvers: getResolvers(options),\n typeDefs: getTypeDefs(),\n })\n\n return directives.reduce((s, d) => d.transformer(s), schema)\n}\n\nexport * from './platforms/vtex/resolvers/root'\nexport { Resolver } from './platforms/vtex'\n"],"names":["USER_AGENT","packageJson","name","version","fetchAPI","info","init","response","fetch","headers","ok","status","json","undefined","console","error","text","Error","BASE_INIT","method","VtexCommerce","account","environment","incrementAddress","ctx","base","catalog","salesChannel","sc","brand","list","category","tree","depth","portal","pagetype","slug","products","crossselling","type","productId","groupByProduct","params","URLSearchParams","storage","channel","toString","checkout","simulation","args","body","JSON","stringify","shippingData","id","index","deliveryMode","selectedAddresses","setDeliveryWindow","deliveryWindow","startDateUtc","startDate","endDateUtc","endDate","mappedBody","logisticsInfo","Array","from","length","_","itemIndex","selectedDeliveryChannel","deliveryChannel","selectedSla","deliveryMethod","clearAddressIfPostalCodeNotFound","cookie","orderForm","refreshOutdatedData","requestInit","updateOrderFormItems","orderItems","allowOutdatedData","shouldSplitItem","items","noSplitItem","setCustomData","appId","key","value","region","postalCode","geoCoordinates","country","append","longitude","latitude","url","address","session","search","set","subscribeToNewsletter","data","isNewsletterOptIn","POLICY_KEY","REGION_KEY","CHANNEL_KEYS","Set","IntelligentSearch","hideUnavailableItems","getPolicyFacet","getRegionFacet","regionId","seller","sellerRegionId","Buffer","facet","addDefaultFacets","facets","withDefaultFacets","filter","has","policyFacet","find","regionFacet","push","query","page","count","sort","selectedFacets","fuzzy","locale","pathname","map","join","suggestedTerms","topSearches","THIRTY_MINUTES_S","ONE_YEAR_S","randomUUID","Math","random","toFixed","timelapsed","past","Date","now","createId","expiresSecond","payload","createdAt","user","anonymous","SP","sendEvent","options","agent","getClients","commerce","sp","getSalesChannelLoader","clients","loader","channels","Promise","all","DataLoader","CONCURRENT_REQUESTS_MAX","getSimulationLoader","limit","pLimit","simulationArgs","allItems","reduce","acc","flat","simulated","item","requestIndex","fill","itemsIndices","curr","__","slice","Boolean","limited","maxBatchSize","enhanceSku","product","isVariantOf","FastStoreError","constructor","extensions","message","BadRequestError","NotFoundError","isFastStoreError","isNotFoundError","isBadRequestError","getSkuLoader","skuIds","skuBySkuId","sku","itemId","skus","skuId","missingSkus","collectionPageTypes","isCollectionPageType","x","pageType","toLowerCase","getCollectionLoader","slugs","batch","getLoaders","skuLoader","simulationLoader","collectionLoader","salesChannelLoader","inStock","offer","AvailableQuantity","price","spotPrice","sellingPrice","Price","availability","available","bestOfferFirst","a","b","inStockOrderFormItem","itemAvailability","StoreAggregateOffer","highPrice","offers","availableOffers","highOffer","lowPrice","lowOffer","offerCount","priceCurrency","loaders","load","CurrencyCode","StoreAggregateRating","ratingValue","reviewCount","to","removeDiacritics","str","newStr","i","replace","RegExp","charAt","slugifySpecialCharacters","slugify","noCommas","replaced","slugified","isBrand","isCollection","slugifyRoot","root","URL","StoreCollection","seo","title","description","metaTagDescription","Title","MetaTagDescription","level","meta","split","segment","breadcrumbList","segments","collections","s","collection","itemListElement","position","numberOfItems","FACET_CROSS_SELLING_MAP","buy","view","similars","viewAndBought","accessories","suggestions","transformSelectedFacet","parseRange","range","splitted","Number","isNaN","isCrossSelling","findCrossSelling","filtered","isArray","findSlug","findSkuId","findLocale","findChannel","min","array","cmp","best","StoreFacet","__resolveType","StoreFacetBoolean","label","values","localeCompare","StoreFacetRange","searchArgs","selectedRange","globalMin","selected","absolute","max","globalMax","StoreFacetValueBoolean","quantity","Id","ChannelMarshal","parse","channelString","parsedChannel","mutateChannelContext","mutateLocaleContext","md5","crypto","createHash","update","digest","VALUE_REFERENCES","attachment","specification","attachmentToPropertyValue","content","valueReference","getPropertyId","shouldUpdateShippingData","hasSessionPostalCodeOrGeoCoordinates","updateShipping","addressChanged","hasItems","selectedAddress","checkPostalCode","checkGeoCoordinates","checkAddressType","addressType","shouldUpdateDeliveryInfo","some","slas","checkDeliveryChannel","checkDeliveryMethod","sla","availableDeliveryWindows","window","getAddressOrderForm","availableAddresses","addressMatcher","createNewAddress","addressSession","city","state","street","number","neighborhood","complement","reference","isAttachment","getId","itemOffered","identifier","additionalProperty","orderFormItemToOffer","listPrice","image","attachments","offerToOrderItemInput","groupById","get","Map","equals","storeOrder","pick","orderFormItems","storeOrderItems","acceptedOffer","isSameOrder","orderNumber","orderFormId","orderItemsAreSync","deepEquals","joinItems","form","itemsById","Object","totalPrice","priceDefinition","total","orderFormToCart","order","messages","toUpperCase","getOrderFormEtag","setOrderFormEtag","err","isOrderFormStale","faststoreData","customData","customApps","app","oldEtag","fields","cartEtag","newEtag","getOrderForm","updateOrderFormShippingData","oldAddress","hasDeliveryWindow","validateCart","cart","isStale","newOrderForm","then","browserItemsById","originItemsById","originItems","entries","browserItems","itemsToAdd","itemsToUpdate","maybeOriginItem","forEach","head","tail","totalQuantity","itemsToDelete","flatMap","changes","updatedOrderForm","validateSession","oldSession","String","regionData","sessionData","resolve","catch","profile","namespaces","store","sellers","newSession","currency","code","currencyCode","symbol","currencySymbol","countryCode","person","email","givenName","firstName","familyName","lastName","Mutation","ObjectOrString","GraphQLScalarType","parseValue","toObjectOrString","serialize","parseLiteral","ast","kind","Kind","STRING","getValueAsObjectOrString","e","isSearchItem","isOrderFormItem","StoreOffer","priceValidUntil","PriceValidUntil","itemCondition","sellerId","ListPrice","attachmentsValues","canonicalFromProduct","linkText","enhanceCommercialOffer","DEFAULT_IMAGE","imageText","imageUrl","getSlug","link","getPath","nonEmptyArray","StoreProduct","productID","productName","canonical","categories","reverse","categoryPath","images","alternateName","gtin","referenceId","Value","review","aggregateRating","commertialOffer","variations","specifications","propertyValueSpecifications","propertyValueAttachments","releaseDate","BLOCKED_SPECIFICATIONS","StoreProductGroup","hasVariant","productGroupID","skuVariants","specificationGroups","specificationGroup","StorePropertyValue","propertyID","SORT_MAP","price_desc","price_asc","orders_desc","name_desc","name_asc","release_desc","discount_desc","score_desc","pickBestSku","offersBySku","o1","o2","isValidSkuId","Query","locator","pop","startsWith","route","first","after","maybeAfter","term","crossSelling","ceil","productSearchPromise","allProducts","pageInfo","hasNextPage","pagination","hasPreviousPage","before","startCursor","endCursor","recordsFiltered","totalCount","edges","node","cursor","allCollections","brands","dfs","child","children","isActive","validCollections","shipping","redirect","StoreReview","reviewRating","bestRating","author","isRootFacet","StoreSearchResult","terms","searches","productSearchResult","maybeSku","is","isCollectionPage","filteredFacets","metadata","isTermMisspelled","correction","misspelled","logicalOperator","operator","StoreSeo","titleTemplate","units","isUnit","includes","localizedEstimates","bd","other","d","h","m","getLocalizedEstimates","estimate","amount","unit","isAmountNumber","isUnitValid","amountKey","ShippingSLA","carrier","friendlyName","shippingEstimate","findSkuVariantImage","availableImages","imageProperties","imageLabel","createSlugsMap","variants","dominantVariantName","baseSlug","slugsMap","variant","skuSpecificationProperties","dominantNameValue","variationDetails","skuVariantKey","property","shouldIgnore","getActiveSkuVariations","activeVariations","variation","getVariantsByName","skuSpecifications","field","originalName","compare","sortVariants","variantsByName","sortedVariants","variantProperty","getFormattedVariations","dominantVariantValue","previouslySeenPropertyValues","variantImageToUse","dominantVariantEntry","matchesDominantVariant","nameValueIdentifier","add","formattedVariant","src","alt","variationProperty","SkuVariants","allVariantsByName","availableVariations","activeDominantVariationValue","filteredFormattedVariations","Resolvers","getContextFactory","flags","getResolvers","typeDefs","Address","Brand","Breadcrumb","Collection","Facet","Image","PageInfo","Product","Seo","Offer","AggregateRating","Review","Author","ProductGroup","Organization","AggregateOffer","Order","Cart","Status","PropertyValue","Person","Session","Newsletter","ShippingSimulation","print","NAME","scope","sMaxAge","staleWhileRevalidate","minScope","directive","transformer","schema","mapSchema","MapperKind","OBJECT_FIELD","fieldConfig","cacheControl","getDirective","resolver","obj","AttributeName","tracingSpanSymbol","Symbol","getResolverSpanKey","path","nodes","currentPath","isInteger","prev","getFaststoreTelemetryPlugin","tracingProvider","loggerProvider","serviceName","experimentalSendLogs","useFaststoreTelemetry","tracer","getTracer","logger","getLogger","resolverContextsByRootSpans","onPluginInit","addPlugin","useOnResolve","context","getActiveSpanProcessor","rootContextSpanId","spanContext","spanId","fieldName","returnType","parentType","previousResolverSpanKey","openTelTrace","setSpan","openTelContext","active","resolverIndexInList","resolverSpan","startSpan","attributes","RESOLVER_FIELD_NAME","RESOLVER_TYPE_NAME","RESOLVER_RESULT_TYPE","resolverCtx","result","setAttributes","RESOLVER_EXECUTION_ERROR","recordException","end","onExecute","extendContext","operationType","document","definitions","def","OPERATION_DEFINITION","operation","spanName","operationName","executionSpan","SpanKind","SERVER","EXECUTION_OPERATION_NAME","EXECUTION_OPERATION_TYPE","EXECUTION_OPERATION_DOCUMENT","executeContext","resultCbs","onExecuteDone","isAsyncIterable","warn","logRecord","EXECUTION_VARIABLES","variableValues","errors","severityNumber","SeverityNumber","INFO","severityText","EXECUTION_RESULT","ERROR","EXECUTION_ERROR","emit","FASTSTORE_API_VERSION","TRACE_COLLECTOR_URL","TRACE_COLLECTOR_URL_DEV","LOG_COLLECTOR_URL","getTelemetry","APIOptions","telemetryOptions","honeycombCollectorOptions","mode","openSearchCollectorOptions","tracerProvider","BasicTracerProvider","resource","Resource","platform","LoggerProvider","honeycombExporter","OTLPTraceExporter","openSearchExporter","OTLPLogsExporter","honeyCombSpanProcessor","SimpleSpanProcessor","openSearchLogProcessor","SimpleLogRecordProcessor","addSpanProcessor","addLogRecordProcessor","consoleExporter","ConsoleSpanExporter","verboseTraceProcessor","consoleLogExporter","ConsoleLogRecordExporter","veboseLogRecordExporter","platforms","vtex","getResolversVTEX","getContextFactoryVTEX","directives","cacheControlDirective","getTypeDefs","getSchema","makeExecutableSchema","resolvers"],"mappings":"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"}
1
+ {"version":3,"file":"api.esm.js","sources":["../src/platforms/vtex/clients/fetch.ts","../src/platforms/vtex/clients/commerce/index.ts","../src/platforms/vtex/clients/search/index.ts","../src/platforms/vtex/clients/sp/index.ts","../src/platforms/vtex/clients/index.ts","../src/platforms/vtex/loaders/salesChannel.ts","../src/platforms/vtex/loaders/simulation.ts","../src/platforms/vtex/utils/sanitizeHtml.ts","../src/platforms/vtex/utils/enhanceSku.ts","../src/platforms/errors.ts","../src/platforms/vtex/loaders/sku.ts","../src/platforms/vtex/loaders/collection.ts","../src/platforms/vtex/loaders/index.ts","../src/platforms/vtex/utils/productStock.ts","../src/platforms/vtex/resolvers/aggregateOffer.ts","../src/platforms/vtex/resolvers/aggregateRating.ts","../src/platforms/vtex/utils/slugify.ts","../src/platforms/vtex/resolvers/collection.ts","../src/platforms/vtex/utils/facets.ts","../src/platforms/vtex/utils/orderStatistics.ts","../src/platforms/vtex/resolvers/facet.ts","../src/platforms/vtex/resolvers/faceValue.ts","../src/platforms/vtex/resolvers/subscribeToNewsletter.ts","../src/platforms/vtex/utils/channel.ts","../src/platforms/vtex/utils/contex.ts","../src/platforms/vtex/utils/md5.ts","../src/platforms/vtex/utils/propertyValue.ts","../src/platforms/vtex/utils/shouldUpdateShippingData.ts","../src/platforms/vtex/utils/getAddressOrderForm.ts","../src/platforms/vtex/utils/createNewAddress.ts","../src/platforms/vtex/resolvers/validateCart.ts","../src/platforms/vtex/resolvers/validateSession.ts","../src/platforms/vtex/resolvers/mutation.ts","../src/platforms/vtex/resolvers/objectOrString.ts","../src/platforms/vtex/resolvers/offer.ts","../src/platforms/vtex/utils/canonical.ts","../src/platforms/vtex/utils/enhanceCommercialOffer.ts","../src/platforms/vtex/resolvers/product.ts","../src/platforms/vtex/resolvers/productGroup.ts","../src/platforms/vtex/resolvers/propertyValue.ts","../src/platforms/vtex/utils/sort.ts","../src/platforms/vtex/utils/sku.ts","../src/platforms/vtex/resolvers/query.ts","../src/platforms/vtex/resolvers/review.ts","../src/platforms/vtex/resolvers/searchResult.ts","../src/platforms/vtex/resolvers/seo.ts","../src/platforms/vtex/resolvers/shippingSLA.ts","../src/platforms/vtex/utils/skuVariants.ts","../src/platforms/vtex/resolvers/skuVariations.ts","../src/platforms/vtex/index.ts","../src/typeDefs/index.ts","../src/directives/cacheControl.ts","../src/telemetry/useFaststoreTelemetry.ts","../src/telemetry/index.ts","../src/index.ts"],"sourcesContent":["import fetch from 'isomorphic-unfetch'\nimport packageJson from '../../../../package.json'\n\nconst USER_AGENT = `${packageJson.name}@${packageJson.version}`\n\nexport const fetchAPI = async (info: RequestInfo, init?: RequestInit) => {\n const response = await fetch(info, {\n ...init,\n headers: {\n ...init?.headers,\n 'User-Agent': USER_AGENT,\n },\n })\n\n if (response.ok) {\n return response.status !== 204 ? response.json() : undefined\n }\n\n console.error(info, init, response)\n const text = await response.text()\n\n throw new Error(text)\n}\n","import { FACET_CROSS_SELLING_MAP } from '../../utils/facets'\nimport { fetchAPI } from '../fetch'\n\nimport type { PortalProduct } from './types/Product'\nimport type { Context, Options } from '../../index'\nimport type { Brand } from './types/Brand'\nimport type { CategoryTree } from './types/CategoryTree'\nimport type { OrderForm, OrderFormInputItem } from './types/OrderForm'\nimport type { PortalPagetype } from './types/Portal'\nimport type { Region, RegionInput } from './types/Region'\nimport type {\n Simulation,\n SimulationArgs,\n SimulationOptions,\n} from './types/Simulation'\nimport type { Session } from './types/Session'\nimport type { Channel } from '../../utils/channel'\nimport type { SalesChannel } from './types/SalesChannel'\nimport { MasterDataResponse } from './types/Newsletter'\nimport type { Address, AddressInput } from './types/Address'\nimport { DeliveryMode, SelectedAddress } from './types/ShippingData'\n\ntype ValueOf<T> = T extends Record<string, infer K> ? K : never\n\nconst BASE_INIT = {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n}\n\nexport const VtexCommerce = (\n { account, environment, incrementAddress }: Options,\n ctx: Context\n) => {\n const base = `https://${account}.${environment}.com.br`\n\n return {\n catalog: {\n salesChannel: (sc: string): Promise<SalesChannel> =>\n fetchAPI(`${base}/api/catalog_system/pub/saleschannel/${sc}`),\n brand: {\n list: (): Promise<Brand[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/brand/list`),\n },\n category: {\n tree: (depth = 3): Promise<CategoryTree[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/category/tree/${depth}`),\n },\n portal: {\n pagetype: (slug: string): Promise<PortalPagetype> =>\n fetchAPI(`${base}/api/catalog_system/pub/portal/pagetype/${slug}`),\n },\n products: {\n crossselling: ({\n type,\n productId,\n groupByProduct = true,\n }: {\n type: ValueOf<typeof FACET_CROSS_SELLING_MAP>\n productId: string\n groupByProduct?: boolean\n }): Promise<PortalProduct[]> => {\n const params = new URLSearchParams({\n sc: ctx.storage.channel.salesChannel,\n groupByProduct: groupByProduct.toString(),\n })\n\n return fetchAPI(\n `${base}/api/catalog_system/pub/products/crossselling/${type}/${productId}?${params}`\n )\n },\n },\n },\n checkout: {\n simulation: (\n args: SimulationArgs,\n { salesChannel }: SimulationOptions = ctx.storage.channel\n ): Promise<Simulation> => {\n const params = new URLSearchParams({\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForms/simulation?${params.toString()}`,\n {\n ...BASE_INIT,\n body: JSON.stringify(args),\n }\n )\n },\n\n shippingData: (\n {\n id,\n index,\n deliveryMode,\n selectedAddresses,\n }: {\n id: string\n index: number\n deliveryMode?: DeliveryMode | null\n selectedAddresses: SelectedAddress[]\n },\n setDeliveryWindow?: boolean\n ): Promise<OrderForm> => {\n const deliveryWindow = setDeliveryWindow\n ? {\n startDateUtc: deliveryMode?.deliveryWindow?.startDate,\n endDateUtc: deliveryMode?.deliveryWindow?.endDate,\n }\n : null\n\n const mappedBody = {\n logisticsInfo: Array.from({ length: index }, (_, itemIndex) => ({\n itemIndex,\n selectedDeliveryChannel: deliveryMode?.deliveryChannel || null,\n selectedSla: deliveryMode?.deliveryMethod || null,\n deliveryWindow: deliveryWindow,\n })),\n selectedAddresses: selectedAddresses,\n clearAddressIfPostalCodeNotFound: incrementAddress,\n }\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/attachments/shippingData`,\n {\n ...BASE_INIT,\n body: JSON.stringify(mappedBody),\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n }\n )\n },\n\n orderForm: ({\n id,\n refreshOutdatedData = true,\n channel = ctx.storage.channel,\n }: {\n id: string\n refreshOutdatedData?: boolean\n channel?: Required<Channel>\n }): Promise<OrderForm> => {\n const { salesChannel } = channel\n const params = new URLSearchParams({\n refreshOutdatedData: refreshOutdatedData.toString(),\n sc: salesChannel,\n })\n const requestInit: RequestInit = ctx.headers\n ? {\n ...BASE_INIT,\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n }\n : BASE_INIT\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}?${params.toString()}`,\n requestInit\n )\n },\n updateOrderFormItems: ({\n id,\n orderItems,\n allowOutdatedData = 'paymentData',\n salesChannel = ctx.storage.channel.salesChannel,\n shouldSplitItem = true,\n }: {\n id: string\n orderItems: OrderFormInputItem[]\n allowOutdatedData?: 'paymentData'\n salesChannel?: string\n shouldSplitItem?: boolean | null\n }): Promise<OrderForm> => {\n const params = new URLSearchParams({\n allowOutdatedData,\n sc: salesChannel,\n })\n\n const items = JSON.stringify({\n orderItems,\n noSplitItem: !shouldSplitItem,\n })\n\n const requestInit: RequestInit = ctx.headers\n ? {\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n body: items,\n method: 'PATCH',\n }\n : {\n headers: {\n 'content-type': 'application/json',\n },\n body: items,\n method: 'PATCH',\n }\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/items?${params}`,\n requestInit\n )\n },\n setCustomData: ({\n id,\n appId,\n key,\n value,\n }: {\n id: string\n appId: string\n key: string\n value: string\n }): Promise<OrderForm> => {\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/customData/${appId}/${key}`,\n {\n ...BASE_INIT,\n body: JSON.stringify({ value }),\n method: 'PUT',\n }\n )\n },\n region: async ({\n postalCode,\n geoCoordinates,\n country,\n salesChannel,\n }: RegionInput): Promise<Region[]> => {\n const params = new URLSearchParams({\n country: country,\n sc: salesChannel ?? '',\n })\n\n postalCode\n ? params.append('postalCode', postalCode)\n : params.append(\n 'geoCoordinates',\n `${geoCoordinates?.longitude};${geoCoordinates?.latitude}`\n )\n\n const url = `${base}/api/checkout/pub/regions/?${params.toString()}`\n return fetchAPI(url)\n },\n address: async ({\n postalCode,\n country,\n }: AddressInput): Promise<Address> => {\n return fetchAPI(\n `${base}/api/checkout/pub/postal-code/${country}/${postalCode}`\n )\n },\n },\n session: (search: string): Promise<Session> => {\n const params = new URLSearchParams(search)\n\n params.set(\n 'items',\n 'profile.id,profile.email,profile.firstName,profile.lastName,store.channel,store.countryCode,store.cultureInfo,store.currencyCode,store.currencySymbol'\n )\n return fetchAPI(`${base}/api/sessions?${params.toString()}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n cookie: ctx.headers.cookie,\n },\n body: '{}',\n })\n },\n subscribeToNewsletter: (data: {\n name: string\n email: string\n }): Promise<MasterDataResponse> => {\n return fetchAPI(`${base}/api/dataentities/NL/documents/`, {\n ...BASE_INIT,\n body: JSON.stringify({ ...data, isNewsletterOptIn: true }),\n method: 'PATCH',\n })\n },\n }\n}\n","import { fetchAPI } from '../fetch'\nimport type { IStoreSelectedFacet } from '../../../../__generated__/schema'\nimport type { Context, Options } from '../../'\nimport type { SelectedFacet } from '../../utils/facets'\nimport type {\n Facet,\n FacetValueBoolean,\n FacetSearchResult,\n} from './types/FacetSearchResult'\nimport type {\n ProductSearchResult,\n Suggestion,\n} from './types/ProductSearchResult'\n\nexport type Sort =\n | 'price:desc'\n | 'price:asc'\n | 'orders:desc'\n | 'name:desc'\n | 'name:asc'\n | 'release:desc'\n | 'discount:desc'\n | ''\n\nexport interface SearchArgs {\n query?: string\n page: number\n count: number\n type: 'product_search' | 'facets'\n sort?: Sort\n selectedFacets?: SelectedFacet[]\n fuzzy?: '0' | '1' | 'auto'\n hideUnavailableItems?: boolean\n}\n\nexport interface ProductLocator {\n field: 'id' | 'slug'\n value: string\n}\n\nconst POLICY_KEY = 'trade-policy'\nconst REGION_KEY = 'region-id'\nconst CHANNEL_KEYS = new Set([POLICY_KEY, REGION_KEY])\n\nexport const isFacetBoolean = (\n facet: Facet\n): facet is Facet<FacetValueBoolean> => facet.type === 'TEXT'\n\nexport const IntelligentSearch = (\n { account, environment, hideUnavailableItems }: Options,\n ctx: Context\n) => {\n const base = `https://${account}.${environment}.com.br/api/io`\n\n const getPolicyFacet = (): IStoreSelectedFacet | null => {\n const { salesChannel } = ctx.storage.channel\n\n if (!salesChannel) {\n return null\n }\n\n return {\n key: POLICY_KEY,\n value: salesChannel,\n }\n }\n\n const getRegionFacet = (): IStoreSelectedFacet | null => {\n const { regionId, seller } = ctx.storage.channel\n const sellerRegionId = seller\n ? Buffer.from(`SW#${seller}`).toString('base64')\n : null\n const facet = sellerRegionId ?? regionId\n\n if (!facet) {\n return null\n }\n\n return {\n key: REGION_KEY,\n value: facet,\n }\n }\n\n const addDefaultFacets = (facets: SelectedFacet[]) => {\n const withDefaultFacets = facets.filter(({ key }) => !CHANNEL_KEYS.has(key))\n\n const policyFacet =\n facets.find(({ key }) => key === POLICY_KEY) ?? getPolicyFacet()\n\n const regionFacet =\n facets.find(({ key }) => key === REGION_KEY) ?? getRegionFacet()\n\n if (policyFacet !== null) {\n withDefaultFacets.push(policyFacet)\n }\n\n if (regionFacet !== null) {\n withDefaultFacets.push(regionFacet)\n }\n\n return withDefaultFacets\n }\n\n const search = <T>({\n query = '',\n page,\n count,\n sort = '',\n selectedFacets = [],\n type,\n fuzzy = 'auto',\n }: SearchArgs): Promise<T> => {\n const params = new URLSearchParams({\n page: (page + 1).toString(),\n count: count.toString(),\n query,\n sort,\n fuzzy,\n locale: ctx.storage.locale,\n })\n\n if (hideUnavailableItems !== undefined) {\n params.append('hideUnavailableItems', hideUnavailableItems.toString())\n }\n\n const pathname = addDefaultFacets(selectedFacets)\n .map(({ key, value }) => `${key}/${value}`)\n .join('/')\n\n return fetchAPI(\n `${base}/_v/api/intelligent-search/${type}/${pathname}?${params.toString()}`\n )\n }\n\n const products = (args: Omit<SearchArgs, 'type'>) =>\n search<ProductSearchResult>({ ...args, type: 'product_search' })\n\n const suggestedTerms = (\n args: Omit<SearchArgs, 'type'>\n ): Promise<Suggestion> => {\n const params = new URLSearchParams({\n query: args.query?.toString() ?? '',\n locale: ctx.storage.locale,\n })\n\n return fetchAPI(\n `${base}/_v/api/intelligent-search/search_suggestions?${params.toString()}`\n )\n }\n\n const topSearches = (): Promise<Suggestion> => {\n const params = new URLSearchParams({\n locale: ctx.storage.locale,\n })\n\n return fetchAPI(\n `${base}/_v/api/intelligent-search/top_searches?${params.toString()}`\n )\n }\n\n const facets = (args: Omit<SearchArgs, 'type'>) =>\n search<FacetSearchResult>({ ...args, type: 'facets' })\n\n return {\n facets,\n products,\n suggestedTerms,\n topSearches,\n }\n}\n","/**\n * Client for SP, Intelligent search's analytics event API\n * More info at: https://www.notion.so/vtexhandbook/Event-API-Documentation-48eee26730cf4d7f80f8fd7262231f84\n */\nimport { fetchAPI } from '../fetch'\nimport type { Options, Context } from '../../'\n\nconst THIRTY_MINUTES_S = 30 * 60\nconst ONE_YEAR_S = 365 * 24 * 3600\n\nconst randomUUID = () => (Math.random() * 1e6).toFixed(0)\n\nconst timelapsed = (past: number) => (Date.now() - past) / 1e3\n\nconst createId = (expiresSecond: number) => {\n let payload = randomUUID()\n let createdAt = Date.now()\n\n return () => {\n if (timelapsed(createdAt) > expiresSecond) {\n payload = randomUUID()\n createdAt = Date.now()\n }\n\n return payload\n }\n}\n\nconst user = {\n anonymous: createId(ONE_YEAR_S),\n session: createId(THIRTY_MINUTES_S),\n}\n\nexport type SearchEvent = {\n type: 'search.query'\n text: string // 'zapatilha'\n misspelled: boolean\n match: number\n operator: 'and' | 'or'\n locale: string\n session?: string\n anonymous?: string\n}\n\nexport const SP = ({ account }: Options, _: Context) => {\n const base = `https://sp.vtex.com/event-api/v1/${account}/event`\n\n const sendEvent = (options: SearchEvent) => {\n return fetchAPI(base, {\n method: 'POST',\n body: JSON.stringify({\n ...options,\n agent: '@faststore/api',\n anonymous: user.anonymous(), // 'zZlNhqz1vFJP6iPG5Oqtt'\n session: user.session(), // 'Om1TNluGvgmSgU5OOTvkkd'\n }),\n headers: {\n 'content-type': 'application/json',\n },\n })\n }\n\n return {\n sendEvent,\n }\n}\n","import { VtexCommerce } from './commerce'\nimport { IntelligentSearch } from './search'\nimport { SP } from './sp'\nimport type { Context, Options } from '..'\n\nexport type Clients = ReturnType<typeof getClients>\n\nexport const getClients = (options: Options, ctx: Context) => {\n const search = IntelligentSearch(options, ctx)\n const commerce = VtexCommerce(options, ctx)\n const sp = SP(options, ctx)\n\n return {\n search,\n commerce,\n sp,\n }\n}\n","import DataLoader from \"dataloader\";\n\nimport { Options } from \"..\";\nimport { Clients } from \"../clients\";\n\nimport type { SalesChannel } from \"./../clients/commerce/types/SalesChannel\";\n\nexport const getSalesChannelLoader = (_: Options, clients: Clients) => {\n const loader = async (channels: readonly string[]) =>\n Promise.all(\n channels.map((sc) => clients.commerce.catalog.salesChannel(sc)),\n );\n\n return new DataLoader<string, SalesChannel>(loader);\n};\n","import DataLoader from 'dataloader'\nimport pLimit from 'p-limit'\n\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\nimport type {\n ShippingItem,\n Simulation,\n SimulationArgs,\n} from '../clients/commerce/types/Simulation'\n\n// Limits concurrent requests to the API per request cycle\nconst CONCURRENT_REQUESTS_MAX = 1\n\nexport const getSimulationLoader = (_: Options, clients: Clients) => {\n const limit = pLimit(CONCURRENT_REQUESTS_MAX)\n\n const loader = async (simulationArgs: readonly SimulationArgs[]) => {\n const allItems = simulationArgs.reduce((acc, { items }: SimulationArgs) => {\n return [...acc, items]\n }, [] as ShippingItem[][])\n\n const items = [...allItems.flat()]\n const simulation = await clients.commerce.checkout.simulation({\n country: simulationArgs[0].country,\n postalCode: simulationArgs[0].postalCode,\n items,\n })\n\n // Sort and filter simulation since Checkout API may return\n // items that we didn't ask for\n const simulated = simulation.items.reduce((acc, item) => {\n const index = item.requestIndex\n\n if (typeof index === 'number' && index < acc.length) {\n acc[index] = item\n }\n\n return acc\n }, Array(items.length).fill(null) as Simulation['items'])\n\n const itemsIndices = allItems.reduce(\n (acc, curr) => [...acc, curr.length + acc[acc.length - 1]],\n [0]\n )\n\n return allItems.map((__, index) => ({\n ...simulation,\n items: simulated\n .slice(itemsIndices[index], itemsIndices[index + 1])\n .filter((item) => Boolean(item)),\n }))\n }\n\n const limited = async (allItems: readonly SimulationArgs[]) =>\n limit(loader, allItems)\n\n return new DataLoader<SimulationArgs, Simulation>(limited, {\n maxBatchSize: 50,\n })\n}\n","import sanitizeHtmlLib from 'sanitize-html'\n\n/**\n * For now, we're using sanitize-html's default set\n * of allowed tags and attributes, which don't even include img elements\n *\n * It is known many client depends on pontentially vulnerable tags, such as script tags\n * We chose to be restrictive at first, and document those restrictions later.\n *\n * When expanding the set of allowed tags and attributes, please consider performance, privacy and security.\n *\n * This possibily breaks compatibility with Portal and Store Framework,\n * which both allows an enormous amount of tags and attributes\n *\n * This was a thoughtful decision that can be reviewed in the future given\n * research was made to back up those changes.\n */\nexport const sanitizeHtml = (\n dirty: Parameters<typeof sanitizeHtmlLib>[0],\n options?: Parameters<typeof sanitizeHtmlLib>[1]\n) => sanitizeHtmlLib(dirty, options)\n","import type { Product, Item } from '../clients/search/types/ProductSearchResult'\nimport { sanitizeHtml } from './sanitizeHtml'\n\nexport type EnhancedSku = Item & { isVariantOf: Product }\n\nfunction sanitizeProduct(product: Product): Product {\n return {\n ...product,\n description: product.description\n ? sanitizeHtml(product.description)\n : product.description,\n }\n}\n\nexport const enhanceSku = (item: Item, product: Product): EnhancedSku => ({\n ...item,\n isVariantOf: sanitizeProduct(product),\n})\n","type ErrorType = 'BadRequestError' | 'NotFoundError' | 'RedirectError'\n\ninterface Extension {\n type: ErrorType\n status: number\n}\n\nclass FastStoreError<T extends Extension = Extension> extends Error {\n constructor(public extensions: T, message?: string) {\n super(message)\n this.name = 'FastStoreError'\n }\n}\n\nexport class BadRequestError extends FastStoreError {\n constructor(message?: string) {\n super({ status: 400, type: 'BadRequestError' }, message)\n }\n}\n\nexport class NotFoundError extends FastStoreError {\n constructor(message?: string) {\n super({ status: 404, type: 'NotFoundError' }, message)\n }\n}\n\nexport const isFastStoreError = (error: any): error is FastStoreError =>\n error?.name === 'FastStoreError'\n\nexport const isNotFoundError = (error: any): error is NotFoundError =>\n error?.extensions?.type === 'NotFoundError'\n\nexport const isBadRequestError = (error: any): error is BadRequestError =>\n error?.extensions?.type === 'BadRequestError'\n","import DataLoader from 'dataloader'\n\nimport { enhanceSku } from '../utils/enhanceSku'\nimport { NotFoundError } from '../../errors'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\nexport const getSkuLoader = (_: Options, clients: Clients) => {\n const loader = async (skuIds: readonly string[]) => {\n const { products } = await clients.search.products({\n query: `sku:${skuIds.join(';')}`,\n page: 0,\n count: skuIds.length,\n })\n\n const skuBySkuId = products.reduce((acc, product) => {\n for (const sku of product.items) {\n acc[sku.itemId] = enhanceSku(sku, product)\n }\n\n return acc\n }, {} as Record<string, EnhancedSku>)\n\n const skus = skuIds.map((skuId) => skuBySkuId[skuId])\n const missingSkus = skuIds.filter((skuId) => !skuBySkuId[skuId])\n\n if (missingSkus.length > 0) {\n throw new NotFoundError(\n `Search API did not found the following skus: ${missingSkus.join(',')}`\n )\n }\n\n return skus\n }\n\n return new DataLoader<string, EnhancedSku>(loader, {\n maxBatchSize: 99, // Max allowed batch size of Search API\n })\n}\n","import DataLoader from 'dataloader'\nimport pLimit from 'p-limit'\n\nimport { NotFoundError } from '../../errors'\nimport type { CollectionPageType } from '../clients/commerce/types/Portal'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\n// Limits concurrent requests to 20 so that they don't timeout\nconst CONCURRENT_REQUESTS_MAX = 20\n\nconst collectionPageTypes = new Set([\n 'brand',\n 'category',\n 'department',\n 'subcategory',\n 'collection',\n 'cluster',\n] as const)\n\nexport const isCollectionPageType = (x: any): x is CollectionPageType =>\n typeof x.pageType === 'string' &&\n collectionPageTypes.has(x.pageType.toLowerCase())\n\nexport const getCollectionLoader = (_: Options, clients: Clients) => {\n const limit = pLimit(CONCURRENT_REQUESTS_MAX)\n\n const loader = async (\n slugs: readonly string[]\n ): Promise<CollectionPageType[]> => {\n return Promise.all(\n slugs.map((slug: string) =>\n limit(async () => {\n const page = await clients.commerce.catalog.portal.pagetype(slug)\n\n if (isCollectionPageType(page)) {\n return page\n }\n\n throw new NotFoundError(\n `Catalog returned ${page.pageType} for slug: ${slug}. This usually happens when there is more than one category with the same name in the same category tree level.`\n )\n })\n )\n )\n }\n\n return new DataLoader<string, CollectionPageType>(loader, {\n // DataLoader is being used to cache requests, not to batch them\n batch: false,\n })\n}\n","import { getSalesChannelLoader } from './salesChannel';\nimport { getSimulationLoader } from './simulation'\nimport { getSkuLoader } from './sku'\nimport { getCollectionLoader } from './collection'\nimport type { Context, Options } from '..'\n\nexport type Loaders = ReturnType<typeof getLoaders>\n\nexport const getLoaders = (options: Options, { clients }: Context) => {\n const skuLoader = getSkuLoader(options, clients)\n const simulationLoader = getSimulationLoader(options, clients)\n const collectionLoader = getCollectionLoader(options, clients)\n const salesChannelLoader = getSalesChannelLoader(options, clients)\n\n return {\n skuLoader,\n simulationLoader,\n collectionLoader,\n salesChannelLoader\n }\n}\n","import type { CommertialOffer } from '../clients/search/types/ProductSearchResult'\n\nexport const inStock = (offer: Pick<CommertialOffer, 'AvailableQuantity'>) =>\n offer.AvailableQuantity > 0\n\nexport const price = (offer: Pick<CommertialOffer, 'spotPrice'>) =>\n offer.spotPrice ?? 0\nexport const sellingPrice = (offer: CommertialOffer) => offer.Price ?? 0\n\nexport const availability = (available: boolean) =>\n available ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock'\n\n// Smallest Available Spot Price First\nexport const bestOfferFirst = (\n a: Pick<CommertialOffer, 'AvailableQuantity' | 'spotPrice'>,\n b: Pick<CommertialOffer, 'AvailableQuantity' | 'spotPrice'>\n) => {\n if (inStock(a) && !inStock(b)) {\n return -1\n }\n\n if (!inStock(a) && inStock(b)) {\n return 1\n }\n\n return price(a) - price(b)\n}\n\nexport const inStockOrderFormItem = (itemAvailability: string) =>\n itemAvailability === 'available'\n","import { inStock, price } from '../utils/productStock'\nimport type { StoreProduct } from './product'\nimport type { PromiseType } from '../../../typings'\nimport type { Resolver } from '..'\n\nexport type Root = PromiseType<ReturnType<typeof StoreProduct.offers>>\n\nexport const StoreAggregateOffer: Record<string, Resolver<Root>> & {\n offers: Resolver<Root, any, Root>\n} = {\n highPrice: (offers) => {\n const availableOffers = offers.filter(inStock)\n const highOffer = availableOffers[availableOffers.length - 1]\n\n return highOffer != null ? price(highOffer) : 0\n },\n lowPrice: (offers) => {\n const [lowOffer] = offers.filter(inStock)\n\n return lowOffer ? price(lowOffer) : 0\n },\n offerCount: (offers) => offers.length,\n priceCurrency: async (_, __, ctx) => {\n const { \n loaders: { salesChannelLoader }, \n storage: { channel } \n } = ctx\n\n const sc = await salesChannelLoader.load(channel.salesChannel);\n \n return sc.CurrencyCode ?? '';\n },\n offers: (offers) => offers,\n}\n","import type { Resolver } from '..'\n\n// TODO: Add a review system integration\nexport const StoreAggregateRating: Record<string, Resolver> = {\n ratingValue: () => 5,\n reviewCount: () => 0,\n}\n","/**\n * VTEX catalog slugify function\n *\n * Copied from:\n * https://github.com/vtex/rewriter/blob/1ce2010783e0586cab42534ce2fb7a983d8a3a84/node/clients/catalog.ts#L72\n *\n * Sometimes, we need to slugify strings for creating urls. An example is the\n * brand urls, where we create them from the brand's name.\n * This slugify function should match exactly what VTEX catalog generates. Any mismatch\n * will lead to broken links.\n * Hopefully, we had this function implemented on VTEX IO and we've been using it for\n * years now. However, looking at the code, I think we can save lots of computing. I'm\n * in a hurry for doing these tests now, so I'll leave a small TODO.\n *\n * TODO: Research for better ways of computing this slugify function. Things I'd try are:\n * - Join those 3 regexs for special characters into a single one.\n * - Replace the regexp of `removeDiacritics` function with a Map. We can make the complexity\n * of this function be O(n) with n=string.length\n *\n */\nconst from =\n 'ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆÍÌÎÏŇÑÓÖÒÔÕØŘŔŠŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇíìîïňñóöòôõøðřŕšťúůüùûýÿžþÞĐđ߯a'\n\nconst to =\n 'AAAAAACCCDEEEEEEEEIIIINNOOOOOORRSTUUUUUYYZaaaaaacccdeeeeeeeeiiiinnooooooorrstuuuuuyyzbBDdBAa'\n\nconst removeDiacritics = (str: string) => {\n let newStr = str.slice(0)\n\n for (let i = 0; i < from.length; i++) {\n newStr = newStr.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i))\n }\n\n return newStr\n}\n\nconst slugifySpecialCharacters = (str: string) => {\n return str.replace(/[·/_,:]/, '-')\n}\n\nexport function slugify(str: string) {\n const noCommas = str.replace(/,/g, '')\n const replaced = noCommas.replace(/[*+~.()'\"!:@&\\[\\]`/ %$#?{}|><=_^]/g, '-')\n const slugified = slugifySpecialCharacters(removeDiacritics(replaced))\n\n return slugified.toLowerCase()\n}\n","import { isCollectionPageType } from '../loaders/collection'\nimport { slugify } from '../utils/slugify'\nimport type { Resolver } from '..'\nimport type { Brand } from '../clients/commerce/types/Brand'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { CollectionPageType } from '../clients/commerce/types/Portal'\n\nexport type Root = Brand | (CategoryTree & { level: number }) | CollectionPageType\n\nconst isBrand = (x: any): x is Brand | CollectionPageType =>\n x.type === 'brand' ||\n (isCollectionPageType(x) && x.pageType.toLowerCase() === 'brand')\n\nconst isCollection = (x: Root): x is CollectionPageType =>\n isCollectionPageType(x) && x.pageType.toLowerCase() === 'collection'\n\nconst slugifyRoot = (root: Root) => {\n if (isBrand(root) || isCollection(root)) {\n return slugify(root.name)\n }\n\n if (isCollectionPageType(root)) {\n return new URL(`https://${root.url}`).pathname.slice(1).toLowerCase()\n }\n\n return new URL(root.url).pathname.slice(1).toLowerCase()\n}\n\nexport const StoreCollection: Record<string, Resolver<Root>> = {\n id: ({ id }) => id.toString(),\n slug: (root) => slugifyRoot(root),\n seo: (root) =>\n isBrand(root) || isCollectionPageType(root)\n ? {\n title: root.title,\n description: root.metaTagDescription,\n }\n : {\n title: root.Title,\n description: root.MetaTagDescription,\n },\n type: (root) =>\n isBrand(root)\n ? 'Brand'\n : isCollectionPageType(root)\n ? root.pageType\n : root.level === 0\n ? 'Department'\n : 'Category',\n meta: (root) => {\n const slug = slugifyRoot(root)\n\n return isBrand(root)\n ? {\n selectedFacets: [{ key: 'brand', value: slug }],\n }\n : isCollection(root)\n ? {\n selectedFacets: [{ key: 'productclusterids', value: root.id }],\n }\n : {\n selectedFacets: slug.split('/').map((segment, index) => ({\n key: `category-${index + 1}`,\n value: segment,\n })),\n }\n },\n breadcrumbList: async (root, _, ctx) => {\n const {\n loaders: { collectionLoader },\n } = ctx\n\n const slug = slugifyRoot(root)\n\n /**\n * Split slug into segments so we fetch all data for\n * the breadcrumb. For instance, if we get `/foo/bar`\n * we need all metadata for both `/foo` and `/bar` and\n * thus we need to fetch pageType for `/foo` and `/bar`\n */\n const segments = slug.split('/').filter((segment) => Boolean(segment))\n const slugs = segments.map((__, index) =>\n segments.slice(0, index + 1).join('/')\n )\n\n const collections: (CollectionPageType & {\n slug: string\n })[] = await Promise.all(\n slugs.map(async (s) => {\n const collection = await collectionLoader.load(s)\n return { slug: s, ...collection }\n })\n )\n\n return {\n itemListElement: collections.map((collection, index) => ({\n item: isCollection(collection)\n ? `/${collection.slug}`\n : new URL(\n `https://${(collection as CollectionPageType).url}`\n ).pathname.toLowerCase(),\n name: collection.name,\n position: index + 1,\n })),\n numberOfItems: collections.length,\n }\n },\n}\n","import type { Maybe } from '../../../__generated__/schema'\nimport { BadRequestError } from '../../errors'\n\nexport interface SelectedFacet {\n key: string\n value: string\n}\n\nexport interface CrossSellingFacet {\n key: keyof typeof FACET_CROSS_SELLING_MAP\n value: string\n}\n\nexport const FACET_CROSS_SELLING_MAP = {\n buy: \"whoboughtalsobought\",\n view: \"whosawalsosaw\",\n similars: \"similars\",\n viewAndBought: \"whosawalsobought\",\n accessories: \"accessories\",\n suggestions: \"suggestions\",\n} as const\n\n/**\n * Transform facets from the store to VTEX platform facets.\n * For instance, the channel in Store becomes trade-policy and regionId in VTEX's realm\n * */\nexport const transformSelectedFacet = ({ key, value }: SelectedFacet) => {\n switch (key) {\n case 'price': {\n return { key, value: value.replace('-to-', ':') }\n }\n \n case 'channel': \n case 'locale': \n case \"buy\":\n case \"view\":\n case \"similars\":\n case \"viewAndBought\":\n case \"accessories\":\n case \"suggestions\": {\n return [] // remove this facet from search\n }\n\n default:\n return { key, value }\n }\n}\n\nexport const parseRange = (range: string): [number, number] | null => {\n const splitted = range.split(':').map(Number)\n\n if (\n splitted.length !== 2 ||\n Number.isNaN(splitted[0]) ||\n Number.isNaN(splitted[1])\n ) {\n return null\n }\n\n return splitted as [number, number]\n}\n\nexport const isCrossSelling = (\n x: string,\n): x is CrossSellingFacet['key'] =>\n typeof (FACET_CROSS_SELLING_MAP as Record<string, string>)[x] === \"string\"\n\nexport const findCrossSelling = (facets?: Maybe<SelectedFacet[]>) => {\n const filtered = facets?.filter((x): x is CrossSellingFacet => isCrossSelling(x.key))\n\n if (Array.isArray(filtered) && filtered.length > 1) {\n throw new BadRequestError(\n `You passed ${filtered.length} cross selling facets but only one is allowed. Please leave one of the following facet: ${filtered.map(x => x.key).join(',')}`\n )\n }\n\n return filtered?.[0] ?? null\n}\n\nexport const findSlug = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((x) => x.key === 'slug')?.value ?? null\n\nexport const findSkuId = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((x) => x.key === 'id')?.value ?? null\n\nexport const findLocale = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((x) => x.key === 'locale')?.value ?? null\n\nexport const findChannel = (facets?: Maybe<SelectedFacet[]>) =>\n facets?.find((facet) => facet.key === 'channel')?.value ?? null\n","/**\n * More info at: https://en.wikipedia.org/wiki/Order_statistic\n */\n\n// O(n) search to find the max of an array\nexport const min = <T>(array: T[], cmp: (a: T, b: T) => number) => {\n let best = 0\n\n for (let curr = 1; curr < array.length; curr++) {\n if (cmp(array[best], array[curr]) > 0) {\n best = curr\n }\n }\n\n return array[best]\n}\n","import { parseRange } from '../utils/facets'\nimport { min } from '../utils/orderStatistics'\nimport type {\n FacetValueBoolean,\n Facet,\n FacetValueRange,\n} from '../clients/search/types/FacetSearchResult'\nimport type { Resolver } from '..'\n\nexport type Root = Facet\n\nexport const StoreFacet: Record<string, Resolver<Root>> = {\n __resolveType: ({ type }) =>\n type === 'TEXT' ? 'StoreFacetBoolean' : 'StoreFacetRange',\n}\n\nexport const StoreFacetBoolean: Record<\n string,\n Resolver<Facet<FacetValueBoolean>>\n> = {\n key: ({ key }) => key,\n label: ({ name }) => name,\n values: ({ values }) => values.sort((a, b) => a.name.localeCompare(b.name)),\n}\n\nexport const StoreFacetRange: Record<\n string,\n Resolver<Facet<FacetValueRange>>\n> = {\n key: ({ key }) => key,\n label: ({ name }) => name,\n min: ({ values, key }, _, { storage: { searchArgs } }) => {\n /**\n * Fetch the selected range the user queried.\n *\n * This is necessary because, differently from boolean facets, Search API does\n * not return the selected values, making us have to implement it in here\n */\n const selectedRange = parseRange(\n searchArgs?.selectedFacets?.find((facet) => facet.key === key)?.value ??\n ''\n )\n\n const facet = min(values, (a, b) => a.range.from - b.range.from)\n const globalMin = facet?.range.from ?? 0\n\n return {\n selected: selectedRange?.[0] ?? globalMin,\n absolute: globalMin,\n }\n },\n max: ({ values, key }, _, { storage: { searchArgs } }) => {\n /**\n * Fetch the selected range the user queried.\n *\n * This is necessary because, differently from boolean facets, Search API does\n * not return the selected values, making us have to implement it in here\n */\n const selectedRange = parseRange(\n searchArgs?.selectedFacets?.find((facet) => facet.key === key)?.value ??\n ''\n )\n\n const facet = min(values, (a, b) => b.range.to - a.range.to)\n const globalMax = facet?.range.to ?? 0\n\n return {\n selected: selectedRange?.[1] ?? globalMax,\n absolute: globalMax,\n }\n },\n}\n","import type { Resolver } from '..'\nimport type { FacetValueBoolean } from '../clients/search/types/FacetSearchResult'\n\nexport const StoreFacetValueBoolean: Record<\n string,\n Resolver<FacetValueBoolean>\n> = {\n value: ({ value }) => value,\n label: ({ name }) => name || 'unknown',\n selected: ({ selected }) => selected,\n quantity: ({ quantity }) => quantity,\n}\n","import type { Context } from '..'\nimport type {\n MutationSubscribeToNewsletterArgs,\n PersonNewsletter,\n} from '../../../__generated__/schema'\n\nexport const subscribeToNewsletter = async (\n _: any,\n { data }: MutationSubscribeToNewsletterArgs,\n { clients: { commerce } }: Context\n): Promise<PersonNewsletter | null> => {\n const response = await commerce.subscribeToNewsletter(data)\n return { id: response?.Id }\n}\n","export interface Channel {\n seller?: string\n regionId?: string\n salesChannel?: string\n}\n\nexport default class ChannelMarshal {\n public static parse(channelString: string): Required<Channel> {\n try {\n const parsedChannel = JSON.parse(channelString) as Channel\n\n return {\n seller: parsedChannel.seller ?? '',\n regionId: parsedChannel.regionId ?? '',\n salesChannel: parsedChannel.salesChannel ?? '',\n }\n } catch (error) {\n console.error(error)\n\n throw new Error('Malformed channel string')\n }\n }\n\n public static stringify(channel: Channel): string {\n return JSON.stringify(channel)\n }\n}\n","import ChannelMarshal from './channel'\nimport type { Context } from '..'\n\nexport const mutateChannelContext = (ctx: Context, channelString: string) => {\n ctx.storage.channel = ChannelMarshal.parse(channelString)\n}\n\nexport const mutateLocaleContext = (ctx: Context, locale: string) => {\n ctx.storage.locale = locale\n}\n","import crypto from 'crypto'\n\nexport const md5 = (payload: string) =>\n crypto.createHash('md5').update(payload).digest('hex')\n","import type { IStorePropertyValue } from '../../../__generated__/schema'\nimport type { Attachment } from '../clients/commerce/types/OrderForm'\nimport { md5 } from './md5'\n\nexport const VALUE_REFERENCES = {\n attachment: 'ATTACHMENT',\n specification: 'SPECIFICATION',\n} as const\n\nexport function attachmentToPropertyValue(attachment: Attachment) {\n return {\n name: attachment.name,\n value: attachment.content,\n valueReference: VALUE_REFERENCES.attachment,\n }\n}\n\nexport function getPropertyId(item: IStorePropertyValue) {\n return md5(\n `${item.name}:${JSON.stringify(item.value)}:${item.valueReference}`\n )\n}\n","import {\n IStoreGeoCoordinates,\n IStoreSession,\n} from '../../../__generated__/schema'\nimport {\n CheckoutAddress,\n OrderForm,\n LogisticsInfo,\n} from '../clients/commerce/types/OrderForm'\n\nexport const shouldUpdateShippingData = (\n orderForm: OrderForm,\n session: IStoreSession\n) => {\n if (!hasSessionPostalCodeOrGeoCoordinates(session)) {\n return { updateShipping: false, addressChanged: false }\n }\n\n if (!hasItems(orderForm)) {\n return { updateShipping: false, addressChanged: false }\n }\n\n const [selectedAddress] = orderForm?.shippingData?.selectedAddresses ?? []\n if (\n checkPostalCode(selectedAddress, session.postalCode) ||\n checkGeoCoordinates(selectedAddress, session.geoCoordinates) ||\n checkAddressType(selectedAddress, session.addressType)\n ) {\n return { updateShipping: true, addressChanged: true }\n }\n\n // The logisticsInfo will always exist if there´s at least one item inside the cart\n const { logisticsInfo } = orderForm.shippingData!\n\n if (shouldUpdateDeliveryInfo(logisticsInfo, session)) {\n return { updateShipping: true, addressChanged: false }\n }\n return { updateShipping: false, addressChanged: false }\n}\n\n// Validate if theres any postal Code or GeoCoordinates set at the session\nconst hasSessionPostalCodeOrGeoCoordinates = (session: IStoreSession) => {\n return (\n !!session.postalCode ||\n (session.geoCoordinates?.latitude && session.geoCoordinates?.longitude)\n )\n}\n\n// Validate if theres a difference between the session postal code and orderForm postal code\nconst checkPostalCode = (\n address: CheckoutAddress | null,\n postalCode: string | null | undefined\n) => {\n return typeof postalCode === 'string' && address?.postalCode !== postalCode\n}\n\n// Validate if theres a difference between the session geoCoords and orderForm geoCoords\nconst checkGeoCoordinates = (\n address: CheckoutAddress | null,\n geoCoordinates: IStoreGeoCoordinates | null | undefined\n) => {\n return (\n typeof geoCoordinates?.latitude === 'number' &&\n typeof geoCoordinates?.longitude === 'number' &&\n (address?.geoCoordinates[0] !== geoCoordinates?.longitude ||\n address?.geoCoordinates[1] !== geoCoordinates?.latitude)\n )\n}\n\nconst checkAddressType = (\n address: CheckoutAddress | null,\n addressType: string | null | undefined\n) => {\n return typeof addressType === 'string' && address?.addressType !== addressType\n}\n\n// Validate if theres any item inside the orderForm\nconst hasItems = (orderForm: OrderForm) => {\n return orderForm.items.length !== 0\n}\n\nconst shouldUpdateDeliveryInfo = (\n logisticsInfo: LogisticsInfo[],\n session: IStoreSession | null\n) => {\n const deliveryChannel = session?.deliveryMode?.deliveryChannel\n const deliveryMethod = session?.deliveryMode?.deliveryMethod\n const { startDate, endDate } = session?.deliveryMode?.deliveryWindow || {}\n\n return logisticsInfo.some(\n ({ selectedDeliveryChannel, selectedSla, slas }) => {\n const checkDeliveryChannel =\n deliveryChannel && selectedDeliveryChannel !== deliveryChannel\n const checkDeliveryMethod =\n deliveryMethod && selectedSla !== deliveryMethod\n\n return slas?.some((sla) => {\n if (\n (checkDeliveryChannel && sla.deliveryChannel === deliveryChannel) ||\n (checkDeliveryMethod && sla.id === deliveryMethod)\n ) {\n return true\n }\n return (\n startDate &&\n endDate &&\n sla.deliveryChannel === deliveryChannel &&\n sla.id === deliveryMethod &&\n (!sla?.deliveryWindow ||\n sla?.deliveryWindow?.startDateUtc !== startDate ||\n sla?.deliveryWindow?.endDateUtc !== endDate) &&\n sla.availableDeliveryWindows?.some(\n (window) =>\n window?.startDateUtc === startDate &&\n window?.endDateUtc === endDate\n )\n )\n })\n }\n )\n}\n","import { IStoreSession } from '../../../__generated__/schema'\nimport { OrderForm } from '../clients/commerce/types/OrderForm'\n\nexport const getAddressOrderForm = (\n orderForm: OrderForm,\n session: IStoreSession,\n addressChanged: boolean\n) => {\n const postalCode = session.postalCode\n const geoCoordinates = session.geoCoordinates\n const availableAddresses = orderForm?.shippingData?.availableAddresses ?? []\n const selectedAddresses = orderForm?.shippingData?.selectedAddresses ?? []\n // Validate if no change for the address was made and the deliveryMode has changed we can return the address from the orderForm\n if (!addressChanged && selectedAddresses.length > 0) {\n return [selectedAddresses[0]]\n }\n\n // Validate if the address from the session already exists at the availableAddresses from the OrderForm to avoid duplication\n if (addressChanged && availableAddresses.length > 0) {\n for (const address of availableAddresses) {\n if (postalCode && geoCoordinates) {\n const addressMatcher =\n address.postalCode === postalCode ||\n (address.geoCoordinates[0] === geoCoordinates.longitude &&\n address.geoCoordinates[1] === geoCoordinates.latitude)\n if (addressMatcher) {\n return [address]\n }\n }\n if (postalCode && !geoCoordinates) {\n const addressMatcher = address.postalCode === postalCode\n if (addressMatcher) {\n return [address]\n }\n }\n if (geoCoordinates && !postalCode) {\n const addressMatcher =\n address.geoCoordinates[0] === geoCoordinates.longitude &&\n address.geoCoordinates[1] === geoCoordinates.latitude\n if (addressMatcher) {\n return [address]\n }\n }\n }\n }\n\n return null\n}\n","import { IStoreSession } from '../../../__generated__/schema'\nimport { SelectedAddress } from '../clients/commerce/types/ShippingData'\n\nexport const createNewAddress = (session: IStoreSession) => {\n const postalCode = session.postalCode\n const geoCoordinates = session.geoCoordinates\n\n // If the address from the session has changed and it do not exist we will create the new one\n const addressSession: SelectedAddress = {\n addressType: session.addressType || null,\n postalCode: postalCode || null,\n city: null,\n state: null,\n country: session.country || null,\n street: null,\n number: null,\n neighborhood: null,\n complement: null,\n reference: null,\n geoCoordinates: [],\n }\n\n if (geoCoordinates) {\n const latitude =\n typeof geoCoordinates === 'object' && 'latitude' in geoCoordinates\n ? geoCoordinates.latitude\n : null\n const longitude =\n typeof geoCoordinates === 'object' && 'longitude' in geoCoordinates\n ? geoCoordinates.longitude\n : null\n addressSession.geoCoordinates =\n latitude !== null && longitude !== null ? [longitude, latitude] : []\n }\n\n return [addressSession]\n}\n","import deepEquals from 'fast-deep-equal'\n\nimport { mutateChannelContext, mutateLocaleContext } from '../utils/contex'\nimport { md5 } from '../utils/md5'\nimport {\n attachmentToPropertyValue,\n getPropertyId,\n VALUE_REFERENCES,\n} from '../utils/propertyValue'\n\nimport type { Context } from '..'\nimport type {\n IStoreOffer,\n IStoreOrder,\n IStorePropertyValue,\n IStoreSession,\n Maybe,\n MutationValidateCartArgs,\n} from '../../../__generated__/schema'\nimport type {\n OrderForm,\n OrderFormInputItem,\n OrderFormItem,\n} from '../clients/commerce/types/OrderForm'\nimport { shouldUpdateShippingData } from '../utils/shouldUpdateShippingData'\nimport { getAddressOrderForm } from '../utils/getAddressOrderForm'\nimport { SelectedAddress } from '../clients/commerce/types/ShippingData'\nimport { createNewAddress } from '../utils/createNewAddress'\n\ntype Indexed<T> = T & { index?: number }\n\nconst isAttachment = (value: IStorePropertyValue) =>\n value.valueReference === VALUE_REFERENCES.attachment\n\nconst getId = (item: IStoreOffer) =>\n [\n item.itemOffered.sku,\n item.seller.identifier,\n item.price < 0.01 ? 'Gift' : undefined,\n item.itemOffered.additionalProperty\n ?.filter(isAttachment)\n .map(getPropertyId)\n .join('-'),\n ]\n .filter(Boolean)\n .join('::')\n\nconst orderFormItemToOffer = (\n item: OrderFormItem,\n index?: number\n): Indexed<IStoreOffer> => ({\n listPrice: item.listPrice / 100,\n price: item.sellingPrice / 100,\n quantity: item.quantity,\n seller: { identifier: item.seller },\n itemOffered: {\n sku: item.id,\n image: [],\n name: item.name,\n additionalProperty: item.attachments.map(attachmentToPropertyValue),\n },\n index,\n})\n\nconst offerToOrderItemInput = (\n offer: Indexed<IStoreOffer>\n): OrderFormInputItem => ({\n quantity: offer.quantity,\n seller: offer.seller.identifier,\n id: offer.itemOffered.sku,\n index: offer.index,\n attachments: (\n offer.itemOffered.additionalProperty?.filter(isAttachment) ?? []\n ).map((attachment) => ({\n name: attachment.name,\n content: attachment.value,\n })),\n})\n\nconst groupById = (offers: IStoreOffer[]): Map<string, IStoreOffer[]> =>\n offers.reduce((acc, item) => {\n const id = getId(item)\n\n if (!acc.has(id)) {\n acc.set(id, [])\n }\n\n acc.get(id)?.push(item)\n\n return acc\n }, new Map<string, IStoreOffer[]>())\n\nconst equals = (storeOrder: IStoreOrder, orderForm: OrderForm) => {\n const pick = (item: Indexed<IStoreOffer>, index: number) => ({\n ...item,\n itemOffered: {\n sku: item.itemOffered.sku,\n },\n index,\n })\n\n const orderFormItems = orderForm.items.map(orderFormItemToOffer).map(pick)\n const storeOrderItems = storeOrder.acceptedOffer.map(pick)\n\n const isSameOrder = storeOrder.orderNumber === orderForm.orderFormId\n const orderItemsAreSync = deepEquals(orderFormItems, storeOrderItems)\n\n return isSameOrder && orderItemsAreSync\n}\n\nconst joinItems = (form: OrderForm) => {\n const itemsById = form.items.reduce((acc, item) => {\n const id = getId(orderFormItemToOffer(item))\n\n if (!acc[id]) {\n acc[id] = []\n }\n\n acc[id].push(item)\n\n return acc\n }, {} as Record<string, OrderFormItem[]>)\n\n return {\n ...form,\n items: Object.values(itemsById).map((items) => {\n const [item] = items\n const quantity = items.reduce((acc, i) => acc + i.quantity, 0)\n const totalPrice = items.reduce(\n (acc, i) =>\n acc +\n (i?.priceDefinition?.total ??\n (i?.quantity ?? 0) * (i?.sellingPrice ?? 0)),\n 0\n )\n\n return {\n ...item,\n quantity,\n sellingPrice: totalPrice / quantity,\n }\n }),\n }\n}\n\nconst orderFormToCart = async (\n form: OrderForm,\n skuLoader: Context['loaders']['skuLoader']\n) => {\n return {\n order: {\n orderNumber: form.orderFormId,\n acceptedOffer: form.items.map(async (item) => ({\n ...item,\n product: await skuLoader.load(item.id),\n })),\n },\n messages: form.messages.map(({ text, status }) => ({\n text,\n status: status.toUpperCase(),\n })),\n }\n}\n\nconst getOrderFormEtag = ({ items }: OrderForm) => md5(JSON.stringify(items))\n\nconst setOrderFormEtag = async (\n form: OrderForm,\n commerce: Context['clients']['commerce']\n) => {\n try {\n const orderForm = await commerce.checkout.setCustomData({\n id: form.orderFormId,\n appId: 'faststore',\n key: 'cartEtag',\n value: getOrderFormEtag(form),\n })\n\n return orderForm\n } catch (err) {\n console.error(\n 'Error while setting custom data to orderForm.\\n Make sure to add the following custom app to the orderForm: \\n{\"fields\":[\"cartEtag\"],\"id\":\"faststore\",\"major\":1}.\\n More info at: https://developers.vtex.com/vtex-rest-api/docs/customizable-fields-with-checkout-api'\n )\n\n throw err\n }\n}\n\n/**\n * Checks if cartEtag stored on customData is up to date\n * @description If cartEtag is not up to date, this means that\n * another system changed the cart, like Checkout UI or Order Placed\n */\nconst isOrderFormStale = (form: OrderForm) => {\n const faststoreData = form.customData?.customApps.find(\n (app) => app.id === 'faststore'\n )\n\n const oldEtag = faststoreData?.fields?.cartEtag\n\n if (oldEtag == null) {\n return true\n }\n\n const newEtag = getOrderFormEtag(form)\n\n return newEtag !== oldEtag\n}\n\n// Returns the regionalized orderForm\nconst getOrderForm = async (id: string, { clients: { commerce } }: Context) => {\n return commerce.checkout.orderForm({\n id,\n })\n}\n\nconst updateOrderFormShippingData = async (\n orderForm: OrderForm,\n session: Maybe<IStoreSession> | undefined,\n { clients: { commerce } }: Context\n) => {\n // Stores that are not yet providing the session while validating the cart\n // should not be able to update the shipping data\n //\n // This was causing errors while validating regionalizated carts\n // because the following code was trying to change the shippingData to an undefined address/session\n\n if (!session) {\n return orderForm\n }\n\n const { updateShipping, addressChanged } = shouldUpdateShippingData(\n orderForm,\n session\n )\n\n if (updateShipping) {\n // Check if the orderForm address matches the one from the session\n const oldAddress = getAddressOrderForm(orderForm, session, addressChanged)\n\n const address = oldAddress ? oldAddress : createNewAddress(session)\n\n const selectedAddresses = address as SelectedAddress[]\n\n const hasDeliveryWindow = session.deliveryMode?.deliveryWindow\n ? true\n : false\n\n if (hasDeliveryWindow) {\n // if you have a Delivery Window you have to first get the delivery window to set the desired after\n await commerce.checkout.shippingData(\n {\n id: orderForm.orderFormId,\n index: orderForm.items.length,\n deliveryMode: session.deliveryMode,\n selectedAddresses: selectedAddresses,\n },\n false\n )\n }\n\n return commerce.checkout.shippingData(\n {\n id: orderForm.orderFormId,\n index: orderForm.items.length,\n deliveryMode: session.deliveryMode,\n selectedAddresses: selectedAddresses,\n },\n true\n )\n }\n return orderForm\n}\n\n/**\n * This resolver implements the optimistic cart behavior. The main idea in here\n * is that we receive a cart from the UI (as query params) and we validate it with\n * the commerce platform. If the cart is valid, we return null, if the cart is\n * invalid according to the commerce platform, we return the new cart the UI should use\n * instead.\n *\n * The algorithm is something like:\n * 1. Fetch orderForm from VTEX\n * 2. Compute delta changes between the orderForm and the UI's cart\n * 3. Update the orderForm in VTEX platform accordingly\n * 4. If any changes were made, send to the UI the new cart. Null otherwise\n */\nexport const validateCart = async (\n _: unknown,\n { cart: { order }, session }: MutationValidateCartArgs,\n ctx: Context\n) => {\n const { orderNumber, acceptedOffer, shouldSplitItem } = order\n const {\n clients: { commerce },\n loaders: { skuLoader },\n } = ctx\n\n const channel = session?.channel\n const locale = session?.locale\n\n if (channel) {\n mutateChannelContext(ctx, channel)\n }\n\n if (locale) {\n mutateLocaleContext(ctx, locale)\n }\n\n // Step1: Get OrderForm from VTEX Commerce\n const orderForm = await getOrderForm(orderNumber, ctx)\n\n // Step1.5: Check if another system changed the orderForm with this orderNumber\n // If so, this means the user interacted with this cart elsewhere and expects\n // to see this new cart state instead of what's stored on the user's browser.\n const isStale = isOrderFormStale(orderForm)\n\n if (isStale && orderNumber) {\n const newOrderForm = await setOrderFormEtag(orderForm, commerce).then(\n joinItems\n )\n return orderFormToCart(newOrderForm, skuLoader)\n }\n\n // Step2: Process items from both browser and checkout so they have the same shape\n const browserItemsById = groupById(acceptedOffer)\n const originItemsById = groupById(orderForm.items.map(orderFormItemToOffer))\n const originItems = Array.from(originItemsById.entries()) // items on the VTEX platform backend\n const browserItems = Array.from(browserItemsById.entries()) // items on the user's browser\n\n // Step3: Compute delta changes\n const { itemsToAdd, itemsToUpdate } = browserItems.reduce(\n (acc, [id, items]) => {\n const maybeOriginItem = originItemsById.get(id)\n\n // Adding new items to cart\n if (!maybeOriginItem) {\n items.forEach((item) => acc.itemsToAdd.push(item))\n\n return acc\n }\n\n // Update existing items\n const [head, ...tail] = maybeOriginItem\n const totalQuantity = items.reduce((acc, curr) => acc + curr.quantity, 0)\n\n // set total quantity to first item\n acc.itemsToUpdate.push({\n ...head,\n quantity: totalQuantity,\n })\n\n // Remove all the rest\n tail.forEach((item) => acc.itemsToUpdate.push({ ...item, quantity: 0 }))\n\n return acc\n },\n {\n itemsToAdd: [] as IStoreOffer[],\n itemsToUpdate: [] as IStoreOffer[],\n }\n )\n\n const itemsToDelete = originItems\n .filter(([id]) => !browserItemsById.has(id))\n .flatMap(([, items]) => items.map((item) => ({ ...item, quantity: 0 })))\n\n const changes = [...itemsToAdd, ...itemsToUpdate, ...itemsToDelete].map(\n offerToOrderItemInput\n )\n\n if (changes.length === 0) {\n return null\n }\n // Step4: Apply delta changes to order form\n const updatedOrderForm = await commerce.checkout\n // update orderForm items\n .updateOrderFormItems({\n id: orderForm.orderFormId,\n orderItems: changes,\n shouldSplitItem,\n })\n // update orderForm shippingData\n .then((form: OrderForm) => updateOrderFormShippingData(form, session, ctx))\n // update orderForm etag so we know last time we touched this orderForm\n .then((form: OrderForm) => setOrderFormEtag(form, commerce))\n .then(joinItems)\n\n // Step5: If no changes detected before/after updating orderForm, the order is validated\n if (equals(order, updatedOrderForm)) {\n return null\n }\n // Step6: There were changes, convert orderForm to StoreCart\n return orderFormToCart(updatedOrderForm, skuLoader)\n}\n","import deepEquals from 'fast-deep-equal'\n\nimport ChannelMarshal from '../utils/channel'\nimport type { Context } from '..'\nimport type {\n MutationValidateSessionArgs,\n StoreSession,\n} from '../../../__generated__/schema'\n\nexport const validateSession = async (\n _: any,\n { session: oldSession, search }: MutationValidateSessionArgs,\n { clients }: Context\n): Promise<StoreSession | null> => {\n const channel = ChannelMarshal.parse(oldSession.channel ?? '')\n const postalCode = String(oldSession.postalCode ?? '').replace(/\\D/g, '')\n const geoCoordinates = oldSession.geoCoordinates ?? null\n\n const country = oldSession.country ?? ''\n\n const params = new URLSearchParams(search)\n const salesChannel = params.get('sc') ?? channel.salesChannel\n\n params.set('sc', salesChannel)\n\n const [regionData, sessionData] = await Promise.all([\n postalCode || geoCoordinates\n ? clients.commerce.checkout.region({\n postalCode,\n geoCoordinates,\n country,\n salesChannel,\n })\n : Promise.resolve(null),\n clients.commerce.session(params.toString()).catch(() => null),\n ])\n\n const profile = sessionData?.namespaces.profile ?? null\n const store = sessionData?.namespaces.store ?? null\n const region = regionData?.[0]\n // Set seller only if it's inside a region\n const seller = region?.sellers.find((seller) => channel.seller === seller.id)\n\n const newSession = {\n ...oldSession,\n currency: {\n code: store?.currencyCode.value ?? oldSession.currency.code,\n symbol: store?.currencySymbol.value ?? oldSession.currency.symbol,\n },\n country: store?.countryCode.value ?? oldSession.country,\n channel: ChannelMarshal.stringify({\n salesChannel: store?.channel?.value ?? channel.salesChannel,\n regionId: region?.id ?? channel.regionId,\n seller: seller?.id,\n }),\n person: profile?.id\n ? {\n id: profile.id?.value ?? '',\n email: profile.email?.value ?? '',\n givenName: profile.firstName?.value ?? '',\n familyName: profile.lastName?.value ?? '',\n }\n : null,\n }\n\n if (deepEquals(oldSession, newSession)) {\n return null\n }\n\n return newSession\n}\n","import { subscribeToNewsletter } from './subscribeToNewsletter'\nimport { validateCart } from './validateCart'\nimport { validateSession } from './validateSession'\n\nexport const Mutation = {\n validateCart,\n validateSession,\n subscribeToNewsletter,\n}\n","import type { GraphQLScalarSerializer } from 'graphql'\nimport { GraphQLScalarType } from 'graphql'\nimport { Kind } from 'graphql/language'\n\nexport const ObjectOrString = new GraphQLScalarType({\n name: 'ObjectOrString',\n description:\n 'A string or the string representation of an object (a stringified object).',\n parseValue: toObjectOrString,\n serialize: stringify,\n parseLiteral(ast) {\n if (ast.kind === Kind.STRING) {\n return getValueAsObjectOrString(ast.value)\n }\n\n return null\n },\n})\n\nfunction toObjectOrString(value: GraphQLScalarSerializer<any>) {\n if (typeof value === 'string') {\n return getValueAsObjectOrString(value)\n }\n\n return null\n}\n\nfunction getValueAsObjectOrString(value: string) {\n try {\n return JSON.parse(value)\n } catch (e) {\n return value\n }\n}\n\nfunction stringify(value: GraphQLScalarSerializer<any>) {\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n return null\n}\n","import {\n availability,\n inStock,\n inStockOrderFormItem,\n price,\n sellingPrice,\n} from '../utils/productStock'\nimport type { Resolver } from '..'\nimport type { StoreAggregateOffer } from './aggregateOffer'\nimport type { ArrayElementType } from '../../../typings'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport type { OrderFormItem } from '../clients/commerce/types/OrderForm'\n\ntype OrderFormProduct = OrderFormItem & { product: EnhancedSku }\ntype SearchProduct = ArrayElementType<\n ReturnType<typeof StoreAggregateOffer.offers>\n>\nexport type Root = SearchProduct | OrderFormProduct\n\nconst isSearchItem = (item: Root): item is SearchProduct =>\n 'Price' in item && 'seller' in item && 'product' in item\n\nconst isOrderFormItem = (item: Root): item is OrderFormProduct =>\n 'skuName' in item\n\nexport const StoreOffer: Record<string, Resolver<Root>> = {\n priceCurrency: async (_, __, ctx) => {\n const { \n loaders: { salesChannelLoader }, \n storage: { channel } \n } = ctx\n\n const sc = await salesChannelLoader.load(channel.salesChannel);\n \n return sc.CurrencyCode ?? '';\n },\n priceValidUntil: (root) => {\n if (isSearchItem(root)) {\n return root.PriceValidUntil ?? ''\n }\n\n if (isOrderFormItem(root)) {\n return root.priceValidUntil ?? ''\n }\n\n return null\n },\n itemCondition: () => 'https://schema.org/NewCondition',\n availability: async (root) => {\n if (isSearchItem(root)) {\n return availability(inStock(root))\n }\n\n if (isOrderFormItem(root)) {\n return availability(inStockOrderFormItem(root.availability))\n }\n\n return null\n },\n seller: (root, _, ctx) => {\n if (isSearchItem(root)) {\n return {\n identifier: ctx.storage.channel?.seller || root.seller.sellerId || '',\n }\n }\n\n if (isOrderFormItem(root)) {\n return {\n identifier: root.seller,\n }\n }\n\n return null\n },\n price: (root) => {\n if (isSearchItem(root)) {\n return price(root)\n }\n\n if (isOrderFormItem(root)) {\n return root.sellingPrice / 1e2\n }\n\n return null\n },\n sellingPrice: (root) => {\n if (isSearchItem(root)) {\n return sellingPrice(root)\n }\n\n if (isOrderFormItem(root)) {\n return root.sellingPrice / 1e2\n }\n\n return null\n },\n listPrice: (root) => {\n if (isSearchItem(root)) {\n return root.ListPrice ?? 0\n }\n\n if (isOrderFormItem(root)) {\n return root.listPrice / 1e2\n }\n\n return null\n },\n itemOffered: (root) => {\n if (isSearchItem(root)) {\n return root.product\n }\n\n if (isOrderFormItem(root)) {\n return {\n ...root.product,\n attachmentsValues: root.attachments,\n }\n }\n\n return null\n },\n quantity: (root) => {\n if (isSearchItem(root)) {\n return root.AvailableQuantity ?? 0\n }\n\n if (isOrderFormItem(root)) {\n return root.quantity\n }\n\n return null\n },\n}\n","import type { Product } from '../clients/search/types/ProductSearchResult'\n\nexport const canonicalFromProduct = ({ linkText }: Product) => `/${linkText}/p`\n","import type { CommertialOffer } from '../clients/search/types/ProductSearchResult'\n\nexport type EnhancedCommercialOffer<S, P> = CommertialOffer & {\n seller: S\n product: P\n}\n\nexport const enhanceCommercialOffer = <S, P>({\n offer,\n seller,\n product,\n}: {\n offer: CommertialOffer\n seller: S\n product: P\n}): EnhancedCommercialOffer<S, P> => ({\n ...offer,\n product,\n seller,\n})\n","import { canonicalFromProduct } from '../utils/canonical'\nimport { enhanceCommercialOffer } from '../utils/enhanceCommercialOffer'\nimport { bestOfferFirst } from '../utils/productStock'\nimport { slugify } from '../utils/slugify'\nimport type { EnhancedCommercialOffer } from '../utils/enhanceCommercialOffer'\nimport type { Resolver } from '..'\nimport type { PromiseType } from '../../../typings'\nimport type { Query } from './query'\nimport {\n attachmentToPropertyValue,\n VALUE_REFERENCES,\n} from '../utils/propertyValue'\nimport type { Attachment } from '../clients/commerce/types/OrderForm'\n\ntype QueryProduct = PromiseType<ReturnType<typeof Query.product>>\n\nexport type Root = QueryProduct & {\n attachmentsValues?: Attachment[]\n}\n\nconst DEFAULT_IMAGE = {\n imageText: 'image',\n imageUrl:\n 'https://storecomponents.vtexassets.com/assets/faststore/images/image___117a6d3e229a96ad0e0d0876352566e2.svg',\n}\n\nconst getSlug = (link: string, id: string) => `${link}-${id}`\nconst getPath = (link: string, id: string) => `/${getSlug(link, id)}/p`\nconst nonEmptyArray = <T>(array: T[] | null | undefined) =>\n Array.isArray(array) && array.length > 0 ? array : null\n\nexport const StoreProduct: Record<string, Resolver<Root>> & {\n offers: Resolver<\n Root,\n any,\n Array<EnhancedCommercialOffer<Root['sellers'][number], Root>>\n >\n\n isVariantOf: Resolver<Root, any, Root>\n} = {\n productID: ({ itemId }) => itemId,\n name: ({ isVariantOf, name }) => name ?? isVariantOf.productName,\n slug: ({ isVariantOf: { linkText }, itemId }) => getSlug(linkText, itemId),\n description: ({ isVariantOf: { description } }) => description,\n seo: ({ isVariantOf }) => ({\n title: isVariantOf.productName,\n description: isVariantOf.description,\n canonical: canonicalFromProduct(isVariantOf),\n }),\n brand: ({ isVariantOf: { brand } }) => ({ name: brand }),\n breadcrumbList: ({\n isVariantOf: { categories, productName, linkText },\n itemId,\n }) => {\n return {\n itemListElement: [\n ...categories.reverse().map((categoryPath, index) => {\n const splitted = categoryPath.split('/')\n const name = splitted[splitted.length - 2]\n const item = splitted.map(slugify).join('/')\n\n return {\n name,\n item,\n position: index + 1,\n }\n }),\n {\n name: productName,\n item: getPath(linkText, itemId),\n position: categories.length + 1,\n },\n ],\n numberOfItems: categories.length,\n }\n },\n image: ({ images }) =>\n (nonEmptyArray(images) ?? [DEFAULT_IMAGE]).map(\n ({ imageUrl, imageText }) => ({\n alternateName: imageText ?? '',\n url: imageUrl.replace('vteximg.com.br', 'vtexassets.com'),\n })\n ),\n sku: ({ itemId }) => itemId,\n gtin: ({ referenceId }) => referenceId[0]?.Value ?? '',\n review: () => [],\n aggregateRating: () => ({}),\n offers: (root) =>\n root.sellers\n .map((seller) =>\n enhanceCommercialOffer({\n offer: seller.commertialOffer,\n seller,\n product: root,\n })\n )\n .sort(bestOfferFirst),\n isVariantOf: (root) => root,\n additionalProperty: ({\n // Search uses the name variations for specifications\n variations: specifications = [],\n attachmentsValues = [],\n }) => {\n const propertyValueSpecifications = specifications.flatMap(\n ({ name, values }) =>\n values.map((value) => ({\n name,\n value,\n valueReference: VALUE_REFERENCES.specification,\n }))\n )\n\n const propertyValueAttachments = attachmentsValues.map(\n attachmentToPropertyValue\n )\n\n return [...propertyValueSpecifications, ...propertyValueAttachments]\n },\n releaseDate: ({ isVariantOf: { releaseDate } }) => releaseDate ?? ''\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { PromiseType } from '../../../typings'\nimport type { StoreProduct } from './product'\nimport { VALUE_REFERENCES } from '../utils/propertyValue'\n\nexport type Root = PromiseType<ReturnType<typeof StoreProduct.isVariantOf>>\n\nconst BLOCKED_SPECIFICATIONS = new Set(['allSpecifications'])\n\nexport const StoreProductGroup: Record<string, Resolver<Root>> = {\n hasVariant: (root) =>\n root.isVariantOf.items.map((item) => enhanceSku(item, root.isVariantOf)),\n productGroupID: ({ isVariantOf }) => isVariantOf.productId,\n name: (root) => root.isVariantOf.productName,\n skuVariants: (root) => root,\n additionalProperty: ({ isVariantOf: { specificationGroups } }) =>\n specificationGroups\n // Filter sku specifications so we don't mix them with product specs.\n .filter(\n (specificationGroup) =>\n !BLOCKED_SPECIFICATIONS.has(specificationGroup.name)\n )\n // Transform specs back into product specs.\n .flatMap(({ specifications }) =>\n specifications.flatMap(({ name, values }) =>\n values.map((value) => ({\n name,\n value,\n valueReference: VALUE_REFERENCES.specification,\n }))\n )\n ),\n}\n","import type { Resolver } from '..'\nimport type { StorePropertyValue as StorePropertyValueType } from '../../../__generated__/schema'\nimport { getPropertyId } from '../utils/propertyValue'\n\nexport type Root = StorePropertyValueType\n\nexport const StorePropertyValue: Record<string, Resolver<Root>> = {\n propertyID: (root) => getPropertyId(root),\n name: ({ name }) => name,\n value: ({ value }) => value,\n valueReference: ({ valueReference }) => valueReference,\n}\n","export const SORT_MAP = {\n price_desc: 'price:desc',\n price_asc: 'price:asc',\n orders_desc: 'orders:desc',\n name_desc: 'name:desc',\n name_asc: 'name:asc',\n release_desc: 'release:desc',\n discount_desc: 'discount:desc',\n score_desc: '',\n} as const\n","import { min } from './orderStatistics'\nimport { bestOfferFirst } from './productStock'\nimport type { Item } from '../clients/search/types/ProductSearchResult'\n\n/**\n * This function implements Portal heuristics for returning the best sku for a product.\n *\n * The best sku is the one with the best (cheapest available) offer\n * */\nexport const pickBestSku = (skus: Item[]) => {\n const offersBySku = skus.flatMap((sku) =>\n sku.sellers.map((seller) => ({\n offer: seller.commertialOffer,\n sku,\n }))\n )\n\n const best = min(offersBySku, ({ offer: o1 }, { offer: o2 }) =>\n bestOfferFirst(o1, o2)\n )\n\n return best ? best.sku : skus[0]\n}\n\nexport const isValidSkuId = (skuId: string) =>\n skuId !== '' && !Number.isNaN(Number(skuId))\n","import { FACET_CROSS_SELLING_MAP } from './../utils/facets'\nimport { BadRequestError, NotFoundError } from '../../errors'\nimport { mutateChannelContext, mutateLocaleContext } from '../utils/contex'\nimport { enhanceSku } from '../utils/enhanceSku'\nimport {\n findChannel,\n findCrossSelling,\n findLocale,\n findSkuId,\n findSlug,\n transformSelectedFacet,\n} from '../utils/facets'\nimport { SORT_MAP } from '../utils/sort'\nimport { StoreCollection } from './collection'\nimport type {\n QueryAllCollectionsArgs,\n QueryAllProductsArgs,\n QueryCollectionArgs,\n QueryProductArgs,\n QuerySearchArgs,\n QuerySellersArgs,\n QueryShippingArgs,\n QueryRedirectArgs,\n} from '../../../__generated__/schema'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { Context } from '../index'\nimport { isValidSkuId, pickBestSku } from '../utils/sku'\nimport { SearchArgs } from '../clients/search'\n\nexport const Query = {\n product: async (_: unknown, { locator }: QueryProductArgs, ctx: Context) => {\n // Insert channel in context for later usage\n const channel = findChannel(locator)\n const locale = findLocale(locator)\n const id = findSkuId(locator)\n const slug = findSlug(locator)\n\n if (channel) {\n mutateChannelContext(ctx, channel)\n }\n\n if (locale) {\n mutateLocaleContext(ctx, locale)\n }\n\n const {\n loaders: { skuLoader },\n clients: { commerce, search },\n } = ctx\n\n try {\n const skuId = id ?? slug?.split('-').pop() ?? ''\n\n if (!isValidSkuId(skuId)) {\n throw new Error('Invalid SkuId')\n }\n\n const sku = await skuLoader.load(skuId)\n\n /**\n * Here be dragons 🦄🦄🦄\n *\n * In some cases, the slug has a valid skuId for a different\n * product. This condition makes sure that the fetched sku\n * is the one we actually asked for\n * */\n if (\n slug &&\n sku.isVariantOf.linkText &&\n !slug.startsWith(sku.isVariantOf.linkText)\n ) {\n throw new Error(\n `Slug was set but the fetched sku does not satisfy the slug condition. slug: ${slug}, linkText: ${sku.isVariantOf.linkText}`\n )\n }\n\n return sku\n } catch (err) {\n if (slug == null) {\n throw new BadRequestError('Missing slug or id')\n }\n\n const route = await commerce.catalog.portal.pagetype(`${slug}/p`)\n\n if (route.pageType !== 'Product' || !route.id) {\n throw new NotFoundError(`No product found for slug ${slug}`)\n }\n\n const {\n products: [product],\n } = await search.products({\n page: 0,\n count: 1,\n query: `product:${route.id}`,\n })\n\n if (!product) {\n throw new NotFoundError(`No product found for id ${route.id}`)\n }\n\n const sku = pickBestSku(product.items)\n\n return enhanceSku(sku, product)\n }\n },\n collection: (_: unknown, { slug }: QueryCollectionArgs, ctx: Context) => {\n const {\n loaders: { collectionLoader },\n } = ctx\n\n return collectionLoader.load(slug)\n },\n search: async (\n _: unknown,\n { first, after: maybeAfter, sort, term, selectedFacets }: QuerySearchArgs,\n ctx: Context\n ) => {\n // Insert channel in context for later usage\n const channel = findChannel(selectedFacets)\n const locale = findLocale(selectedFacets)\n const crossSelling = findCrossSelling(selectedFacets)\n\n if (channel) {\n mutateChannelContext(ctx, channel)\n }\n\n if (locale) {\n mutateLocaleContext(ctx, locale)\n }\n\n let query = term\n\n /**\n * In case we are using crossSelling, we need to modify the search\n * we will be performing on our search engine. The idea in here\n * is to use the cross selling API for fetching the productIds our\n * search will return for us.\n * Doing this two request workflow makes it possible to have cross\n * selling with Search features, like pagination, internationalization\n * etc\n */\n if (crossSelling) {\n const products = await ctx.clients.commerce.catalog.products.crossselling(\n {\n type: FACET_CROSS_SELLING_MAP[crossSelling.key],\n productId: crossSelling.value,\n }\n )\n\n query = `product:${products\n .map((x) => x.productId)\n .slice(0, first)\n .join(';')}`\n }\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const searchArgs: Omit<SearchArgs, 'type'> = {\n page: Math.ceil(after / first),\n count: first,\n query: query ?? undefined,\n sort: SORT_MAP[sort ?? 'score_desc'],\n selectedFacets: selectedFacets?.flatMap(transformSelectedFacet) ?? [],\n }\n\n const productSearchPromise = ctx.clients.search.products(searchArgs)\n\n return { searchArgs, productSearchPromise }\n },\n allProducts: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllProductsArgs,\n ctx: Context\n ) => {\n const {\n clients: { search },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const products = await search.products({\n page: Math.ceil(after / first),\n count: first,\n })\n\n const skus = products.products\n .map((product) => product.items.map((sku) => enhanceSku(sku, product)))\n .flat()\n .filter((sku) => sku.sellers.length > 0)\n\n return {\n pageInfo: {\n hasNextPage: products.pagination.after.length > 0,\n hasPreviousPage: products.pagination.before.length > 0,\n startCursor: '0',\n endCursor: products.recordsFiltered.toString(),\n totalCount: products.recordsFiltered,\n },\n // after + index is bigger than after+first itself because of the array flat() above\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: (after + index).toString(),\n })),\n }\n },\n allCollections: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllCollectionsArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n\n const [brands, tree] = await Promise.all([\n commerce.catalog.brand.list(),\n commerce.catalog.category.tree(),\n ])\n\n const categories: Array<CategoryTree & { level: number }> = []\n const dfs = (node: CategoryTree, level: number) => {\n categories.push({ ...node, level })\n\n for (const child of node.children) {\n dfs(child, level + 1)\n }\n }\n\n for (const node of tree) {\n dfs(node, 0)\n }\n\n const collections = [\n ...brands\n .filter((brand) => brand.isActive)\n .map((x) => ({ ...x, type: 'brand' })),\n ...categories,\n ]\n\n const validCollections = collections\n // Nullable slugs may cause one route to override the other\n .filter((node) => Boolean(StoreCollection.slug(node, null, ctx, null)))\n\n return {\n pageInfo: {\n hasNextPage: validCollections.length - after > first,\n hasPreviousPage: after > 0,\n startCursor: '0',\n endCursor: (\n Math.min(first, validCollections.length - after) - 1\n ).toString(),\n totalCount: validCollections.length,\n },\n edges: validCollections\n .slice(after, after + first)\n .map((node, index) => ({\n node,\n cursor: (after + index).toString(),\n })),\n }\n },\n shipping: async (\n _: unknown,\n { country, items, postalCode }: QueryShippingArgs,\n ctx: Context\n ) => {\n const {\n loaders: { simulationLoader },\n clients: { commerce },\n } = ctx\n\n const [simulation, address] = await Promise.all([\n simulationLoader.load({ country, items, postalCode }),\n commerce.checkout.address({ postalCode, country }),\n ])\n\n return {\n ...simulation,\n address,\n }\n },\n\n redirect: async (\n _: unknown,\n { term, selectedFacets }: QueryRedirectArgs,\n ctx: Context\n ) => {\n // Currently the search redirection can be done through a search term or filter (facet) so we limit the redirect query to always have one of these values otherwise we do not execute it.\n // https://help.vtex.com/en/tracks/vtex-intelligent-search--19wrbB7nEQcmwzDPl1l4Cb/4Gd2wLQFbCwTsh8RUDwSoL?&utm_source=autocomplete\n if (!term && (!selectedFacets || !selectedFacets.length)) {\n return null\n }\n\n const { redirect } = await ctx.clients.search.products({\n page: 1,\n count: 1,\n query: term ?? undefined,\n selectedFacets: selectedFacets?.flatMap(transformSelectedFacet) ?? [],\n })\n\n return {\n url: redirect,\n }\n },\n\n sellers: async (\n _: unknown,\n { postalCode, geoCoordinates, country, salesChannel }: QuerySellersArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const regionData = await commerce.checkout.region({\n postalCode,\n geoCoordinates,\n country,\n salesChannel,\n })\n const region = regionData?.[0]\n const { id, sellers } = region\n\n return {\n id,\n sellers,\n }\n },\n}\n","import type { Resolver } from '..'\n\nexport const StoreReview: Record<string, Resolver> = {\n reviewRating: () => ({\n ratingValue: 5,\n bestRating: 5,\n }),\n author: () => ({\n name: '',\n }),\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { SearchArgs } from '../clients/search'\nimport type { Facet } from '../clients/search/types/FacetSearchResult'\nimport { ProductSearchResult } from '../clients/search/types/ProductSearchResult'\n\nexport type Root = {\n searchArgs: Omit<SearchArgs, 'type'>\n productSearchPromise: Promise<ProductSearchResult>\n}\n\nconst isRootFacet = (facet: Facet) => facet.key === 'category-1'\n\nexport const StoreSearchResult: Record<string, Resolver<Root>> = {\n suggestions: async (root, _, ctx) => {\n const {\n clients: { search },\n } = ctx\n\n const { searchArgs } = root\n\n // If there's no search query, suggest the most popular searches.\n if (!searchArgs.query) {\n const topSearches = await search.topSearches()\n\n return {\n terms: topSearches.searches.map((item) => ({\n value: item.term,\n count: item.count,\n })),\n products: [],\n }\n }\n\n const { productSearchPromise } = root\n const [terms, productSearchResult] = await Promise.all([\n search.suggestedTerms(searchArgs),\n productSearchPromise,\n ])\n\n const skus = productSearchResult.products\n .map((product) => {\n const [maybeSku] = product.items\n\n return maybeSku && enhanceSku(maybeSku, product)\n })\n .filter((sku) => !!sku)\n\n const { searches } = terms\n\n return {\n terms: searches.map((item) => ({ value: item.term, count: item.count })),\n products: skus,\n }\n },\n products: async ({ productSearchPromise }) => {\n const productSearchResult = await productSearchPromise\n\n const skus = productSearchResult.products\n .map((product) => {\n const [maybeSku] = product.items\n\n return maybeSku && enhanceSku(maybeSku, product)\n })\n .filter((sku) => !!sku)\n\n return {\n pageInfo: {\n hasNextPage: productSearchResult.pagination.after.length > 0,\n hasPreviousPage: productSearchResult.pagination.before.length > 0,\n startCursor: '0',\n endCursor: productSearchResult.recordsFiltered.toString(),\n totalCount: productSearchResult.recordsFiltered,\n },\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: index.toString(),\n })),\n }\n },\n facets: async ({ searchArgs }, _, ctx) => {\n const {\n clients: { search: is },\n } = ctx\n\n ctx.storage.searchArgs = searchArgs\n\n const { facets = [] } = await is.facets(searchArgs)\n\n const isCollectionPage = !searchArgs.query\n\n const filteredFacets = facets\n // Remove root facet on category pages\n .filter((facet) => !isCollectionPage || !isRootFacet(facet))\n\n return filteredFacets\n },\n metadata: async ({ searchArgs, productSearchPromise }) => {\n if (!searchArgs.query) {\n return null\n }\n\n const productSearchResult = await productSearchPromise\n\n return {\n isTermMisspelled: productSearchResult.correction?.misspelled ?? false,\n logicalOperator: productSearchResult.operator,\n }\n },\n}\n","import type { Resolver } from '..'\n\nexport type Root = { title?: string; description?: string; canonical?: string }\n\nexport const StoreSeo: Record<string, Resolver<Root>> = {\n title: ({ title }) => title ?? '',\n description: ({ description }) => description ?? '',\n canonical: ({ canonical }) => canonical ?? '',\n titleTemplate: () => '',\n}\n","import type { Resolver } from '..'\n\ntype Unit = 'bd' | 'd' | 'h' | 'm'\nconst units = ['bd', 'd', 'h', 'm'] as const\n\nconst isUnit = (x: any): x is Unit => units.includes(x)\n\nconst localizedEstimates: Record<string, Record<string, string>> = {\n bd: {\n 0: 'Today',\n 1: 'In 1 business day',\n other: `Up to # business days`,\n },\n d: {\n 0: 'Today',\n 1: 'In 1 day',\n other: 'Up to # days',\n },\n h: {\n 0: 'Now',\n 1: 'In 1 hour',\n other: 'Up to # hours',\n },\n m: {\n 0: 'Now',\n 1: 'In 1 minute',\n other: 'Up to # minutes',\n },\n}\n\n/**\n * Transforms estimate (e.g 3bd) into friendly format (e.g Up to 3 business days)\n * based on https://github.com/vtex-apps/shipping-estimate-translator/blob/13e17055d6353dd3f3f4c31bae77ab049002809b/messages/en.json\n */\n\nexport const getLocalizedEstimates = (estimate: string): string => {\n const [amount, unit] = [estimate.split(/\\D+/)[0], estimate.split(/[0-9]+/)[1]]\n\n const isAmountNumber = amount !== '' && !Number.isNaN(Number(amount))\n const isUnitValid = isUnit(unit)\n\n if (!isAmountNumber || !isUnitValid) {\n return ''\n }\n\n const amountKey = Number(amount) < 2 ? Number(amount) : 'other'\n\n return localizedEstimates[unit][amountKey].replace('#', amount) ?? ''\n}\n\nexport type Root = {\n name?: string\n friendlyName?: string\n price?: number\n shippingEstimate?: string\n}\n\nexport const ShippingSLA: Record<string, Resolver<Root>> = {\n carrier: (root) => root?.friendlyName ?? root?.name ?? '',\n price: (root) => (root?.price ? root.price / 100 : root?.price),\n localizedEstimates: (root) =>\n root?.shippingEstimate ? getLocalizedEstimates(root.shippingEstimate) : '',\n}\n","import { StoreProduct as StoreProductType } from '../../..'\nimport type { Product, Item } from '../clients/search/types/ProductSearchResult'\n\nexport type SkuVariants = StoreProductType[]\n\nexport type SkuVariantsByName = Record<string, Array<FormattedSkuVariant>>\n\ntype FormattedSkuVariant = {\n alt: string\n src: string\n label: string\n value: string\n}\n\nfunction findSkuVariantImage(availableImages: Item['images']) {\n return (\n availableImages.find(\n (imageProperties) => imageProperties.imageLabel === 'skuvariation'\n ) ?? availableImages[0]\n )\n}\n\nexport function createSlugsMap(\n variants: Item[],\n dominantVariantName: string,\n baseSlug: string\n) {\n /**\n * Maps property value combinations to their respective SKU's slug. Enables\n * us to retrieve the slug for the SKU that matches the currently selected\n * variations in O(1) time.\n *\n * Example: `'Color-Red-Size-40': 'classic-shoes-37'`\n */\n const slugsMap: Record<string, string> = {}\n\n variants.forEach((variant) => {\n const skuSpecificationProperties = variant.variations\n\n if (skuSpecificationProperties.length === 0) {\n return\n }\n\n // Make sure that the 'name-value' pair for the dominant variation\n // is always the first one.\n const dominantNameValue = `${dominantVariantName}-${\n skuSpecificationProperties.find(\n (variationDetails) => variationDetails.name === dominantVariantName\n )?.values[0] ?? ''\n }`\n\n const skuVariantKey = skuSpecificationProperties.reduce((acc, property) => {\n const shouldIgnore = property.name === dominantVariantName\n\n if (shouldIgnore) {\n return acc\n }\n\n return acc + `-${property.name}-${property.values[0]}`\n }, dominantNameValue)\n\n slugsMap[skuVariantKey] = `${baseSlug}-${variant.itemId}`\n })\n\n return slugsMap\n}\n\nexport function getActiveSkuVariations(variations: Item['variations']) {\n const activeVariations: Record<string, string> = {}\n\n variations.forEach((variation) => {\n activeVariations[variation.name] = variation.values[0]\n })\n\n return activeVariations\n}\n\nexport function getVariantsByName(\n skuSpecifications: Product['skuSpecifications']\n) {\n const variants: Record<string, string[]> = {}\n\n skuSpecifications?.forEach((specification) => {\n variants[specification.field.originalName ?? specification.field.name] =\n specification.values.map((value) => value.originalName ?? value.name)\n })\n\n return variants\n}\n\nfunction compare(a: string, b: string) {\n // Values are always represented as Strings, so we need to handle numbers\n // in this special case.\n if (!Number.isNaN(Number(a) - Number(b))) {\n return Number(a) - Number(b)\n }\n\n if (a < b) {\n return -1\n }\n\n if (a > b) {\n return 1\n }\n\n return 0\n}\n\nfunction sortVariants(variantsByName: SkuVariantsByName) {\n const sortedVariants = variantsByName\n\n for (const variantProperty in variantsByName) {\n variantsByName[variantProperty].sort((a, b) => compare(a.value, b.value))\n }\n\n return sortedVariants\n}\n\nexport function getFormattedVariations(\n variants: Item[],\n dominantVariantName: string,\n dominantVariantValue: string\n) {\n /**\n * SKU options already formatted and indexed by their property name.\n *\n * Ex: {\n * `Size`: [\n * { label: '42', value: '42' },\n * { label: '41', value: '41' },\n * { label: '39', value: '39' },\n * ]\n * }\n */\n const variantsByName: SkuVariantsByName = {}\n\n const previouslySeenPropertyValues = new Set<string>()\n\n variants.forEach((variant) => {\n if (variant.variations.length === 0) {\n return\n }\n\n const variantImageToUse = findSkuVariantImage(variant.images)\n\n const dominantVariantEntry = variant.variations.find(\n (variation) => variation.name === dominantVariantName\n )\n\n const matchesDominantVariant =\n dominantVariantEntry?.values[0] === dominantVariantValue\n\n if (!matchesDominantVariant) {\n const nameValueIdentifier = `${dominantVariantName}-${dominantVariantEntry?.values[0]}`\n\n if (\n !dominantVariantEntry ||\n previouslySeenPropertyValues.has(nameValueIdentifier)\n ) {\n return\n }\n\n previouslySeenPropertyValues.add(nameValueIdentifier)\n\n const formattedVariant = {\n src: variantImageToUse.imageUrl,\n alt: variantImageToUse.imageLabel ?? '',\n label: `${dominantVariantName}: ${dominantVariantEntry.values[0]}`,\n value: dominantVariantEntry.values[0],\n }\n\n if (variantsByName[dominantVariantEntry.name]) {\n variantsByName[dominantVariantEntry.name].push(formattedVariant)\n } else {\n variantsByName[dominantVariantEntry.name] = [formattedVariant]\n }\n\n return\n }\n\n variant.variations.forEach((variationProperty) => {\n const nameValueIdentifier = `${variationProperty.name}-${variationProperty.values[0]}`\n\n if (previouslySeenPropertyValues.has(nameValueIdentifier)) {\n return\n }\n\n previouslySeenPropertyValues.add(nameValueIdentifier)\n\n const formattedVariant = {\n src: variantImageToUse.imageUrl,\n alt: variantImageToUse.imageLabel ?? '',\n label: `${variationProperty.name}: ${variationProperty.values[0]}`,\n value: variationProperty.values[0],\n }\n\n if (variantsByName[variationProperty.name]) {\n variantsByName[variationProperty.name].push(formattedVariant)\n } else {\n variantsByName[variationProperty.name] = [formattedVariant]\n }\n })\n })\n\n return sortVariants(variantsByName)\n}\n","import type { Resolver } from '..'\nimport type { PromiseType } from '../../../typings'\nimport type { StoreProduct } from './product'\nimport {\n createSlugsMap,\n getActiveSkuVariations,\n getFormattedVariations,\n getVariantsByName,\n} from '../utils/skuVariants'\n\nexport type Root = PromiseType<ReturnType<typeof StoreProduct.isVariantOf>>\n\ntype SlugsMapArgs = {\n dominantVariantName: string\n}\n\nexport const SkuVariants: Record<string, Resolver<Root>> = {\n activeVariations: (root) => getActiveSkuVariations(root.variations),\n allVariantsByName: (root) =>\n getVariantsByName(root.isVariantOf.skuSpecifications),\n\n slugsMap: (root, args) =>\n createSlugsMap(\n root.isVariantOf.items,\n (args as SlugsMapArgs).dominantVariantName ?? root.variations[0]?.name,\n root.isVariantOf.linkText\n ),\n\n availableVariations: (root, args) => {\n const dominantVariantName = (args as SlugsMapArgs).dominantVariantName ?? root.variations[0]?.name\n const activeVariations = getActiveSkuVariations(root.variations)\n\n const activeDominantVariationValue = activeVariations[dominantVariantName]\n\n const filteredFormattedVariations = getFormattedVariations(\n root.isVariantOf.items,\n dominantVariantName,\n activeDominantVariationValue\n )\n\n return filteredFormattedVariations\n },\n}\n","import { getClients } from './clients'\nimport { getLoaders } from './loaders'\nimport { StoreAggregateOffer } from './resolvers/aggregateOffer'\nimport { StoreAggregateRating } from './resolvers/aggregateRating'\nimport { StoreCollection } from './resolvers/collection'\nimport {\n StoreFacet,\n StoreFacetBoolean,\n StoreFacetRange,\n} from './resolvers/facet'\nimport { StoreFacetValueBoolean } from './resolvers/faceValue'\nimport { Mutation } from './resolvers/mutation'\nimport { ObjectOrString } from './resolvers/objectOrString'\nimport { StoreOffer } from './resolvers/offer'\nimport { StoreProduct } from './resolvers/product'\nimport { StoreProductGroup } from './resolvers/productGroup'\nimport { StorePropertyValue } from './resolvers/propertyValue'\nimport { Query } from './resolvers/query'\nimport { StoreReview } from './resolvers/review'\nimport { StoreSearchResult } from './resolvers/searchResult'\nimport { StoreSeo } from './resolvers/seo'\nimport { ShippingSLA } from './resolvers/shippingSLA'\nimport { SkuVariants } from './resolvers/skuVariations'\nimport ChannelMarshal from './utils/channel'\nimport type { Loaders } from './loaders'\nimport type { Clients } from './clients'\nimport type { Channel } from './utils/channel'\nimport type { SearchArgs } from './clients/search'\n\nexport interface Options {\n platform: 'vtex'\n account: string\n environment: 'vtexcommercestable' | 'vtexcommercebeta'\n // Default sales channel to use for fetching products\n channel: string\n locale: string\n hideUnavailableItems: boolean\n incrementAddress: boolean\n flags?: FeatureFlags\n}\n\ninterface FeatureFlags {\n enableOrderFormSync?: boolean\n}\n\nexport interface Context {\n clients: Clients\n loaders: Loaders\n /**\n * @description Storage updated at each request.\n *\n * Use this datastructure to store and share small values in the context.\n * Use it with caution since dependecy injection leads to a more complex code\n * */\n storage: {\n channel: Required<Channel>\n locale: string\n flags: FeatureFlags\n searchArgs?: Omit<SearchArgs, 'type'>\n }\n headers: Record<string, string>\n}\n\nexport type Resolver<R = unknown, A = unknown, Return = any> = (\n root: R,\n args: A,\n ctx: Context,\n info: any\n) => Return\n\nconst Resolvers = {\n StoreCollection,\n StoreAggregateOffer,\n StoreProduct,\n StoreSeo,\n StoreFacet,\n StoreFacetBoolean,\n StoreFacetRange,\n StoreFacetValueBoolean,\n StoreOffer,\n StoreAggregateRating,\n StoreReview,\n StoreProductGroup,\n StoreSearchResult,\n StorePropertyValue,\n SkuVariants,\n ShippingSLA,\n ObjectOrString,\n Query,\n Mutation,\n}\n\nexport const getContextFactory =\n (options: Options) =>\n (ctx: any): Context => {\n ctx.storage = {\n channel: ChannelMarshal.parse(options.channel),\n flags: options.flags ?? {},\n locale: options.locale,\n }\n ctx.clients = getClients(options, ctx)\n ctx.loaders = getLoaders(options, ctx)\n\n return ctx\n }\n\nexport const getResolvers = (_: Options) => Resolvers\n","import { print } from 'graphql'\n\nimport Address from './address.graphql'\nimport AggregateOffer from './aggregateOffer.graphql'\nimport AggregateRating from './aggregateRating.graphql'\nimport Author from './author.graphql'\nimport Brand from './brand.graphql'\nimport Breadcrumb from './breadcrumb.graphql'\nimport Cart from './cart.graphql'\nimport Collection from './collection.graphql'\nimport Facet from './facet.graphql'\nimport Image from './image.graphql'\nimport Mutation from './mutation.graphql'\nimport Newsletter from './newsletter.graphql'\nimport ObjectOrString from './objectOrString.graphql'\nimport Offer from './offer.graphql'\nimport Order from './order.graphql'\nimport Organization from './organization.graphql'\nimport PageInfo from './pageInfo.graphql'\nimport Person from './person.graphql'\nimport Product from './product.graphql'\nimport ProductGroup from './productGroup.graphql'\nimport PropertyValue from './propertyValue.graphql'\nimport Query from './query.graphql'\nimport Review from './review.graphql'\nimport Seo from './seo.graphql'\nimport Session from './session.graphql'\nimport ShippingSimulation from './shipping.graphql'\nimport SkuVariants from './skuVariants.graphql'\nimport Status from './status.graphql'\n\nexport const typeDefs = [\n Query,\n Mutation,\n Address,\n Brand,\n Breadcrumb,\n Collection,\n Facet,\n Image,\n PageInfo,\n Product,\n Seo,\n Offer,\n AggregateRating,\n Review,\n Author,\n ProductGroup,\n Organization,\n AggregateOffer,\n Order,\n Cart,\n Status,\n PropertyValue,\n Person,\n ObjectOrString,\n Session,\n Newsletter,\n SkuVariants,\n ShippingSimulation,\n]\n .map(print)\n .join('\\n')\n","import { getDirective, MapperKind, mapSchema } from \"@graphql-tools/utils\";\nimport { GraphQLSchema } from \"graphql\";\n\nimport type { Directive } from \"./index\";\n\nconst NAME = \"cacheControl\";\n\nexport interface CacheControl {\n sMaxAge?: number;\n staleWhileRevalidate?: number;\n scope?: string;\n}\n\nexport const stringify = (\n { scope = \"private\", sMaxAge = 0, staleWhileRevalidate = 0 }: CacheControl,\n) =>\n `${scope}, s-maxage=${sMaxAge}, stale-while-revalidate=${staleWhileRevalidate}`;\n\nconst min = (a: number | undefined, b: number | undefined) => {\n if (typeof a === \"number\" && typeof b === \"number\") {\n return a > b ? b : a;\n }\n\n if (typeof a === \"number\") {\n return a;\n }\n\n return b;\n};\n\nconst minScope = (\n a: string | undefined,\n b: string | undefined,\n) => {\n if (typeof a === \"string\" && typeof b === \"string\") {\n return a === \"public\" && b === \"public\" ? \"public\" : \"private\";\n }\n\n return a || b;\n};\n\nconst directive: Directive = {\n typeDefs:\n `directive @cacheControl(sMaxAge: Int, staleWhileRevalidate: Int, scope: String) on FIELD_DEFINITION`,\n transformer: (schema: GraphQLSchema) =>\n mapSchema(schema, {\n [MapperKind.OBJECT_FIELD]: (fieldConfig) => {\n const cacheControl = getDirective(schema, fieldConfig, NAME)?.[0] as\n | CacheControl\n | undefined;\n\n if (cacheControl) {\n const { sMaxAge, staleWhileRevalidate, scope } = cacheControl;\n\n const resolver = fieldConfig.resolve\n\n fieldConfig.resolve = (obj, args, ctx, info) => {\n ctx.cacheControl = {\n sMaxAge: min(ctx.cacheControl?.sMaxAge, sMaxAge),\n staleWhileRevalidate: min(\n ctx.cacheControl?.staleWhileRevalidate,\n staleWhileRevalidate,\n ),\n scope: minScope(ctx.cacheControl?.scope, scope),\n };\n\n return resolver?.(obj, args, ctx, info);\n };\n }\n\n return fieldConfig;\n },\n }),\n};\n\nexport default directive;\n","import type { Plugin, OnExecuteHookResult } from '@envelop/core'\nimport { isAsyncIterable } from '@envelop/core'\nimport { useOnResolve } from '@envelop/on-resolve'\nimport { SpanKind, Context, Span } from '@opentelemetry/api'\nimport {\n trace as openTelTrace,\n context as openTelContext,\n} from '@opentelemetry/api'\nimport type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'\nimport type { Path } from 'graphql/jsutils/Path'\nimport type { LoggerProvider } from '@opentelemetry/sdk-logs'\nimport type { LogRecord } from '@opentelemetry/api-logs'\nimport { SeverityNumber } from '@opentelemetry/api-logs'\nimport { print, Kind, OperationDefinitionNode } from 'graphql'\n\nexport enum AttributeName {\n EXECUTION_ERROR = 'graphql.error',\n EXECUTION_RESULT = 'graphql.result',\n RESOLVER_EXECUTION_ERROR = 'graphql.resolver.error',\n RESOLVER_EXCEPTION = 'graphql.resolver.exception',\n RESOLVER_FIELD_NAME = 'graphql.resolver.fieldName',\n RESOLVER_TYPE_NAME = 'graphql.resolver.typeName',\n RESOLVER_RESULT_TYPE = 'graphql.resolver.resultType',\n RESOLVER_ARGS = 'graphql.resolver.args',\n EXECUTION_OPERATION_NAME = 'graphql.operation.name',\n EXECUTION_OPERATION_TYPE = 'graphql.operation.type',\n EXECUTION_OPERATION_DOCUMENT = 'graphql.document',\n EXECUTION_VARIABLES = 'graphql.variables',\n}\n\nconst tracingSpanSymbol = Symbol('OPEN_TELEMETRY_GRAPHQL')\n\nexport type PluginContext = {\n [tracingSpanSymbol]: Span\n}\n\nfunction getResolverSpanKey(path: Path) {\n const nodes = []\n\n // If the first node (after reversed, it will be the last one) is an integer, that is, identifies a list,\n // we don't want to include it in the key. Note that this will only happen when analysing .prev paths in\n // a list of elements. We just want to remove the initial node that is a integer, not all of them.\n //\n // Nodes with keys 6bc73341b2a183fc::product::image::0::url would not be able to find\n // parents with key 6bc73341b2a183fc::product::image because of the \"0\" list index -\n // it would search for 6bc73341b2a183fc::product::image::0\n let currentPath: Path | undefined =\n nodes.length === 0 && Number.isInteger(path.key) ? path.prev : path\n\n while (currentPath) {\n nodes.push(currentPath.key)\n\n currentPath = currentPath.prev\n }\n\n return [...nodes].reverse().join('.')\n}\n\nexport const getFaststoreTelemetryPlugin = (\n tracingProvider: BasicTracerProvider,\n loggerProvider: LoggerProvider,\n serviceName: string,\n experimentalSendLogs: boolean\n): (() => Plugin<PluginContext>) => {\n return function useFaststoreTelemetry() {\n const tracer = tracingProvider.getTracer(serviceName)\n const logger = loggerProvider.getLogger(serviceName)\n\n const resolverContextsByRootSpans: Record<\n string,\n Record<string, Context>\n > = {}\n\n return {\n onPluginInit({ addPlugin }) {\n addPlugin(\n // eslint-disable-next-line\n useOnResolve(({ info, context }) => {\n if (\n context &&\n typeof context === 'object' &&\n context[tracingSpanSymbol]\n ) {\n tracer.getActiveSpanProcessor()\n const rootContextSpanId =\n context[tracingSpanSymbol].spanContext().spanId\n\n const { fieldName, returnType, parentType, path } = info\n\n const previousResolverSpanKey =\n path.prev && getResolverSpanKey(path.prev)\n\n let ctx: Context | null = null\n\n if (\n previousResolverSpanKey &&\n resolverContextsByRootSpans[rootContextSpanId][\n previousResolverSpanKey\n ]\n ) {\n ctx =\n resolverContextsByRootSpans[rootContextSpanId][\n previousResolverSpanKey\n ]\n } else {\n ctx = openTelTrace.setSpan(\n openTelContext.active(),\n context[tracingSpanSymbol]\n )\n\n resolverContextsByRootSpans[rootContextSpanId] =\n resolverContextsByRootSpans[rootContextSpanId] ?? {}\n }\n\n const resolverIndexInList = Number.isInteger(path.prev?.key)\n ? `[${path.prev?.key}]`\n : ''\n\n const resolverSpan = tracer.startSpan(\n `${parentType.toString()}.${fieldName}${resolverIndexInList}`,\n {\n attributes: {\n [AttributeName.RESOLVER_FIELD_NAME]: fieldName,\n [AttributeName.RESOLVER_TYPE_NAME]: parentType.toString(),\n [AttributeName.RESOLVER_RESULT_TYPE]: returnType.toString(),\n 'meta.span.path': getResolverSpanKey(path),\n },\n },\n ctx\n )\n\n const resolverCtx = openTelTrace.setSpan(ctx, resolverSpan)\n\n resolverContextsByRootSpans[rootContextSpanId][\n getResolverSpanKey(path)\n ] = resolverCtx\n\n return ({ result }) => {\n if (result instanceof Error) {\n resolverSpan.setAttributes({\n error: true,\n 'exception.category':\n AttributeName.RESOLVER_EXECUTION_ERROR,\n 'exception.message': result.message,\n 'exception.type': result.name,\n })\n resolverSpan.recordException(result)\n }\n\n resolverSpan.end()\n }\n }\n\n return () => {}\n })\n )\n },\n onExecute({ args, extendContext }) {\n const operationType = args.document.definitions\n .filter((def) => def.kind === Kind.OPERATION_DEFINITION)\n .map((def) => (def as OperationDefinitionNode).operation)?.[0]\n\n // Span name according to Semantic Conventions\n // https://github.com/open-telemetry/semantic-conventions\n let spanName = 'GraphQL Operation'\n\n if (operationType && args.operationName) {\n spanName = `${operationType} ${args.operationName}`\n } else if (operationType && !args.operationName) {\n spanName = operationType\n }\n\n const executionSpan = tracer.startSpan(spanName, {\n kind: SpanKind.SERVER,\n attributes: {\n [AttributeName.EXECUTION_OPERATION_NAME]:\n args.operationName ?? undefined,\n [AttributeName.EXECUTION_OPERATION_TYPE]:\n operationType ?? undefined,\n [AttributeName.EXECUTION_OPERATION_DOCUMENT]: print(args.document),\n },\n })\n\n const executeContext = openTelContext.active()\n\n const resultCbs: OnExecuteHookResult<PluginContext> = {\n onExecuteDone({ result }) {\n if (isAsyncIterable(result)) {\n executionSpan.end()\n // eslint-disable-next-line no-console\n console.warn(\n `Plugin \"newrelic\" encountered a AsyncIterator which is not supported yet, so tracing data is not available for the operation.`\n )\n\n return\n }\n\n const logRecord: LogRecord = {\n context: executeContext,\n attributes: {\n 'service.name': 'faststore-api',\n 'service.version': '1.12.38',\n 'service.name_and_version': 'faststore-api@1.12.38',\n 'vtex.search_index': 'faststore_beta_api',\n [AttributeName.EXECUTION_OPERATION_NAME]:\n args.operationName ?? undefined,\n [AttributeName.EXECUTION_OPERATION_DOCUMENT]: print(\n args.document\n ),\n [AttributeName.EXECUTION_VARIABLES]: JSON.stringify(\n args.variableValues ?? {}\n ),\n },\n }\n\n if (\n typeof result.data !== 'undefined' &&\n !(result.errors && result.errors.length > 0)\n ) {\n logRecord.severityNumber = SeverityNumber.INFO\n logRecord.severityText = 'Info'\n logRecord.attributes![AttributeName.EXECUTION_RESULT] =\n JSON.stringify(result)\n }\n\n if (result.errors && result.errors.length > 0) {\n logRecord.severityNumber = SeverityNumber.ERROR\n logRecord.severityText = 'Error'\n logRecord.attributes![AttributeName.EXECUTION_ERROR] =\n JSON.stringify(result.errors)\n\n executionSpan.setAttributes({\n error: true,\n 'exception.category': AttributeName.EXECUTION_ERROR,\n 'exception.message': JSON.stringify(result.errors),\n })\n }\n\n if (experimentalSendLogs) {\n logger.emit(logRecord)\n }\n\n executionSpan.end()\n },\n }\n\n extendContext({\n [tracingSpanSymbol]: executionSpan,\n })\n\n return resultCbs\n },\n }\n }\n}\n","import {\n BasicTracerProvider,\n SimpleSpanProcessor,\n ConsoleSpanExporter,\n} from '@opentelemetry/sdk-trace-base'\nimport { Resource } from '@opentelemetry/resources'\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'\nimport {\n LoggerProvider,\n SimpleLogRecordProcessor,\n ConsoleLogRecordExporter,\n} from '@opentelemetry/sdk-logs'\nimport { OTLPLogsExporter } from '@opentelemetry/exporter-logs-otlp-grpc'\n\nimport type { Options } from '../'\nimport { getFaststoreTelemetryPlugin } from './useFaststoreTelemetry'\nimport packageJson from '../../package.json'\n\nexport type GetTelemetryOptions = {\n mode?: 'verbose' | 'dev'\n experimentalSendLogs?: boolean\n}\n\nconst FASTSTORE_API_VERSION = packageJson.version\n\n// TODO: These urls are hardcoded for now, but they should be configurable via ENV variables\n// They are only acessible from within the VTEX network, so they are not a security risk\nconst TRACE_COLLECTOR_URL = 'opentelemetry-collector.vtex.systems'\nconst TRACE_COLLECTOR_URL_DEV = 'opentelemetry-collector-beta.vtex.systems'\nconst LOG_COLLECTOR_URL = 'opentelemetry-collector.vtex.systems'\n\nexport function getTelemetry(\n APIOptions: Options,\n telemetryOptions?: GetTelemetryOptions\n) {\n const honeycombCollectorOptions = {\n url:\n telemetryOptions?.mode === 'dev'\n ? TRACE_COLLECTOR_URL_DEV\n : TRACE_COLLECTOR_URL,\n }\n\n const openSearchCollectorOptions = {\n url: LOG_COLLECTOR_URL,\n }\n\n // Create a new tracer provider\n const tracerProvider = new BasicTracerProvider({\n resource: new Resource({\n 'service.name': 'faststore-api',\n 'service.version': FASTSTORE_API_VERSION,\n 'service.name_and_version': `faststore-api@${FASTSTORE_API_VERSION}`,\n platform: APIOptions.platform,\n [`${APIOptions.platform}.account`]: APIOptions.account,\n [`${APIOptions.platform}.environment`]: APIOptions.environment,\n // TODO: include the following properties in the logs\n // [`${APIOptions.platform}.options.hideUnavailableItems`]:\n // APIOptions.hideUnavailableItems,\n // [`${APIOptions.platform}.flags.enableOrderFormSync`]:\n // APIOptions.flags?.enableOrderFormSync,\n // channel: APIOptions.channel,\n locale: APIOptions.locale,\n }),\n })\n\n const loggerProvider = new LoggerProvider()\n\n // Create trace exporter\n const honeycombExporter = new OTLPTraceExporter(honeycombCollectorOptions)\n\n // Create log exporter\n const openSearchExporter = new OTLPLogsExporter(openSearchCollectorOptions)\n\n // Set up a span processor to export spans to Honeycomb\n const honeyCombSpanProcessor = new SimpleSpanProcessor(honeycombExporter)\n\n // Set up a log record processor to export spans to OpenSearch\n const openSearchLogProcessor = new SimpleLogRecordProcessor(\n openSearchExporter\n )\n\n // Register the span processor with the tracer provider\n tracerProvider.addSpanProcessor(honeyCombSpanProcessor)\n\n // Register the log record processor with the log provider\n loggerProvider.addLogRecordProcessor(openSearchLogProcessor)\n\n if (\n telemetryOptions?.mode === 'verbose' ||\n telemetryOptions?.mode === 'dev'\n ) {\n // Set up a console exporter for verbose mode\n const consoleExporter = new ConsoleSpanExporter()\n const verboseTraceProcessor = new SimpleSpanProcessor(consoleExporter)\n\n // Set up processors for verbose mode\n const consoleLogExporter = new ConsoleLogRecordExporter()\n const veboseLogRecordExporter = new SimpleLogRecordProcessor(\n consoleLogExporter\n )\n\n tracerProvider.addSpanProcessor(verboseTraceProcessor)\n loggerProvider.addLogRecordProcessor(veboseLogRecordExporter)\n }\n\n const useFaststoreTelemetry = getFaststoreTelemetryPlugin(\n // The @opentelemetry/sdk-trace-base was renamed from @opentelemetry/tracing but the\n // envelop plugin doesn't support this change yet. This causes the class type to be incompatible,\n // even if they are the same. https://github.com/n1ru4l/envelop/issues/1610\n tracerProvider as any,\n loggerProvider,\n 'faststore-api',\n telemetryOptions?.experimentalSendLogs ?? false\n )\n\n return { useFaststoreTelemetry }\n}\n","import { makeExecutableSchema } from '@graphql-tools/schema'\n\nimport {\n getContextFactory as getContextFactoryVTEX,\n getResolvers as getResolversVTEX,\n} from './platforms/vtex'\nimport { typeDefs } from './typeDefs'\nimport cacheControlDirective from './directives/cacheControl'\nimport type { Directive } from './directives'\nimport type { Options as OptionsVTEX } from './platforms/vtex'\n\nexport * from './__generated__/schema'\nexport * from './platforms/errors'\nexport * from './telemetry'\nexport { stringify as stringifyCacheControl } from './directives/cacheControl'\nexport type { CacheControl } from './directives/cacheControl'\n\nexport type Options = OptionsVTEX\n\nconst platforms = {\n vtex: {\n getResolvers: getResolversVTEX,\n getContextFactory: getContextFactoryVTEX,\n },\n}\n\nconst directives: Directive[] = [\n cacheControlDirective\n]\n\nexport const getTypeDefs = () => [typeDefs, ...directives.map(d => d.typeDefs)]\n\nexport const getResolvers = (options: Options) =>\n platforms[options.platform].getResolvers(options)\n\nexport const getContextFactory = (options: Options) =>\n platforms[options.platform].getContextFactory(options)\n\nexport const getSchema = async (options: Options) => {\n const schema = makeExecutableSchema({\n resolvers: getResolvers(options),\n typeDefs: getTypeDefs(),\n })\n\n return directives.reduce((s, d) => d.transformer(s), schema)\n}\n\nexport * from './platforms/vtex/resolvers/root'\nexport { Resolver } from './platforms/vtex'\n"],"names":["USER_AGENT","packageJson","name","version","fetchAPI","info","init","response","fetch","headers","ok","status","json","undefined","console","error","text","Error","BASE_INIT","method","VtexCommerce","account","environment","incrementAddress","ctx","base","catalog","salesChannel","sc","brand","list","category","tree","depth","portal","pagetype","slug","products","crossselling","type","productId","groupByProduct","params","URLSearchParams","storage","channel","toString","checkout","simulation","args","body","JSON","stringify","shippingData","id","index","deliveryMode","selectedAddresses","setDeliveryWindow","deliveryWindow","startDateUtc","startDate","endDateUtc","endDate","mappedBody","logisticsInfo","Array","from","length","_","itemIndex","selectedDeliveryChannel","deliveryChannel","selectedSla","deliveryMethod","clearAddressIfPostalCodeNotFound","cookie","orderForm","refreshOutdatedData","requestInit","updateOrderFormItems","orderItems","allowOutdatedData","shouldSplitItem","items","noSplitItem","setCustomData","appId","key","value","region","postalCode","geoCoordinates","country","append","longitude","latitude","url","address","session","search","set","subscribeToNewsletter","data","isNewsletterOptIn","POLICY_KEY","REGION_KEY","CHANNEL_KEYS","Set","IntelligentSearch","hideUnavailableItems","getPolicyFacet","getRegionFacet","regionId","seller","sellerRegionId","Buffer","facet","addDefaultFacets","facets","withDefaultFacets","filter","has","policyFacet","find","regionFacet","push","query","page","count","sort","selectedFacets","fuzzy","locale","pathname","map","join","suggestedTerms","topSearches","THIRTY_MINUTES_S","ONE_YEAR_S","randomUUID","Math","random","toFixed","timelapsed","past","Date","now","createId","expiresSecond","payload","createdAt","user","anonymous","SP","sendEvent","options","agent","getClients","commerce","sp","getSalesChannelLoader","clients","loader","channels","Promise","all","DataLoader","CONCURRENT_REQUESTS_MAX","getSimulationLoader","limit","pLimit","simulationArgs","allItems","reduce","acc","flat","simulated","item","requestIndex","fill","itemsIndices","curr","__","slice","Boolean","limited","maxBatchSize","sanitizeHtml","dirty","sanitizeHtmlLib","sanitizeProduct","product","description","enhanceSku","isVariantOf","FastStoreError","constructor","extensions","message","BadRequestError","NotFoundError","isFastStoreError","isNotFoundError","isBadRequestError","getSkuLoader","skuIds","skuBySkuId","sku","itemId","skus","skuId","missingSkus","collectionPageTypes","isCollectionPageType","x","pageType","toLowerCase","getCollectionLoader","slugs","batch","getLoaders","skuLoader","simulationLoader","collectionLoader","salesChannelLoader","inStock","offer","AvailableQuantity","price","spotPrice","sellingPrice","Price","availability","available","bestOfferFirst","a","b","inStockOrderFormItem","itemAvailability","StoreAggregateOffer","highPrice","offers","availableOffers","highOffer","lowPrice","lowOffer","offerCount","priceCurrency","loaders","load","CurrencyCode","StoreAggregateRating","ratingValue","reviewCount","to","removeDiacritics","str","newStr","i","replace","RegExp","charAt","slugifySpecialCharacters","slugify","noCommas","replaced","slugified","isBrand","isCollection","slugifyRoot","root","URL","StoreCollection","seo","title","metaTagDescription","Title","MetaTagDescription","level","meta","split","segment","breadcrumbList","segments","collections","s","collection","itemListElement","position","numberOfItems","FACET_CROSS_SELLING_MAP","buy","view","similars","viewAndBought","accessories","suggestions","transformSelectedFacet","parseRange","range","splitted","Number","isNaN","isCrossSelling","findCrossSelling","filtered","isArray","findSlug","findSkuId","findLocale","findChannel","min","array","cmp","best","StoreFacet","__resolveType","StoreFacetBoolean","label","values","localeCompare","StoreFacetRange","searchArgs","selectedRange","globalMin","selected","absolute","max","globalMax","StoreFacetValueBoolean","quantity","Id","ChannelMarshal","parse","channelString","parsedChannel","mutateChannelContext","mutateLocaleContext","md5","crypto","createHash","update","digest","VALUE_REFERENCES","attachment","specification","attachmentToPropertyValue","content","valueReference","getPropertyId","shouldUpdateShippingData","hasSessionPostalCodeOrGeoCoordinates","updateShipping","addressChanged","hasItems","selectedAddress","checkPostalCode","checkGeoCoordinates","checkAddressType","addressType","shouldUpdateDeliveryInfo","some","slas","checkDeliveryChannel","checkDeliveryMethod","sla","availableDeliveryWindows","window","getAddressOrderForm","availableAddresses","addressMatcher","createNewAddress","addressSession","city","state","street","number","neighborhood","complement","reference","isAttachment","getId","itemOffered","identifier","additionalProperty","orderFormItemToOffer","listPrice","image","attachments","offerToOrderItemInput","groupById","get","Map","equals","storeOrder","pick","orderFormItems","storeOrderItems","acceptedOffer","isSameOrder","orderNumber","orderFormId","orderItemsAreSync","deepEquals","joinItems","form","itemsById","Object","totalPrice","priceDefinition","total","orderFormToCart","order","messages","toUpperCase","getOrderFormEtag","setOrderFormEtag","err","isOrderFormStale","faststoreData","customData","customApps","app","oldEtag","fields","cartEtag","newEtag","getOrderForm","updateOrderFormShippingData","oldAddress","hasDeliveryWindow","validateCart","cart","isStale","newOrderForm","then","browserItemsById","originItemsById","originItems","entries","browserItems","itemsToAdd","itemsToUpdate","maybeOriginItem","forEach","head","tail","totalQuantity","itemsToDelete","flatMap","changes","updatedOrderForm","validateSession","oldSession","String","regionData","sessionData","resolve","catch","profile","namespaces","store","sellers","newSession","currency","code","currencyCode","symbol","currencySymbol","countryCode","person","email","givenName","firstName","familyName","lastName","Mutation","ObjectOrString","GraphQLScalarType","parseValue","toObjectOrString","serialize","parseLiteral","ast","kind","Kind","STRING","getValueAsObjectOrString","e","isSearchItem","isOrderFormItem","StoreOffer","priceValidUntil","PriceValidUntil","itemCondition","sellerId","ListPrice","attachmentsValues","canonicalFromProduct","linkText","enhanceCommercialOffer","DEFAULT_IMAGE","imageText","imageUrl","getSlug","link","getPath","nonEmptyArray","StoreProduct","productID","productName","canonical","categories","reverse","categoryPath","images","alternateName","gtin","referenceId","Value","review","aggregateRating","commertialOffer","variations","specifications","propertyValueSpecifications","propertyValueAttachments","releaseDate","BLOCKED_SPECIFICATIONS","StoreProductGroup","hasVariant","productGroupID","skuVariants","specificationGroups","specificationGroup","StorePropertyValue","propertyID","SORT_MAP","price_desc","price_asc","orders_desc","name_desc","name_asc","release_desc","discount_desc","score_desc","pickBestSku","offersBySku","o1","o2","isValidSkuId","Query","locator","pop","startsWith","route","first","after","maybeAfter","term","crossSelling","ceil","productSearchPromise","allProducts","pageInfo","hasNextPage","pagination","hasPreviousPage","before","startCursor","endCursor","recordsFiltered","totalCount","edges","node","cursor","allCollections","brands","dfs","child","children","isActive","validCollections","shipping","redirect","StoreReview","reviewRating","bestRating","author","isRootFacet","StoreSearchResult","terms","searches","productSearchResult","maybeSku","is","isCollectionPage","filteredFacets","metadata","isTermMisspelled","correction","misspelled","logicalOperator","operator","StoreSeo","titleTemplate","units","isUnit","includes","localizedEstimates","bd","other","d","h","m","getLocalizedEstimates","estimate","amount","unit","isAmountNumber","isUnitValid","amountKey","ShippingSLA","carrier","friendlyName","shippingEstimate","findSkuVariantImage","availableImages","imageProperties","imageLabel","createSlugsMap","variants","dominantVariantName","baseSlug","slugsMap","variant","skuSpecificationProperties","dominantNameValue","variationDetails","skuVariantKey","property","shouldIgnore","getActiveSkuVariations","activeVariations","variation","getVariantsByName","skuSpecifications","field","originalName","compare","sortVariants","variantsByName","sortedVariants","variantProperty","getFormattedVariations","dominantVariantValue","previouslySeenPropertyValues","variantImageToUse","dominantVariantEntry","matchesDominantVariant","nameValueIdentifier","add","formattedVariant","src","alt","variationProperty","SkuVariants","allVariantsByName","availableVariations","activeDominantVariationValue","filteredFormattedVariations","Resolvers","getContextFactory","flags","getResolvers","typeDefs","Address","Brand","Breadcrumb","Collection","Facet","Image","PageInfo","Product","Seo","Offer","AggregateRating","Review","Author","ProductGroup","Organization","AggregateOffer","Order","Cart","Status","PropertyValue","Person","Session","Newsletter","ShippingSimulation","print","NAME","scope","sMaxAge","staleWhileRevalidate","minScope","directive","transformer","schema","mapSchema","MapperKind","OBJECT_FIELD","fieldConfig","cacheControl","getDirective","resolver","obj","AttributeName","tracingSpanSymbol","Symbol","getResolverSpanKey","path","nodes","currentPath","isInteger","prev","getFaststoreTelemetryPlugin","tracingProvider","loggerProvider","serviceName","experimentalSendLogs","useFaststoreTelemetry","tracer","getTracer","logger","getLogger","resolverContextsByRootSpans","onPluginInit","addPlugin","useOnResolve","context","getActiveSpanProcessor","rootContextSpanId","spanContext","spanId","fieldName","returnType","parentType","previousResolverSpanKey","openTelTrace","setSpan","openTelContext","active","resolverIndexInList","resolverSpan","startSpan","attributes","RESOLVER_FIELD_NAME","RESOLVER_TYPE_NAME","RESOLVER_RESULT_TYPE","resolverCtx","result","setAttributes","RESOLVER_EXECUTION_ERROR","recordException","end","onExecute","extendContext","operationType","document","definitions","def","OPERATION_DEFINITION","operation","spanName","operationName","executionSpan","SpanKind","SERVER","EXECUTION_OPERATION_NAME","EXECUTION_OPERATION_TYPE","EXECUTION_OPERATION_DOCUMENT","executeContext","resultCbs","onExecuteDone","isAsyncIterable","warn","logRecord","EXECUTION_VARIABLES","variableValues","errors","severityNumber","SeverityNumber","INFO","severityText","EXECUTION_RESULT","ERROR","EXECUTION_ERROR","emit","FASTSTORE_API_VERSION","TRACE_COLLECTOR_URL","TRACE_COLLECTOR_URL_DEV","LOG_COLLECTOR_URL","getTelemetry","APIOptions","telemetryOptions","honeycombCollectorOptions","mode","openSearchCollectorOptions","tracerProvider","BasicTracerProvider","resource","Resource","platform","LoggerProvider","honeycombExporter","OTLPTraceExporter","openSearchExporter","OTLPLogsExporter","honeyCombSpanProcessor","SimpleSpanProcessor","openSearchLogProcessor","SimpleLogRecordProcessor","addSpanProcessor","addLogRecordProcessor","consoleExporter","ConsoleSpanExporter","verboseTraceProcessor","consoleLogExporter","ConsoleLogRecordExporter","veboseLogRecordExporter","platforms","vtex","getResolversVTEX","getContextFactoryVTEX","directives","cacheControlDirective","getTypeDefs","getSchema","makeExecutableSchema","resolvers"],"mappings":"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"}