@faststore/core 3.99.1 → 4.0.0-dev.1

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.
Files changed (543) hide show
  1. package/.turbo/turbo-generate.log +29 -0
  2. package/.turbo/turbo-test.log +47 -16
  3. package/@generated/cached-operations.json +24 -0
  4. package/@generated/gql.ts +134 -210
  5. package/@generated/graphql.ts +1628 -3037
  6. package/@generated/index.ts +1 -1
  7. package/@generated/persisted-documents.json +1 -1
  8. package/@generated/schema.graphql +1854 -1743
  9. package/CHANGELOG.md +11 -5
  10. package/README.md +2 -1
  11. package/api/index.ts +6 -7
  12. package/cms/faststore/base.jsonc +1 -1
  13. package/cms/faststore/components/cms_component__alert.jsonc +5 -1
  14. package/cms/faststore/components/cms_component__bannernewsletter.jsonc +5 -1
  15. package/cms/faststore/components/cms_component__bannertext.jsonc +5 -1
  16. package/cms/faststore/components/cms_component__breadcrumb.jsonc +16 -4
  17. package/cms/faststore/components/cms_component__cartsidebar.jsonc +21 -1
  18. package/cms/faststore/components/cms_component__children.jsonc +5 -1
  19. package/cms/faststore/components/cms_component__crosssellingshelf.jsonc +5 -1
  20. package/cms/faststore/components/cms_component__emptystate.jsonc +8 -3
  21. package/cms/faststore/components/cms_component__footer.jsonc +9 -3
  22. package/cms/faststore/components/cms_component__hero.jsonc +5 -1
  23. package/cms/faststore/components/cms_component__incentives.jsonc +5 -1
  24. package/cms/faststore/components/cms_component__navbar.jsonc +139 -1
  25. package/cms/faststore/components/cms_component__newsletter.jsonc +5 -1
  26. package/cms/faststore/components/cms_component__productdetails.jsonc +33 -1
  27. package/cms/faststore/components/cms_component__productgallery.jsonc +113 -15
  28. package/cms/faststore/components/cms_component__productshelf.jsonc +5 -1
  29. package/cms/faststore/components/cms_component__producttiles.jsonc +5 -1
  30. package/cms/faststore/components/cms_component__regionbar.jsonc +5 -1
  31. package/cms/faststore/components/cms_component__regionmodal.jsonc +5 -1
  32. package/cms/faststore/components/cms_component__regionpopover.jsonc +5 -1
  33. package/cms/faststore/components/cms_component__scrolltotopbutton.jsonc +29 -0
  34. package/cms/faststore/components/cms_component__search.jsonc +5 -1
  35. package/cms/faststore/content-types.json +115 -0
  36. package/cms/faststore/pages/cms_content_type__globalsections.jsonc +52 -0
  37. package/cms/faststore/pages/cms_content_type__home.jsonc +6 -0
  38. package/cms/faststore/pages/cms_content_type__landingpage.jsonc +8 -1
  39. package/cms/faststore/pages/cms_content_type__pdp.jsonc +6 -0
  40. package/cms/faststore/pages/cms_content_type__plp.jsonc +17 -0
  41. package/cms/faststore/pages/cms_content_type__search.jsonc +17 -0
  42. package/cms/faststore/schema.json +547 -43
  43. package/cms/faststore/sections.json +330 -21
  44. package/discovery.config.default.js +49 -3
  45. package/next-env.d.ts +2 -1
  46. package/next.config.js +48 -26
  47. package/package.json +47 -60
  48. package/public/icons.svg +5 -1
  49. package/scripts/i18n.js +76 -0
  50. package/src/components/account/MyAccountDrawer/OrganizationDrawer/OrganizationDrawer.tsx +2 -1
  51. package/src/components/account/MyAccountDrawer/OrganizationDrawer/section.module.scss +25 -24
  52. package/src/components/account/MyAccountDrawer/ProfileSummary/profile-summary.scss +8 -6
  53. package/src/components/account/MyAccountLayout/styles.scss +16 -12
  54. package/src/components/account/MyAccountMenu/styles.scss +21 -22
  55. package/src/components/account/MyAccountUserDetails/styles.module.scss +4 -2
  56. package/src/components/account/components/MyAccountAccordion/styles.scss +4 -2
  57. package/src/components/account/components/MyAccountHeader/styles.scss +3 -1
  58. package/src/components/account/components/MyAccountTable/styles.scss +6 -4
  59. package/src/components/account/orders/MyAccountListOrders/MyAccountFilterSlider/section.module.scss +21 -19
  60. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/MyAccountListOrdersTable.tsx +3 -1
  61. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/styles.scss +5 -3
  62. package/src/components/account/orders/MyAccountListOrders/styles.module.scss +25 -22
  63. package/src/components/account/orders/MyAccountOrderDetails/MyAccountBudgetsCard/styles.scss +7 -5
  64. package/src/components/account/orders/MyAccountOrderDetails/MyAccountDeliveryOptionAccordion/styles.scss +7 -5
  65. package/src/components/account/orders/MyAccountOrderDetails/MyAccountMoreInformationCard/styles.scss +3 -1
  66. package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActionModal/styles.module.scss +8 -6
  67. package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActions/styles.scss +3 -1
  68. package/src/components/account/orders/MyAccountOrderDetails/MyAccountStatusCard/styles.scss +8 -6
  69. package/src/components/account/orders/MyAccountOrderDetails/section.module.scss +36 -43
  70. package/src/components/account/profile/profile.module.scss +3 -1
  71. package/src/components/account/section.module.scss +3 -1
  72. package/src/components/account/security/styles.module.scss +14 -8
  73. package/src/components/cart/CartSidebar/CartSidebar.tsx +10 -1
  74. package/src/components/cart/CartSidebar/section.module.scss +19 -17
  75. package/src/components/cart/EmptyCart/EmptyCart.tsx +12 -4
  76. package/src/components/cms/GlobalSections.tsx +12 -12
  77. package/src/components/cms/RenderSections.tsx +10 -2
  78. package/src/components/cms/plp/Components.ts +9 -0
  79. package/src/components/common/Alert/section.module.scss +10 -5
  80. package/src/components/common/PreviewTag/section.module.scss +48 -40
  81. package/src/components/common/Toast/section.module.scss +4 -2
  82. package/src/components/localization/LocalizationSelector/LocalizationSelector.tsx +320 -0
  83. package/src/components/localization/LocalizationSelector/index.ts +1 -0
  84. package/src/components/localization/LocalizationSelector/section.module.scss +18 -0
  85. package/src/components/localization/index.ts +1 -0
  86. package/src/components/navigation/Navbar/Navbar.tsx +49 -1
  87. package/src/components/navigation/NavbarSlider/NavbarSlider.tsx +19 -1
  88. package/src/components/navigation/NavbarSlider/section.module.scss +12 -10
  89. package/src/components/product/OutOfStock/OutOfStock.tsx +6 -1
  90. package/src/components/product/ProductCard/ProductCard.tsx +1 -1
  91. package/src/components/region/RegionModal/RegionModal.tsx +4 -1
  92. package/src/components/region/RegionModal/section.module.scss +10 -8
  93. package/src/components/region/RegionPopover/RegionPopover.tsx +6 -5
  94. package/src/components/region/RegionPopover/section.module.scss +9 -7
  95. package/src/components/region/RegionSlider/RegionSlider.tsx +5 -2
  96. package/src/components/region/RegionSlider/section.module.scss +16 -13
  97. package/src/components/search/Filter/FilterDeliveryMethodFacet.tsx +5 -5
  98. package/src/components/search/Filter/FilterDesktop.tsx +13 -4
  99. package/src/components/search/Filter/FilterSlider.tsx +18 -6
  100. package/src/components/search/Filter/section.module.scss +21 -19
  101. package/src/components/search/SearchDropdown/SearchDropdown.tsx +9 -7
  102. package/src/components/search/SearchHistory/SearchHistory.tsx +7 -2
  103. package/src/components/search/SearchInput/SearchInput.tsx +21 -8
  104. package/src/components/search/SearchProductItem/SearchProductItem.tsx +10 -3
  105. package/src/components/search/SearchTop/SearchTop.tsx +30 -24
  106. package/src/components/search/Sort/Sort.tsx +17 -19
  107. package/src/components/sections/Alert/Alert.tsx +6 -1
  108. package/src/components/sections/BannerNewsletter/section.module.scss +6 -4
  109. package/src/components/sections/BannerText/section.module.scss +5 -3
  110. package/src/components/sections/Breadcrumb/Breadcrumb.tsx +6 -2
  111. package/src/components/sections/Breadcrumb/section.module.scss +7 -5
  112. package/src/components/sections/EmptyState/section.module.scss +5 -3
  113. package/src/components/sections/Footer/Footer.tsx +1 -5
  114. package/src/components/sections/Footer/section.module.scss +10 -8
  115. package/src/components/sections/Hero/Hero.tsx +3 -1
  116. package/src/components/sections/Hero/section.module.scss +6 -4
  117. package/src/components/sections/Incentives/section.module.scss +5 -3
  118. package/src/components/sections/Navbar/Navbar.tsx +45 -0
  119. package/src/components/sections/Navbar/section.module.scss +34 -33
  120. package/src/components/sections/Newsletter/section.module.scss +10 -8
  121. package/src/components/sections/ProductDetails/ProductDetails.tsx +23 -1
  122. package/src/components/sections/ProductDetails/section.module.scss +32 -30
  123. package/src/components/sections/ProductGallery/EmptyGallery.tsx +13 -16
  124. package/src/components/sections/ProductGallery/section.module.scss +42 -39
  125. package/src/components/sections/ProductShelf/section.module.scss +22 -17
  126. package/src/components/sections/ProductTiles/section.module.scss +15 -13
  127. package/src/components/sections/RegionBar/section.module.scss +5 -3
  128. package/src/components/sections/ScrollToTopButton/ScrollToTopButton.tsx +4 -3
  129. package/src/components/sections/ScrollToTopButton/section.module.scss +4 -2
  130. package/src/components/templates/LandingPage/LandingPage.tsx +22 -16
  131. package/src/components/templates/ProductListingPage/ProductListing.tsx +1 -13
  132. package/src/components/templates/ProductListingPage/ProductListingPage.tsx +8 -3
  133. package/src/components/ui/Breadcrumb/Breadcrumb.tsx +14 -11
  134. package/src/components/ui/Button/ButtonSignIn/ButtonSignIn.tsx +2 -1
  135. package/src/components/ui/Button/ButtonSignIn/ButtonSignInFallback/ButtonSignInFallback.tsx +3 -1
  136. package/src/components/ui/Link/Link.tsx +19 -2
  137. package/src/components/ui/LinkButton/LinkButton.tsx +28 -0
  138. package/src/components/ui/LinkButton/index.ts +2 -0
  139. package/src/components/ui/LocalizationButton/LocalizationButton.tsx +124 -0
  140. package/src/components/ui/LocalizationButton/index.ts +1 -0
  141. package/src/components/ui/PickupPoints/PickupPointCards.tsx +2 -4
  142. package/src/components/ui/ProductComparison/ProductComparisonSidebar.tsx +34 -17
  143. package/src/components/ui/ProductDescription/ProductDescription.tsx +8 -3
  144. package/src/components/ui/ProductDetails/AddToCartLoadingSkeleton.tsx +6 -2
  145. package/src/components/ui/ProductDetails/ProductDetailsSettings.tsx +17 -5
  146. package/src/components/ui/ProductGallery/ProductGallery.tsx +7 -3
  147. package/src/components/ui/ProductGallery/ProductGalleryPage.tsx +1 -3
  148. package/src/components/ui/ShippingSimulation/ShippingSimulation.tsx +6 -1
  149. package/src/customizations/src/styles/custom-mixins.scss +0 -2
  150. package/src/experimental/index.ts +26 -0
  151. package/src/experimental/myAccountServerSideProps.ts +11 -2
  152. package/src/experimental/searchServerSideFunctions/getServerSideProps.ts +13 -7
  153. package/src/experimental/searchServerSideFunctions/getStaticProps.ts +5 -4
  154. package/src/instrumentation.ts +20 -6
  155. package/src/pages/404.tsx +5 -4
  156. package/src/pages/500.tsx +5 -4
  157. package/src/pages/[...slug].tsx +7 -4
  158. package/src/pages/[slug]/p.tsx +26 -8
  159. package/src/pages/_app.tsx +9 -1
  160. package/src/pages/api/fs/logout.ts +3 -2
  161. package/src/pages/api/graphql.ts +7 -23
  162. package/src/pages/api/preview.ts +21 -8
  163. package/src/pages/checkout.tsx +15 -5
  164. package/src/pages/index.tsx +18 -9
  165. package/src/pages/login.tsx +5 -4
  166. package/src/pages/pvt/account/403.tsx +11 -2
  167. package/src/pages/pvt/account/404.tsx +13 -3
  168. package/src/pages/pvt/account/index.tsx +6 -4
  169. package/src/pages/pvt/account/orders/[id].tsx +11 -3
  170. package/src/pages/pvt/account/orders/index.tsx +11 -3
  171. package/src/pages/pvt/account/profile.tsx +11 -2
  172. package/src/pages/pvt/account/security.tsx +11 -2
  173. package/src/pages/pvt/account/user-details.tsx +11 -2
  174. package/src/pages/s.tsx +26 -6
  175. package/src/proxy.ts +154 -0
  176. package/src/sdk/account/refreshToken.ts +4 -4
  177. package/src/sdk/account/useReorder.ts +8 -2
  178. package/src/sdk/analytics/platform/vtex/search.ts +3 -2
  179. package/src/sdk/cart/redirectToCheckout.ts +14 -8
  180. package/src/sdk/cart/useCheckoutButton.ts +7 -1
  181. package/src/sdk/deliveryPromise/useDeliveryPromise.ts +10 -18
  182. package/src/sdk/graphql/request.ts +102 -50
  183. package/src/sdk/localization/bindingSelector.ts +91 -0
  184. package/src/sdk/localization/index.ts +4 -0
  185. package/src/sdk/localization/match-url.ts +64 -0
  186. package/src/sdk/localization/types.ts +31 -0
  187. package/src/sdk/localization/useBindingSelector.ts +183 -0
  188. package/src/sdk/localization/useLocaleValidation.ts +49 -0
  189. package/src/sdk/localization/useLocalizationConfig.tsx +160 -0
  190. package/src/sdk/offer/fetcher.ts +3 -2
  191. package/src/sdk/product/useLocalizedVariables.ts +1 -1
  192. package/src/sdk/product/usePageProductsQuery.ts +2 -2
  193. package/src/sdk/product/useProductGalleryQuery.ts +1 -2
  194. package/src/sdk/product/useProductLink.ts +3 -1
  195. package/src/sdk/search/formatSearchPath.ts +28 -3
  196. package/src/sdk/search/state.ts +22 -13
  197. package/src/sdk/search/useSearchBase.ts +10 -0
  198. package/src/sdk/search/useSearchHistory.ts +41 -7
  199. package/src/sdk/session/index.ts +21 -3
  200. package/src/sdk/shipping/useShippingSimulation.ts +10 -2
  201. package/src/sdk/tsconfig.json +6 -0
  202. package/src/sdk/ui/useLink.ts +48 -0
  203. package/src/server/cms/global.ts +40 -0
  204. package/src/server/cms/index.ts +18 -10
  205. package/src/server/cms/pdp.ts +1 -0
  206. package/src/server/cms/plp.ts +3 -0
  207. package/src/server/content/service.ts +36 -24
  208. package/src/server/content/types.ts +10 -3
  209. package/src/server/index.ts +27 -20
  210. package/src/server/options.ts +27 -2
  211. package/src/styles/global/index.scss +10 -7
  212. package/src/styles/main.scss +3 -3
  213. package/src/typings/locales.ts +41 -0
  214. package/src/utils/fetchProductGallerySSR.ts +3 -1
  215. package/src/utils/getBaseDomain.ts +2 -1
  216. package/src/utils/getRequestHostname.ts +26 -0
  217. package/src/utils/globalSettings.ts +11 -0
  218. package/src/utils/localization/bindingPaths.ts +337 -0
  219. package/src/utils/localization/validateLocaleForHostname.ts +69 -0
  220. package/src/utils/localization/withLocaleValidation.ts +36 -0
  221. package/src/utils/utilities.ts +22 -0
  222. package/test/pages/api/preview.test.ts +93 -0
  223. package/test/sdk/localization/bindingSelector.test.ts +246 -0
  224. package/test/sdk/localization/store-url.browser.test.ts +140 -0
  225. package/test/sdk/localization/store-url.test.ts +96 -0
  226. package/test/sdk/localization/useBindingSelector.test.tsx +219 -0
  227. package/test/sdk/search/useSearchHistory.test.ts +222 -0
  228. package/test/server/cms/index.test.ts +3 -4
  229. package/test/server/content/service.test.ts +98 -0
  230. package/test/server/index.test.ts +10 -22
  231. package/test/utils/cookieCacheBusting.test.ts +32 -24
  232. package/test/utils/getRequestHostname.test.ts +71 -0
  233. package/test/utils/localization/bindingPaths.test.ts +706 -0
  234. package/test/utils/match-url.test.ts +388 -0
  235. package/tsconfig.json +11 -3
  236. package/vitest.config.ts +61 -0
  237. package/.next/BUILD_ID +0 -1
  238. package/.next/build-manifest.json +0 -197
  239. package/.next/cache/.tsbuildinfo +0 -1
  240. package/.next/cache/config.json +0 -7
  241. package/.next/cache/webpack/client-production/0.pack +0 -0
  242. package/.next/cache/webpack/client-production/index.pack +0 -0
  243. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  244. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  245. package/.next/cache/webpack/server-production/0.pack +0 -0
  246. package/.next/cache/webpack/server-production/index.pack +0 -0
  247. package/.next/export-marker.json +0 -1
  248. package/.next/images-manifest.json +0 -1
  249. package/.next/next-minimal-server.js.nft.json +0 -1
  250. package/.next/next-server.js.nft.json +0 -1
  251. package/.next/package.json +0 -1
  252. package/.next/prerender-manifest.js +0 -1
  253. package/.next/prerender-manifest.json +0 -1
  254. package/.next/react-loadable-manifest.json +0 -478
  255. package/.next/required-server-files.json +0 -1
  256. package/.next/routes-manifest.json +0 -1
  257. package/.next/server/chunks/1280.js +0 -1
  258. package/.next/server/chunks/1454.js +0 -1
  259. package/.next/server/chunks/1554.js +0 -1
  260. package/.next/server/chunks/1607.js +0 -1
  261. package/.next/server/chunks/1780.js +0 -1
  262. package/.next/server/chunks/1917.js +0 -1
  263. package/.next/server/chunks/1972.js +0 -1
  264. package/.next/server/chunks/2230.js +0 -1
  265. package/.next/server/chunks/2249.js +0 -1
  266. package/.next/server/chunks/2430.js +0 -1
  267. package/.next/server/chunks/2445.js +0 -12
  268. package/.next/server/chunks/2570.js +0 -1
  269. package/.next/server/chunks/2792.js +0 -1
  270. package/.next/server/chunks/2903.js +0 -1
  271. package/.next/server/chunks/294.js +0 -1
  272. package/.next/server/chunks/2955.js +0 -1
  273. package/.next/server/chunks/3006.js +0 -1
  274. package/.next/server/chunks/3029.js +0 -1
  275. package/.next/server/chunks/3060.js +0 -1
  276. package/.next/server/chunks/3408.js +0 -1
  277. package/.next/server/chunks/3483.js +0 -1
  278. package/.next/server/chunks/3683.js +0 -1
  279. package/.next/server/chunks/3836.js +0 -1
  280. package/.next/server/chunks/3890.js +0 -494
  281. package/.next/server/chunks/3922.js +0 -1
  282. package/.next/server/chunks/3945.js +0 -1
  283. package/.next/server/chunks/3951.js +0 -7
  284. package/.next/server/chunks/416.js +0 -1
  285. package/.next/server/chunks/4194.js +0 -1
  286. package/.next/server/chunks/4365.js +0 -1
  287. package/.next/server/chunks/4451.js +0 -1
  288. package/.next/server/chunks/4803.js +0 -1
  289. package/.next/server/chunks/4913.js +0 -13
  290. package/.next/server/chunks/5402.js +0 -1
  291. package/.next/server/chunks/5723.js +0 -13
  292. package/.next/server/chunks/5796.js +0 -1
  293. package/.next/server/chunks/6393.js +0 -1
  294. package/.next/server/chunks/6457.js +0 -6
  295. package/.next/server/chunks/6698.js +0 -1
  296. package/.next/server/chunks/6804.js +0 -6
  297. package/.next/server/chunks/6886.js +0 -1
  298. package/.next/server/chunks/7098.js +0 -9
  299. package/.next/server/chunks/7169.js +0 -1
  300. package/.next/server/chunks/7228.js +0 -1
  301. package/.next/server/chunks/7275.js +0 -1
  302. package/.next/server/chunks/7371.js +0 -1
  303. package/.next/server/chunks/7692.js +0 -1
  304. package/.next/server/chunks/7799.js +0 -1
  305. package/.next/server/chunks/8068.js +0 -1
  306. package/.next/server/chunks/83.js +0 -1
  307. package/.next/server/chunks/831.js +0 -1
  308. package/.next/server/chunks/8563.js +0 -1
  309. package/.next/server/chunks/8569.js +0 -1
  310. package/.next/server/chunks/8687.js +0 -1
  311. package/.next/server/chunks/870.js +0 -1
  312. package/.next/server/chunks/8737.js +0 -1
  313. package/.next/server/chunks/8741.js +0 -1
  314. package/.next/server/chunks/9088.js +0 -1
  315. package/.next/server/chunks/9117.js +0 -1
  316. package/.next/server/chunks/9237.js +0 -1
  317. package/.next/server/chunks/948.js +0 -3
  318. package/.next/server/chunks/9563.js +0 -3
  319. package/.next/server/chunks/9570.js +0 -1
  320. package/.next/server/chunks/9740.js +0 -1
  321. package/.next/server/chunks/9853.js +0 -1
  322. package/.next/server/chunks/9984.js +0 -1
  323. package/.next/server/chunks/9985.js +0 -1
  324. package/.next/server/chunks/9990.js +0 -1
  325. package/.next/server/chunks/ButtonSignIn.js +0 -1
  326. package/.next/server/chunks/Dropdown.js +0 -1
  327. package/.next/server/chunks/DropdownButton.js +0 -1
  328. package/.next/server/chunks/DropdownItem.js +0 -1
  329. package/.next/server/chunks/DropdownMenu.js +0 -1
  330. package/.next/server/chunks/FilterSkeleton.js +0 -1
  331. package/.next/server/chunks/ScrollToTopButton.js +0 -1
  332. package/.next/server/chunks/UIBannerText.js +0 -1
  333. package/.next/server/chunks/UISKUMatrixSidebar.js +0 -1
  334. package/.next/server/chunks/font-manifest.json +0 -1
  335. package/.next/server/edge-instrumentation.js +0 -2
  336. package/.next/server/edge-instrumentation.js.map +0 -1
  337. package/.next/server/edge-runtime-webpack.js +0 -157
  338. package/.next/server/edge-runtime-webpack.js.map +0 -1
  339. package/.next/server/font-manifest.json +0 -1
  340. package/.next/server/functions-config-manifest.json +0 -1
  341. package/.next/server/instrumentation.js +0 -1
  342. package/.next/server/instrumentation.js.nft.json +0 -1
  343. package/.next/server/middleware-build-manifest.js +0 -1
  344. package/.next/server/middleware-manifest.json +0 -6
  345. package/.next/server/middleware-react-loadable-manifest.js +0 -1
  346. package/.next/server/next-font-manifest.js +0 -1
  347. package/.next/server/next-font-manifest.json +0 -1
  348. package/.next/server/pages/404.js +0 -1
  349. package/.next/server/pages/404.js.nft.json +0 -1
  350. package/.next/server/pages/500.js +0 -1
  351. package/.next/server/pages/500.js.nft.json +0 -1
  352. package/.next/server/pages/[...slug].js +0 -1
  353. package/.next/server/pages/[...slug].js.nft.json +0 -1
  354. package/.next/server/pages/[slug]/p.js +0 -1
  355. package/.next/server/pages/[slug]/p.js.nft.json +0 -1
  356. package/.next/server/pages/_app.js +0 -1
  357. package/.next/server/pages/_app.js.nft.json +0 -1
  358. package/.next/server/pages/_document.js +0 -1
  359. package/.next/server/pages/_document.js.nft.json +0 -1
  360. package/.next/server/pages/_error.js +0 -1
  361. package/.next/server/pages/_error.js.nft.json +0 -1
  362. package/.next/server/pages/api/fs/logout.js +0 -1
  363. package/.next/server/pages/api/fs/logout.js.nft.json +0 -1
  364. package/.next/server/pages/api/graphql.js +0 -3
  365. package/.next/server/pages/api/graphql.js.nft.json +0 -1
  366. package/.next/server/pages/api/health/live.js +0 -1
  367. package/.next/server/pages/api/health/live.js.nft.json +0 -1
  368. package/.next/server/pages/api/health/ready.js +0 -1
  369. package/.next/server/pages/api/health/ready.js.nft.json +0 -1
  370. package/.next/server/pages/api/preview.js +0 -1
  371. package/.next/server/pages/api/preview.js.nft.json +0 -1
  372. package/.next/server/pages/checkout.js +0 -1
  373. package/.next/server/pages/checkout.js.nft.json +0 -1
  374. package/.next/server/pages/en-US/404.html +0 -42
  375. package/.next/server/pages/en-US/404.json +0 -1
  376. package/.next/server/pages/en-US/500.html +0 -42
  377. package/.next/server/pages/en-US/500.json +0 -1
  378. package/.next/server/pages/en-US/checkout.html +0 -42
  379. package/.next/server/pages/en-US/checkout.json +0 -1
  380. package/.next/server/pages/en-US/login.html +0 -42
  381. package/.next/server/pages/en-US/login.json +0 -1
  382. package/.next/server/pages/en-US/s.html +0 -42
  383. package/.next/server/pages/en-US/s.json +0 -1
  384. package/.next/server/pages/en-US.html +0 -42
  385. package/.next/server/pages/en-US.json +0 -1
  386. package/.next/server/pages/index.js +0 -1
  387. package/.next/server/pages/index.js.nft.json +0 -1
  388. package/.next/server/pages/login.js +0 -1
  389. package/.next/server/pages/login.js.nft.json +0 -1
  390. package/.next/server/pages/pvt/account/403.js +0 -1
  391. package/.next/server/pages/pvt/account/403.js.nft.json +0 -1
  392. package/.next/server/pages/pvt/account/404.js +0 -1
  393. package/.next/server/pages/pvt/account/404.js.nft.json +0 -1
  394. package/.next/server/pages/pvt/account/[...unknown].js +0 -1
  395. package/.next/server/pages/pvt/account/[...unknown].js.nft.json +0 -1
  396. package/.next/server/pages/pvt/account/orders/[id].js +0 -1
  397. package/.next/server/pages/pvt/account/orders/[id].js.nft.json +0 -1
  398. package/.next/server/pages/pvt/account/orders.js +0 -1
  399. package/.next/server/pages/pvt/account/orders.js.nft.json +0 -1
  400. package/.next/server/pages/pvt/account/profile.js +0 -1
  401. package/.next/server/pages/pvt/account/profile.js.nft.json +0 -1
  402. package/.next/server/pages/pvt/account/security.js +0 -1
  403. package/.next/server/pages/pvt/account/security.js.nft.json +0 -1
  404. package/.next/server/pages/pvt/account/user-details.js +0 -1
  405. package/.next/server/pages/pvt/account/user-details.js.nft.json +0 -1
  406. package/.next/server/pages/pvt/account.js +0 -1
  407. package/.next/server/pages/pvt/account.js.nft.json +0 -1
  408. package/.next/server/pages/s.js +0 -1
  409. package/.next/server/pages/s.js.nft.json +0 -1
  410. package/.next/server/pages-manifest.json +0 -1
  411. package/.next/server/webpack-api-runtime.js +0 -1
  412. package/.next/server/webpack-runtime.js +0 -1
  413. package/.next/static/NAuY8lqaeBBZf9CMZuYI2/_buildManifest.js +0 -1
  414. package/.next/static/NAuY8lqaeBBZf9CMZuYI2/_ssgManifest.js +0 -1
  415. package/.next/static/chunks/227-f109b24190a008ab.js +0 -8
  416. package/.next/static/chunks/2284.185d834d9829b652.js +0 -1
  417. package/.next/static/chunks/2851.e68ed3c8d27a032a.js +0 -1
  418. package/.next/static/chunks/2927.5a79877943a6bf7c.js +0 -1
  419. package/.next/static/chunks/3155.7bc4c730a79d9ecb.js +0 -1
  420. package/.next/static/chunks/3166-0b30a3887c0c346d.js +0 -1
  421. package/.next/static/chunks/3399.017c5209b74b0d97.js +0 -1
  422. package/.next/static/chunks/3483.ef53d632a763da3f.js +0 -1
  423. package/.next/static/chunks/349.b3b38e1e9f719dda.js +0 -1
  424. package/.next/static/chunks/3802.5e8b0b689eacc0f8.js +0 -1
  425. package/.next/static/chunks/3836.620480018be48233.js +0 -1
  426. package/.next/static/chunks/4436.e7af66f0b654ee36.js +0 -1
  427. package/.next/static/chunks/4803.b1920b6e3a1a6304.js +0 -1
  428. package/.next/static/chunks/5796.4351370494d8b8b6.js +0 -1
  429. package/.next/static/chunks/6393.55f991b1a6bb4fe7.js +0 -1
  430. package/.next/static/chunks/6700.b23221a57514e737.js +0 -1
  431. package/.next/static/chunks/6789.960162355435a81d.js +0 -1
  432. package/.next/static/chunks/7191-befad64ba238a817.js +0 -1
  433. package/.next/static/chunks/7692.8d5bf4560341a2f6.js +0 -1
  434. package/.next/static/chunks/7861.7f9f1a124a43da30.js +0 -6
  435. package/.next/static/chunks/8068.43663fb64762f7b8.js +0 -1
  436. package/.next/static/chunks/83.e0c16f0299b364a5.js +0 -1
  437. package/.next/static/chunks/8325.dabe9aa22eaadeed.js +0 -1
  438. package/.next/static/chunks/8587.53c8ce185ed1a2cb.js +0 -1
  439. package/.next/static/chunks/9173-e89da04079c35360.js +0 -2
  440. package/.next/static/chunks/9237.7555603703f81bf7.js +0 -1
  441. package/.next/static/chunks/9298-1d1ed0a54133cb59.js +0 -28
  442. package/.next/static/chunks/9399.d116a7fd62024783.js +0 -1
  443. package/.next/static/chunks/941.3e2782ab9c490eb0.js +0 -1
  444. package/.next/static/chunks/9701.f9a0bfffba8807dc.js +0 -1
  445. package/.next/static/chunks/9909.787576b171184aa5.js +0 -1
  446. package/.next/static/chunks/9960.7ef77f8a8b046170.js +0 -1
  447. package/.next/static/chunks/9979.aedbc094bdc2c599.js +0 -1
  448. package/.next/static/chunks/BannerNewsletter.00328ad162109908.js +0 -1
  449. package/.next/static/chunks/BannerText.dbbec87cadb8a521.js +0 -1
  450. package/.next/static/chunks/ButtonSignIn.f6e210eaca873e48.js +0 -1
  451. package/.next/static/chunks/CartItem.b34e295377f6f94f.js +0 -1
  452. package/.next/static/chunks/CartSidebar.ac447d1ef6276da1.js +0 -1
  453. package/.next/static/chunks/Dropdown.38b48c749bad6b60.js +0 -1
  454. package/.next/static/chunks/DropdownButton.66fa6b25dddb3a07.js +0 -1
  455. package/.next/static/chunks/DropdownItem.38b8f5a07c7f422a.js +0 -1
  456. package/.next/static/chunks/DropdownMenu.48b11521a24c6efd.js +0 -1
  457. package/.next/static/chunks/EmptyCart.320e2f94a0d5e6b1.js +0 -1
  458. package/.next/static/chunks/FilterSkeleton.7ab99e28f92341c9.js +0 -1
  459. package/.next/static/chunks/Footer.166b02c2f13980c6.js +0 -1
  460. package/.next/static/chunks/Gift.c49ba26da2fbab5e.js +0 -1
  461. package/.next/static/chunks/Newsletter.fc406f6029057022.js +0 -1
  462. package/.next/static/chunks/OrderSummary.5957d69f990d9add.js +0 -1
  463. package/.next/static/chunks/PreviewTag.f4f0c8710a7bcad9.js +0 -1
  464. package/.next/static/chunks/ProductShelf.cc46f5cdeeaeaff6.js +0 -1
  465. package/.next/static/chunks/ProductTiles.9b804e51b0704d60.js +0 -1
  466. package/.next/static/chunks/RegionModal.319ad44250cb12d2.js +0 -1
  467. package/.next/static/chunks/RegionSlider.0e0e93369f4f9c92.js +0 -1
  468. package/.next/static/chunks/ScrollToTopButton.c15431f2e8bb93ef.js +0 -1
  469. package/.next/static/chunks/ShoppingAssistant.ba191eb4dbed67e5.js +0 -1
  470. package/.next/static/chunks/Toast.5f90f0436708be5e.js +0 -1
  471. package/.next/static/chunks/UIBannerText.7315b16af4457059.js +0 -1
  472. package/.next/static/chunks/UISKUMatrixSidebar.b4349b2682bbe183.js +0 -1
  473. package/.next/static/chunks/UIToast.19a8664c01a00d3a.js +0 -1
  474. package/.next/static/chunks/framework-d514426edf885c68.js +0 -33
  475. package/.next/static/chunks/main-ec03882c4375091d.js +0 -1
  476. package/.next/static/chunks/pages/404-e3dfbbac003b02a2.js +0 -1
  477. package/.next/static/chunks/pages/500-c7814e085081d7b8.js +0 -1
  478. package/.next/static/chunks/pages/[...slug]-dc8a395a43b081f1.js +0 -1
  479. package/.next/static/chunks/pages/[slug]/p-644f1132f5a0f736.js +0 -1
  480. package/.next/static/chunks/pages/_app-84aaff8a9d4de60e.js +0 -1
  481. package/.next/static/chunks/pages/_error-2b0148be56a716e9.js +0 -1
  482. package/.next/static/chunks/pages/checkout-2071467ad42dfb99.js +0 -1
  483. package/.next/static/chunks/pages/index-8774d5b4a8744eb2.js +0 -1
  484. package/.next/static/chunks/pages/login-e74747c9f9cb5b49.js +0 -1
  485. package/.next/static/chunks/pages/pvt/account/403-491e6b062487b30f.js +0 -1
  486. package/.next/static/chunks/pages/pvt/account/404-5ad472d9f2ee1980.js +0 -1
  487. package/.next/static/chunks/pages/pvt/account/[...unknown]-f80f645594d2740c.js +0 -1
  488. package/.next/static/chunks/pages/pvt/account/orders/[id]-64e42157c0974c48.js +0 -1
  489. package/.next/static/chunks/pages/pvt/account/orders-faab39f2aff05fae.js +0 -1
  490. package/.next/static/chunks/pages/pvt/account/profile-9672177ee2665bc0.js +0 -1
  491. package/.next/static/chunks/pages/pvt/account/security-03eb1ccab9a30563.js +0 -1
  492. package/.next/static/chunks/pages/pvt/account/user-details-7838e3f79781596c.js +0 -1
  493. package/.next/static/chunks/pages/pvt/account-65fefcc699344bdb.js +0 -1
  494. package/.next/static/chunks/pages/s-162ba789e6611175.js +0 -1
  495. package/.next/static/chunks/polyfills-c67a75d1b6f99dc8.js +0 -1
  496. package/.next/static/chunks/webpack-f621ff3e951d2982.js +0 -1
  497. package/.next/static/css/02259c549b2179f2.css +0 -1
  498. package/.next/static/css/02eaf202d3d11fd1.css +0 -1
  499. package/.next/static/css/033e241c58ba6fbb.css +0 -1
  500. package/.next/static/css/042d012bc1895b5c.css +0 -1
  501. package/.next/static/css/14176a4704ff97b2.css +0 -1
  502. package/.next/static/css/146a8678babc61bf.css +0 -1
  503. package/.next/static/css/16d65422bfa80f51.css +0 -1
  504. package/.next/static/css/1c4983f11b861ea0.css +0 -1
  505. package/.next/static/css/204754bbd8cc4bef.css +0 -1
  506. package/.next/static/css/24d91007fc96be10.css +0 -1
  507. package/.next/static/css/2980acad3f8e1028.css +0 -1
  508. package/.next/static/css/2c19433e38fd7533.css +0 -1
  509. package/.next/static/css/31380ebc6e671486.css +0 -1
  510. package/.next/static/css/42df884711219edb.css +0 -1
  511. package/.next/static/css/4f0597b0bf0ef2e1.css +0 -1
  512. package/.next/static/css/54cedf4b65e5863f.css +0 -1
  513. package/.next/static/css/6580147d7ab8fcca.css +0 -1
  514. package/.next/static/css/6819dddf2b1b5ea7.css +0 -1
  515. package/.next/static/css/7ef7762f412ed665.css +0 -1
  516. package/.next/static/css/82f3cd529b672812.css +0 -1
  517. package/.next/static/css/837662922091162f.css +0 -1
  518. package/.next/static/css/8e6ab59ace21e03b.css +0 -1
  519. package/.next/static/css/a852afa9be31e946.css +0 -1
  520. package/.next/static/css/b684b347c5cc6514.css +0 -1
  521. package/.next/static/css/bcdaef0a83277ef5.css +0 -1
  522. package/.next/static/css/c33615999008d3f9.css +0 -1
  523. package/.next/static/css/c34f6ea9953e2f63.css +0 -1
  524. package/.next/static/css/ea11d74a2848b093.css +0 -1
  525. package/.next/static/css/f16438bcf4508fb3.css +0 -1
  526. package/.next/static/css/f60366555f563deb.css +0 -1
  527. package/.next/trace +0 -143
  528. package/.turbo/turbo-build.log +0 -140
  529. package/jest.config.js +0 -17
  530. package/public/~partytown/debug/partytown-atomics.js +0 -556
  531. package/public/~partytown/debug/partytown-media.js +0 -374
  532. package/public/~partytown/debug/partytown-sandbox-sw.js +0 -543
  533. package/public/~partytown/debug/partytown-sw.js +0 -59
  534. package/public/~partytown/debug/partytown-ww-atomics.js +0 -1789
  535. package/public/~partytown/debug/partytown-ww-sw.js +0 -1781
  536. package/public/~partytown/debug/partytown.js +0 -72
  537. package/public/~partytown/partytown-atomics.js +0 -2
  538. package/public/~partytown/partytown-media.js +0 -2
  539. package/public/~partytown/partytown-sw.js +0 -2
  540. package/public/~partytown/partytown.js +0 -2
  541. package/src/middleware__DISABLED.ts +0 -65
  542. package/src/server/generator/generateGraphQLSchemaFile.ts +0 -3
  543. package/src/server/generator/schema.ts +0 -81
@@ -11,6 +11,7 @@ type PDPSettings = {
11
11
  value?: string
12
12
  }
13
13
  seo?: {
14
+ titleTemplate?: string
14
15
  id?: string
15
16
  mainEntityOfPage?: string
16
17
  }
@@ -13,6 +13,9 @@ type PLPSettings = {
13
13
  template?: {
14
14
  value?: string
15
15
  }
16
+ seo: {
17
+ titleTemplate?: string
18
+ }
16
19
  productGallery: {
17
20
  itemsPerPage: number
18
21
  sortBySelection: string
@@ -1,32 +1,32 @@
1
+ import type { ServerProductQueryQuery } from '@generated/graphql'
1
2
  import type { ContentData, Locator } from '@vtex/client-cms'
2
- import ClientCP from '@vtex/client-cp'
3
3
  import type { ContentEntry, EntryPathParams } from '@vtex/client-cp'
4
+ import ClientCP from '@vtex/client-cp'
5
+ import MissingContentError from 'src/sdk/error/MissingContentError'
6
+ import MultipleContentError from 'src/sdk/error/MultipleContentError'
4
7
  import { getCMSPage, getPage, type PageContentType } from 'src/server/cms'
5
- import type { ContentOptions, ContentParams, PreviewData } from './types'
6
- import config from '../../../discovery.config'
7
- import { getPLP, type PLPContentType } from '../cms/plp'
8
8
  import {
9
9
  findBestPDPTemplate,
10
10
  findBestPLPTemplate,
11
11
  type Rewrite,
12
12
  type RewritesConfig,
13
13
  } from 'src/utils/multipleTemplates'
14
- import MissingContentError from 'src/sdk/error/MissingContentError'
14
+ import config from '../../../discovery.config'
15
15
  import { getPDP, type PDPContentType } from '../cms/pdp'
16
- import MultipleContentError from 'src/sdk/error/MultipleContentError'
17
- import type { ServerProductQueryQuery } from '@generated/graphql'
16
+ import { getPLP, type PLPContentType } from '../cms/plp'
17
+ import type { ContentOptions, ContentParams } from './types'
18
18
  import { isBranchPreview, isContentPlatformSource } from './utils'
19
19
 
20
20
  type ContentResult = ContentData | (ContentEntry & PageContentType)
21
21
 
22
+ const OPTIONAL_CONTENT_TYPES = [
23
+ 'globalHeaderSections',
24
+ 'globalFooterSections',
25
+ ] as const
22
26
  export class ContentService {
23
- private clientCP: ClientCP
24
-
25
- constructor() {
26
- this.clientCP = new ClientCP({
27
- tenant: config.api.storeId,
28
- })
29
- }
27
+ private readonly clientCP = new ClientCP({
28
+ tenant: config.api.storeId,
29
+ })
30
30
 
31
31
  async getSingleContent<T extends ContentData>(
32
32
  params: ContentParams
@@ -157,7 +157,13 @@ export class ContentService {
157
157
  ): Promise<PageContentType> {
158
158
  const { entries } = await this.clientCP.listEntries(params)
159
159
  if (!entries || entries.length === 0) {
160
- console.warn('No entries found for params', params)
160
+ const isOptional = OPTIONAL_CONTENT_TYPES.includes(
161
+ params.contentType as (typeof OPTIONAL_CONTENT_TYPES)[number]
162
+ )
163
+
164
+ if (!isOptional) {
165
+ console.warn('No entries found for params', params)
166
+ }
161
167
  return {} as PageContentType
162
168
  }
163
169
  if (entries.length > 1) {
@@ -167,7 +173,13 @@ export class ContentService {
167
173
  }
168
174
 
169
175
  private createContentOptions(params: ContentParams): ContentOptions {
170
- const { contentType, previewData, slug } = params
176
+ const { contentType, previewData, slug, locale } = params
177
+ const previewLocale = previewData?.locale
178
+ const effectiveLocale =
179
+ previewLocale !== undefined &&
180
+ (locale === undefined || locale === config.session.locale)
181
+ ? previewLocale
182
+ : locale
171
183
 
172
184
  const contentPreviewEnabled = previewData?.contentType === contentType
173
185
  const branchPreviewEnabled = isBranchPreview(previewData)
@@ -178,6 +190,7 @@ export class ContentService {
178
190
  contentPreviewEnabled,
179
191
  branchPreviewEnabled
180
192
  ),
193
+ ...(effectiveLocale !== undefined && { locale: effectiveLocale }),
181
194
  ...(slug !== undefined && { slug }),
182
195
  isPreview: contentPreviewEnabled || branchPreviewEnabled,
183
196
  }
@@ -191,6 +204,7 @@ export class ContentService {
191
204
  (config.contentSource as Record<string, string>)?.project ??
192
205
  'faststore',
193
206
  contentType: cmsOptions.contentType,
207
+ locale: options.locale,
194
208
  slug: options.slug,
195
209
  }
196
210
 
@@ -204,14 +218,12 @@ export class ContentService {
204
218
  params.branchId = cmsOptions.releaseId
205
219
  }
206
220
  if ('filters' in cmsOptions && cmsOptions.filters) {
207
- const nested = (
208
- cmsOptions.filters as { filters?: Record<string, unknown> }
209
- ).filters as Record<string, unknown>
210
- if (nested && nested['settings.seo.slug']) {
211
- const seo = nested['settings.seo.slug'] as string
221
+ const filters = cmsOptions.filters as Record<string, unknown>
222
+ const seo = filters['settings.seo.slug']
223
+
224
+ if (typeof seo === 'string' && !params.slug) {
212
225
  params.slug = seo.replace(/^\//, '')
213
226
  }
214
- Object.assign(params, cmsOptions.filters)
215
227
  }
216
228
 
217
229
  return params as EntryPathParams
@@ -230,7 +242,7 @@ export class ContentService {
230
242
  releaseId,
231
243
  filters,
232
244
  } = params
233
- const { slug: _, ...previewLocator } = previewData || {}
245
+ const { slug: _, locale: __, ...previewLocator } = previewData ?? {}
234
246
 
235
247
  return {
236
248
  contentType,
@@ -254,7 +266,7 @@ export class ContentService {
254
266
  ...entry,
255
267
  ...data,
256
268
  id: entry.id,
257
- name: entry.name || '',
269
+ name: entry.name ?? '',
258
270
  }
259
271
  }
260
272
  }
@@ -7,20 +7,27 @@ export const ContentSourceType = {
7
7
 
8
8
  export type PreviewData = Locator & {
9
9
  slug?: string
10
+ locale?: string
10
11
  }
11
12
 
12
- export interface ContentParams {
13
- contentType?: string
13
+ export interface ContentRequestContext {
14
14
  previewData?: PreviewData | null
15
+ locale?: string
16
+ }
17
+
18
+ export interface ContentParams extends ContentRequestContext {
19
+ contentType?: string
15
20
  slug?: string
16
21
  documentId?: string
17
22
  versionId?: string
18
23
  releaseId?: string
19
- filters?: Record<string, unknown>
24
+ filters?: Record<string, string>
25
+ locale?: string
20
26
  }
21
27
 
22
28
  export interface ContentOptions {
23
29
  cmsOptions: Options
30
+ locale?: string
24
31
  slug?: string
25
32
  isPreview: boolean
26
33
  }
@@ -11,27 +11,24 @@ import { useParserCache } from '@envelop/parser-cache'
11
11
  import { useValidationCache } from '@envelop/validation-cache'
12
12
  import type { CacheControl, Maybe } from '@faststore/api'
13
13
  import {
14
- authDirective,
15
- cacheControlDirective,
16
14
  BadRequestError,
17
- getContextFactory,
18
- getResolvers,
15
+ GraphqlVtexContextFactory,
16
+ GraphqlVtexSchema,
19
17
  isFastStoreError,
20
18
  } from '@faststore/api'
21
19
  import { loadFilesSync } from '@graphql-tools/load-files'
20
+ import { mergeTypeDefs } from '@graphql-tools/merge'
22
21
  import { makeExecutableSchema } from '@graphql-tools/schema'
23
22
  import type { TypeSource } from '@graphql-tools/utils'
24
23
  import * as GraphQLJS from 'graphql'
25
24
  import { GraphQLError } from 'graphql'
26
25
  import path from 'path'
27
26
 
28
- import persisted from '@generated/persisted-documents.json'
29
-
30
27
  import thirdPartyResolvers from '../customizations/src/graphql/thirdParty/resolvers'
31
28
  import vtexExtensionsResolvers from '../customizations/src/graphql/vtex/resolvers'
32
29
 
33
30
  import type { Operation } from '../sdk/graphql/request'
34
- import { apiOptions } from './options'
31
+ import { apiOptions, withTraceClient } from './options'
35
32
 
36
33
  interface ExecuteOptions<V = Record<string, unknown>> {
37
34
  operation: Operation
@@ -39,9 +36,7 @@ interface ExecuteOptions<V = Record<string, unknown>> {
39
36
  query?: string | null
40
37
  }
41
38
 
42
- const persistedQueries = new Map(Object.entries(persisted))
43
-
44
- const apiContextFactory = getContextFactory(apiOptions)
39
+ const persistedQueries = new Map()
45
40
 
46
41
  const customFormatError: MaskError = (err) => {
47
42
  if (err instanceof GraphQLError && isFastStoreError(err.originalError)) {
@@ -59,22 +54,25 @@ function loadGeneratedSchema(): TypeSource {
59
54
  })
60
55
  }
61
56
 
62
- function getFinalAPISchema() {
63
- const generatedSchema = loadGeneratedSchema()
64
- const nativeResolvers = getResolvers(apiOptions)
57
+ export function getFinalAPISchema() {
58
+ const finalTypeDefs = mergeTypeDefs([
59
+ GraphqlVtexSchema(),
60
+ loadGeneratedSchema(),
61
+ ])
65
62
 
66
63
  const schema = makeExecutableSchema({
67
- typeDefs: generatedSchema,
68
- resolvers: [nativeResolvers, vtexExtensionsResolvers, thirdPartyResolvers],
64
+ typeDefs: finalTypeDefs,
65
+ resolvers: [vtexExtensionsResolvers, thirdPartyResolvers],
69
66
  })
70
67
 
71
- // Apply directive transformations
72
- const directives = [cacheControlDirective, authDirective]
73
- return directives.reduce((s, d) => d.transformer(s), schema)
68
+ return GraphqlVtexSchema(schema)
74
69
  }
75
70
 
76
- export const getEnvelop = async () =>
77
- envelop({
71
+ export const getEnvelop = async () => {
72
+ const options = await withTraceClient(apiOptions)
73
+ const apiContextFactory = await GraphqlVtexContextFactory(options)
74
+
75
+ return envelop({
78
76
  plugins: [
79
77
  useEngine(GraphQLJS),
80
78
  useSchema(getFinalAPISchema()),
@@ -85,6 +83,7 @@ export const getEnvelop = async () =>
85
83
  useParserCache(),
86
84
  ],
87
85
  })
86
+ }
88
87
 
89
88
  const envelopPromise = getEnvelop()
90
89
 
@@ -102,6 +101,14 @@ export const execute = async <V extends Maybe<{ [key: string]: unknown }>, D>(
102
101
  const { operation, variables, query: maybeQuery } = options
103
102
  const { operationHash, operationName } = operation['__meta__']
104
103
 
104
+ if (!persistedQueries.size) {
105
+ const persistedQueriesLoaded = await import(
106
+ '@generated/persisted-documents.json'
107
+ )
108
+ Object.entries(
109
+ persistedQueriesLoaded.default ?? persistedQueriesLoaded
110
+ ).forEach(([key, value]) => persistedQueries.set(key, value))
111
+ }
105
112
  const query = maybeQuery ?? persistedQueries.get(operationHash)
106
113
 
107
114
  if (query == null) {
@@ -1,6 +1,9 @@
1
- import type { Options as APIOptions } from '@faststore/api'
2
-
1
+ import type { APIOptions } from '@faststore/api'
2
+ import { getTraceClient } from '@faststore/diagnostics'
3
3
  import storeConfig from '../../discovery.config'
4
+ import pkgJSON from '../../package.json'
5
+
6
+ const { name, version } = pkgJSON
4
7
 
5
8
  export const apiOptions: APIOptions = {
6
9
  platform: storeConfig.platform as APIOptions['platform'],
@@ -19,4 +22,26 @@ export const apiOptions: APIOptions = {
19
22
  enableUnavailableItemsOnCart:
20
23
  storeConfig.api?.enableUnavailableItemsOnCart ?? false,
21
24
  },
25
+ version,
26
+ OTEL: {
27
+ enabled: storeConfig.analytics.otelEnabled,
28
+ },
29
+ discoveryConfig: storeConfig,
30
+ }
31
+
32
+ export async function withTraceClient<T extends APIOptions = typeof apiOptions>(
33
+ apiOptions: T
34
+ ): Promise<T> {
35
+ const OTEL = {}
36
+ getTraceClient(
37
+ apiOptions?.discoveryConfig?.analytics?.serviceName ?? name
38
+ )?.inject(OTEL)
39
+
40
+ return {
41
+ ...apiOptions,
42
+ OTEL: {
43
+ ...OTEL,
44
+ enabled: storeConfig.analytics?.otelEnabled?.toString() === 'true',
45
+ },
46
+ } as T
22
47
  }
@@ -1,15 +1,18 @@
1
+ @use "sass:meta";
2
+
1
3
  // Establish a layer order up-front, FS UI base styles have the lowest priority
2
4
  @layer base, components, theme;
3
5
 
4
6
  // FastStore UI's base styles
5
- @import "@faststore/ui/src/styles/global.scss";
7
+ @include meta.load-css("~@faststore/ui/src/styles/global.scss");
6
8
 
7
9
  // Components & Sections styles
8
- @import "@faststore/ui/src/components/atoms/Skeleton/styles.scss";
9
- @import "@faststore/ui/src/components/atoms/Overlay/styles.scss";
10
- @import "@faststore/ui/src/components/atoms/SROnly/styles.scss";
11
- @import "src/components/sections/Section/section.scss";
10
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Skeleton/styles.scss");
11
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Overlay/styles.scss");
12
+ @include meta.load-css("~@faststore/ui/src/components/atoms/SROnly/styles.scss");
13
+ @include meta.load-css("src/components/sections/Section/section.scss");
12
14
 
13
15
  // Importing this component because is being used outside the context of the Section
14
- @import "@faststore/ui/src/components/organisms/QuickOrderDrawer/styles.scss";
15
- @import "@faststore/ui/src/components/organisms/SlideOver/styles.scss";
16
+ @include meta.load-css("~@faststore/ui/src/components/molecules/Dropdown/styles.scss");
17
+ @include meta.load-css("~@faststore/ui/src/components/organisms/QuickOrderDrawer/styles.scss");
18
+ @include meta.load-css("~@faststore/ui/src/components/organisms/SlideOver/styles.scss");
@@ -1,5 +1,5 @@
1
1
  // The import order of these stylesheets does affect in the layers override
2
2
  // global/index.scss should be import before themes/index.scss
3
- @import "./global/index.scss";
4
- @import "../customizations/src/themes/index.scss";
5
- @import "../plugins/index.scss";
3
+ @use "./global/index.scss" as global;
4
+ @use "../customizations/src/themes/index.scss" as themes;
5
+ @use "../plugins/index.scss" as plugins;
@@ -0,0 +1,41 @@
1
+ export type LocalesSettings = {
2
+ defaultLocale: string
3
+ regions?: Record<
4
+ string,
5
+ {
6
+ code: string
7
+ name: string
8
+ dateFormat: string
9
+ timeFormat: string
10
+ timeFormatMask: string
11
+ unitSystem: string
12
+ defaultTimezone: string
13
+ }
14
+ >
15
+ locales: Record<
16
+ string,
17
+ {
18
+ code: string
19
+ name: string
20
+ languageCode: string
21
+ languageName: string
22
+ script: string
23
+ textDirection: string
24
+ regionCode: string
25
+ bindings: Array<{
26
+ currencyCode: string
27
+ url: string
28
+ salesChannel: string
29
+ isDefault: boolean
30
+ }>
31
+ }
32
+ >
33
+ currencies?: Record<
34
+ string,
35
+ {
36
+ code: string
37
+ name: string
38
+ symbol: string
39
+ }
40
+ >
41
+ }
@@ -50,6 +50,7 @@ export async function fetchServerManyProducts({
50
50
  selectedFacets = [],
51
51
  sponsoredCount = 3,
52
52
  filter = true,
53
+ locale,
53
54
  }: {
54
55
  itemsPerPage: number
55
56
  sort: SearchState['sort']
@@ -60,8 +61,9 @@ export async function fetchServerManyProducts({
60
61
  }[]
61
62
  sponsoredCount?: number
62
63
  filter?: boolean
64
+ locale: string
63
65
  }) {
64
- let { channel, locale } = storeConfig.session
66
+ let { channel } = storeConfig.session
65
67
 
66
68
  if (filter) {
67
69
  const { hasOnlyDefaultSalesChannel, ...filteredChannel } =
@@ -1,9 +1,10 @@
1
+ import { getStoreURL } from 'src/sdk/localization/useLocalizationConfig'
1
2
  import config from '../../discovery.config'
2
3
 
3
4
  export const getBaseDomain = (urls: string[]) => {
4
5
  // Check if all hostnames are the same (unified domain scenario)
5
6
  if (urls[0] === urls[1]) {
6
- return `.${new URL(config.storeUrl).hostname}`
7
+ return `.${new URL(getStoreURL()).hostname}`
7
8
  }
8
9
 
9
10
  const extractHostname = (url: string) => {
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Extracts and normalizes a hostname from a raw `Host` header value (or any
3
+ * "host:port" string).
4
+ *
5
+ * Normalization rules:
6
+ * - Strips the port segment (e.g. `"store.com:443"` -> `"store.com"`)
7
+ * - Lowercases the result for case-insensitive comparisons
8
+ * - Trims surrounding whitespace
9
+ * - Returns `null` when the input is missing, empty, or whitespace-only
10
+ */
11
+ export function getRequestHostname(
12
+ host: string | null | undefined
13
+ ): string | null {
14
+ const trimmed = host?.trim()
15
+
16
+ if (!trimmed) {
17
+ return null
18
+ }
19
+
20
+ try {
21
+ return new URL(`https://${trimmed}`).hostname.toLowerCase()
22
+ } catch {
23
+ const fallback = trimmed.split(':')[0].trim().toLowerCase()
24
+ return fallback || null
25
+ }
26
+ }
@@ -4,6 +4,7 @@ import { usePage } from 'src/sdk/overrides/PageProvider'
4
4
  export type GlobalCmsData = {
5
5
  regionalization?: RegionalizationCmsData
6
6
  deliveryPromise?: DeliveryPromiseCmsData
7
+ filters?: FiltersCmsData
7
8
  }
8
9
 
9
10
  type RegionalizationCmsData = {
@@ -13,6 +14,7 @@ type RegionalizationCmsData = {
13
14
  noProductsAvailableErrorMessage?: string
14
15
  buttonActionText?: string
15
16
  errorMessageHelper?: string
17
+ loadingLabel?: string
16
18
  }
17
19
  idkPostalCodeLink?: {
18
20
  text?: string
@@ -77,6 +79,15 @@ type DeliveryPromiseCmsData = {
77
79
  }
78
80
  }
79
81
 
82
+ type FiltersCmsData = {
83
+ filterFacetRange?: {
84
+ minLabel?: string
85
+ maxLabel?: string
86
+ minPriceErrorMessage?: string
87
+ maxPriceErrorMessage?: string
88
+ }
89
+ }
90
+
80
91
  export function getGlobalSettings(
81
92
  sectionRegionalizationData?: GlobalCmsData['regionalization']
82
93
  ): GlobalCmsData {