@alphasquad/saleor-template-advance 0.1.0

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 (441) hide show
  1. package/.env.example +57 -0
  2. package/APPLE_PAY_QUICK_START.md +165 -0
  3. package/APPLE_PAY_SETUP.md +331 -0
  4. package/README.md +46 -0
  5. package/SEO_AUDIT_CHECKLIST_STATUS.md +244 -0
  6. package/SEO_AUDIT_REPORT.md +66 -0
  7. package/eslint.config.mjs +16 -0
  8. package/next-env.d.ts +5 -0
  9. package/next.config.ts +109 -0
  10. package/package.json +47 -0
  11. package/postcss.config.mjs +5 -0
  12. package/public/.well-known/apple-developer-merchantid-domain-association +1 -0
  13. package/public/Logo.png +0 -0
  14. package/public/brand-video.mp4 +0 -0
  15. package/public/favicon.ico +0 -0
  16. package/public/file.svg +1 -0
  17. package/public/footer/facebook.tsx +34 -0
  18. package/public/footer/instagram.tsx +27 -0
  19. package/public/footer/mail.tsx +5 -0
  20. package/public/footer/x.tsx +35 -0
  21. package/public/globe.svg +1 -0
  22. package/public/icons/Authorize.net.webp +0 -0
  23. package/public/icons/amex.gif +0 -0
  24. package/public/icons/appIcon.png +0 -0
  25. package/public/icons/discover.gif +0 -0
  26. package/public/icons/master.gif +0 -0
  27. package/public/icons/paypal.png +0 -0
  28. package/public/icons/stripe.png +0 -0
  29. package/public/icons/visa.gif +0 -0
  30. package/public/images/BackgroundNoise.png +0 -0
  31. package/public/images/footer-background.png +0 -0
  32. package/public/next.svg +1 -0
  33. package/public/no-image-avail-large.png +0 -0
  34. package/public/random-car-1.jpeg +0 -0
  35. package/public/random-car-2.png +0 -0
  36. package/public/random-car-3.jpg +0 -0
  37. package/public/random-car-4.jpg +0 -0
  38. package/public/random-car-5.jpg +0 -0
  39. package/public/star.svg +3 -0
  40. package/public/vercel.svg +1 -0
  41. package/public/window.svg +1 -0
  42. package/scripts/seo-audit/generate-checklist.mjs +156 -0
  43. package/src/app/(auth)/account/forgot-password/layout.tsx +16 -0
  44. package/src/app/(auth)/account/forgot-password/page.tsx +135 -0
  45. package/src/app/(auth)/account/login/layout.tsx +16 -0
  46. package/src/app/(auth)/account/login/page.tsx +288 -0
  47. package/src/app/(auth)/account/otp/layout.tsx +16 -0
  48. package/src/app/(auth)/account/otp/page.tsx +108 -0
  49. package/src/app/(auth)/account/register/layout.tsx +16 -0
  50. package/src/app/(auth)/account/register/page.tsx +431 -0
  51. package/src/app/(auth)/account/reset-password/layout.tsx +16 -0
  52. package/src/app/(auth)/account/reset-password/page.tsx +222 -0
  53. package/src/app/[slug]/page.tsx +43 -0
  54. package/src/app/about/loading.tsx +17 -0
  55. package/src/app/about/page.tsx +61 -0
  56. package/src/app/account/address/layout.tsx +15 -0
  57. package/src/app/account/address/page.tsx +166 -0
  58. package/src/app/account/head.tsx +4 -0
  59. package/src/app/account/layout.tsx +62 -0
  60. package/src/app/account/orders/[id]/layout.tsx +17 -0
  61. package/src/app/account/orders/[id]/page.tsx +115 -0
  62. package/src/app/account/orders/components/orderDetailsModal.tsx +410 -0
  63. package/src/app/account/orders/layout.tsx +15 -0
  64. package/src/app/account/orders/page.tsx +146 -0
  65. package/src/app/account/page.tsx +39 -0
  66. package/src/app/account/settings/components/editProfileSuccessModal.tsx +28 -0
  67. package/src/app/account/settings/layout.tsx +15 -0
  68. package/src/app/account/settings/page.tsx +260 -0
  69. package/src/app/api/affirm/check-status/route.ts +94 -0
  70. package/src/app/api/affirm/create-checkout/route.ts +109 -0
  71. package/src/app/api/affirm/get-config/route.ts +108 -0
  72. package/src/app/api/affirm/process-payment/route.ts +244 -0
  73. package/src/app/api/affirm/test-connection/route.ts +45 -0
  74. package/src/app/api/auth/clear/route.ts +16 -0
  75. package/src/app/api/auth/clear-cookies/route.ts +42 -0
  76. package/src/app/api/auth/set/route.ts +47 -0
  77. package/src/app/api/configuration/route.ts +18 -0
  78. package/src/app/api/dynamic-page/[slug]/route.ts +24 -0
  79. package/src/app/api/form-submission/route.ts +237 -0
  80. package/src/app/api/paypal/capture-order/route.ts +303 -0
  81. package/src/app/api/paypal/create-order/route.ts +211 -0
  82. package/src/app/api/paypal/get-config/route.ts +240 -0
  83. package/src/app/api/search-proxy/route.ts +52 -0
  84. package/src/app/authorize-net-success/layout.tsx +19 -0
  85. package/src/app/authorize-net-success/page.tsx +12 -0
  86. package/src/app/authorize-net-success/summary.tsx +486 -0
  87. package/src/app/blog/[slug]/blogContentRenderer.tsx +369 -0
  88. package/src/app/blog/[slug]/layout.tsx +17 -0
  89. package/src/app/blog/[slug]/page.tsx +151 -0
  90. package/src/app/blog/constant.tsx +147 -0
  91. package/src/app/blog/layout.tsx +31 -0
  92. package/src/app/blog/page.tsx +81 -0
  93. package/src/app/brand/[id]/BrandPageClient.tsx +188 -0
  94. package/src/app/brand/[id]/layout.tsx +17 -0
  95. package/src/app/brand/[id]/page.tsx +176 -0
  96. package/src/app/brands/components/brandsListingClient.tsx +97 -0
  97. package/src/app/brands/layout.tsx +31 -0
  98. package/src/app/brands/page.tsx +40 -0
  99. package/src/app/cancellation-policy/page.tsx +53 -0
  100. package/src/app/cart/layout.tsx +19 -0
  101. package/src/app/cart/page.tsx +752 -0
  102. package/src/app/category/[slug]/CategoryPageClient.tsx +377 -0
  103. package/src/app/category/[slug]/layout.tsx +17 -0
  104. package/src/app/category/[slug]/page.tsx +224 -0
  105. package/src/app/category/page.tsx +114 -0
  106. package/src/app/checkout/components/addNewAddressModal.tsx +474 -0
  107. package/src/app/checkout/layout.tsx +19 -0
  108. package/src/app/checkout/page.tsx +3312 -0
  109. package/src/app/components/account/AccountTabs.tsx +40 -0
  110. package/src/app/components/ads/GoogleAdSense.tsx +74 -0
  111. package/src/app/components/analytics/AnalyticsScripts.tsx +78 -0
  112. package/src/app/components/analytics/ConditionalGTMNoscript.tsx +24 -0
  113. package/src/app/components/analytics/ConditionalGoogleAnalytics.tsx +16 -0
  114. package/src/app/components/ancillary/AncillaryContent.tsx +7 -0
  115. package/src/app/components/auth/TokenExpirationHandler.tsx +8 -0
  116. package/src/app/components/blog/BlogList.tsx +112 -0
  117. package/src/app/components/checkout/AddressInformationSection.tsx +34 -0
  118. package/src/app/components/checkout/AddressManagement.tsx +571 -0
  119. package/src/app/components/checkout/CheckoutHeader.tsx +51 -0
  120. package/src/app/components/checkout/CheckoutQuestions.tsx +454 -0
  121. package/src/app/components/checkout/CheckoutTermsModal.tsx +81 -0
  122. package/src/app/components/checkout/ContactDetailsSection.tsx +52 -0
  123. package/src/app/components/checkout/DealerShippingSection.tsx +359 -0
  124. package/src/app/components/checkout/DeliveryMethodSection.tsx +249 -0
  125. package/src/app/components/checkout/OrderSummary.tsx +386 -0
  126. package/src/app/components/checkout/TermsContentRenderer.tsx +147 -0
  127. package/src/app/components/checkout/WillCallSection.tsx +133 -0
  128. package/src/app/components/checkout/affirmPayment.tsx +383 -0
  129. package/src/app/components/checkout/checkoutProcessingModal.tsx +96 -0
  130. package/src/app/components/checkout/googlePayButton.tsx +334 -0
  131. package/src/app/components/checkout/paymentStep.tsx +180 -0
  132. package/src/app/components/checkout/paypalPayment.tsx +1083 -0
  133. package/src/app/components/checkout/saleorNativePayment.tsx +1758 -0
  134. package/src/app/components/dynamicPage/DynamicPageRenderer.tsx +13 -0
  135. package/src/app/components/dynamicPage/HtmlWidgetRenderer.tsx +144 -0
  136. package/src/app/components/filtersCollapsible/index.tsx +365 -0
  137. package/src/app/components/globalSearch/index.tsx +423 -0
  138. package/src/app/components/layout/cartDropDown.tsx +628 -0
  139. package/src/app/components/layout/components/FooterNewsletter.tsx +21 -0
  140. package/src/app/components/layout/footer.tsx +283 -0
  141. package/src/app/components/layout/header/accountMenuDropdown.tsx +53 -0
  142. package/src/app/components/layout/header/components/CartBadge.tsx +18 -0
  143. package/src/app/components/layout/header/components/LoadingState.tsx +17 -0
  144. package/src/app/components/layout/header/components/MenuItemDropdown.tsx +124 -0
  145. package/src/app/components/layout/header/components/MobileNavbar.tsx +123 -0
  146. package/src/app/components/layout/header/components/NavbarActions.tsx +125 -0
  147. package/src/app/components/layout/header/components/NavbarBrand.tsx +29 -0
  148. package/src/app/components/layout/header/components/NavigationLinks.tsx +131 -0
  149. package/src/app/components/layout/header/hamMenuSlide.tsx +318 -0
  150. package/src/app/components/layout/header/header.tsx +44 -0
  151. package/src/app/components/layout/header/hooks/useDropdown.ts +45 -0
  152. package/src/app/components/layout/header/hooks/useNavbarData.ts +138 -0
  153. package/src/app/components/layout/header/hooks/useNavbarState.ts +66 -0
  154. package/src/app/components/layout/header/megaMenuDropdown.tsx +116 -0
  155. package/src/app/components/layout/header/navBar.tsx +121 -0
  156. package/src/app/components/layout/header/search.tsx +418 -0
  157. package/src/app/components/layout/header/styles/navbarStyles.ts +27 -0
  158. package/src/app/components/layout/header/topBar.tsx +214 -0
  159. package/src/app/components/layout/joinNewsletterForm/index.tsx +72 -0
  160. package/src/app/components/layout/mobileAccordian/index.tsx +92 -0
  161. package/src/app/components/layout/paymentMethods.tsx +75 -0
  162. package/src/app/components/layout/rootLayout.tsx +23 -0
  163. package/src/app/components/layout/siteInfo.tsx +103 -0
  164. package/src/app/components/layout/socialLinks.tsx +65 -0
  165. package/src/app/components/newsletterSection/emailListSection.tsx +224 -0
  166. package/src/app/components/newsletterSection/emailSectionServer.tsx +8 -0
  167. package/src/app/components/providers/ApolloWrapper.tsx +12 -0
  168. package/src/app/components/providers/AppConfigurationProvider.tsx +108 -0
  169. package/src/app/components/providers/GoogleAnalyticsProvider.tsx +149 -0
  170. package/src/app/components/providers/GoogleTagManagerProvider.tsx +31 -0
  171. package/src/app/components/providers/RecaptchaProvider.tsx +18 -0
  172. package/src/app/components/providers/ServerAppConfigurationProvider.tsx +133 -0
  173. package/src/app/components/providers/YMMStatusProvider.tsx +15 -0
  174. package/src/app/components/reuseableUI/AboutUs.tsx +115 -0
  175. package/src/app/components/reuseableUI/AddToCartClient.tsx +125 -0
  176. package/src/app/components/reuseableUI/EditorJsRenderer.tsx +219 -0
  177. package/src/app/components/reuseableUI/HeroSectionsearchByVehicle.tsx +188 -0
  178. package/src/app/components/reuseableUI/ImageWithFallback.tsx +41 -0
  179. package/src/app/components/reuseableUI/Toast.tsx +101 -0
  180. package/src/app/components/reuseableUI/blogCard.tsx +52 -0
  181. package/src/app/components/reuseableUI/brandCard.tsx +68 -0
  182. package/src/app/components/reuseableUI/breadcrumb.tsx +38 -0
  183. package/src/app/components/reuseableUI/categoryCard.tsx +37 -0
  184. package/src/app/components/reuseableUI/categorySkeleton.tsx +31 -0
  185. package/src/app/components/reuseableUI/commonButton.tsx +48 -0
  186. package/src/app/components/reuseableUI/defaultInputField/index.tsx +84 -0
  187. package/src/app/components/reuseableUI/emptyState.tsx +29 -0
  188. package/src/app/components/reuseableUI/errorTag.tsx +15 -0
  189. package/src/app/components/reuseableUI/heading/index.tsx +20 -0
  190. package/src/app/components/reuseableUI/input.tsx +117 -0
  191. package/src/app/components/reuseableUI/listCard.tsx +137 -0
  192. package/src/app/components/reuseableUI/loadingUI.tsx +12 -0
  193. package/src/app/components/reuseableUI/modalLayout.tsx +76 -0
  194. package/src/app/components/reuseableUI/newsletter/newsletterClient.tsx +622 -0
  195. package/src/app/components/reuseableUI/newsletter/newslettersHomeModal.tsx +68 -0
  196. package/src/app/components/reuseableUI/offerCard.tsx +42 -0
  197. package/src/app/components/reuseableUI/passwordRules/passwordRules.tsx +56 -0
  198. package/src/app/components/reuseableUI/primaryButton/index.tsx +34 -0
  199. package/src/app/components/reuseableUI/productCard.tsx +118 -0
  200. package/src/app/components/reuseableUI/productSkeleton.tsx +34 -0
  201. package/src/app/components/reuseableUI/searchByVehicle.tsx +187 -0
  202. package/src/app/components/reuseableUI/secondaryButton/index.tsx +34 -0
  203. package/src/app/components/reuseableUI/section.tsx +20 -0
  204. package/src/app/components/reuseableUI/select/index.tsx +98 -0
  205. package/src/app/components/reuseableUI/skeletonLoader.tsx +117 -0
  206. package/src/app/components/reuseableUI/statusTag.tsx +24 -0
  207. package/src/app/components/reuseableUI/tags/saleTag.tsx +19 -0
  208. package/src/app/components/reuseableUI/testimonialCard.tsx +93 -0
  209. package/src/app/components/richText/EditorRenderer.tsx +318 -0
  210. package/src/app/components/search/HierarchicalCategoryFilter.tsx +155 -0
  211. package/src/app/components/search/SearchFilters.tsx +155 -0
  212. package/src/app/components/search/YMMSearchSidebar.tsx +187 -0
  213. package/src/app/components/seo/ServerProductCard.tsx +91 -0
  214. package/src/app/components/seo/ServerProductGrid.tsx +45 -0
  215. package/src/app/components/shop/CategoryFilter.tsx +184 -0
  216. package/src/app/components/shop/ItemsPerPageSelect.tsx +69 -0
  217. package/src/app/components/shop/ItemsPerPageSelectClient.tsx +58 -0
  218. package/src/app/components/shop/MobileFilters.tsx +103 -0
  219. package/src/app/components/shop/ProductGridSkeleton.tsx +16 -0
  220. package/src/app/components/shop/ProductsGrid.tsx +230 -0
  221. package/src/app/components/shop/SearchFilter.tsx +218 -0
  222. package/src/app/components/shop/SearchFilterClient.tsx +122 -0
  223. package/src/app/components/shop/SearchLoadingOverlay.tsx +32 -0
  224. package/src/app/components/shop/ShopMobileFilters.tsx +205 -0
  225. package/src/app/components/showroom/VehicleSearchDropdowns.tsx +187 -0
  226. package/src/app/components/showroom/brandsSwiper.tsx +49 -0
  227. package/src/app/components/showroom/brandsSwiperClient copy.tsx +93 -0
  228. package/src/app/components/showroom/brandsSwiperClient.tsx +122 -0
  229. package/src/app/components/showroom/brandsSwiperServer.tsx +42 -0
  230. package/src/app/components/showroom/bundleProducts.tsx +120 -0
  231. package/src/app/components/showroom/categoryGrid.tsx +51 -0
  232. package/src/app/components/showroom/categoryGridServer.tsx +45 -0
  233. package/src/app/components/showroom/categorySwiper.tsx +115 -0
  234. package/src/app/components/showroom/featureStrip.tsx +139 -0
  235. package/src/app/components/showroom/offersSwiper.tsx +181 -0
  236. package/src/app/components/showroom/productGrid.tsx +56 -0
  237. package/src/app/components/showroom/productSwiper.tsx +119 -0
  238. package/src/app/components/showroom/promotion-slider.tsx +138 -0
  239. package/src/app/components/showroom/promotion.tsx +207 -0
  240. package/src/app/components/showroom/promotionsSwiper.tsx +174 -0
  241. package/src/app/components/showroom/showroomHeroCarousel.tsx +141 -0
  242. package/src/app/components/showroom/testimonialsGrid.tsx +106 -0
  243. package/src/app/components/skeletons/ContentSkeleton.tsx +14 -0
  244. package/src/app/components/sortDropdown/index.tsx +116 -0
  245. package/src/app/components/tertiaryButton/index.tsx +25 -0
  246. package/src/app/components/theme/theme-provider.tsx +82 -0
  247. package/src/app/contact/layout.tsx +32 -0
  248. package/src/app/contact/page.tsx +591 -0
  249. package/src/app/content/[slug]/layout.tsx +17 -0
  250. package/src/app/content/[slug]/page.tsx +159 -0
  251. package/src/app/content/layout.tsx +31 -0
  252. package/src/app/content/page.tsx +88 -0
  253. package/src/app/core-policies/page.tsx +55 -0
  254. package/src/app/discounts/page.tsx +54 -0
  255. package/src/app/frequently-asked-questions/page.tsx +57 -0
  256. package/src/app/globals.css +440 -0
  257. package/src/app/hooks/useDealerLocations.ts +259 -0
  258. package/src/app/hooks/useGTMEngagement.ts +71 -0
  259. package/src/app/hooks/useGoogleAnalytics.ts +145 -0
  260. package/src/app/layout.tsx +149 -0
  261. package/src/app/not-found.tsx +31 -0
  262. package/src/app/order-confirmation/layout.tsx +19 -0
  263. package/src/app/order-confirmation/page.tsx +12 -0
  264. package/src/app/order-confirmation/summary.tsx +1775 -0
  265. package/src/app/page.tsx +194 -0
  266. package/src/app/privacy-policy/loading.tsx +17 -0
  267. package/src/app/privacy-policy/page.tsx +56 -0
  268. package/src/app/product/[id]/ProductDetailClient.tsx +2448 -0
  269. package/src/app/product/[id]/components/itemInquiryModal.tsx +461 -0
  270. package/src/app/product/[id]/layout.tsx +116 -0
  271. package/src/app/product/[id]/page.tsx +200 -0
  272. package/src/app/product/layout.tsx +15 -0
  273. package/src/app/products/all/AllProductsClient.tsx +743 -0
  274. package/src/app/products/all/page.tsx +176 -0
  275. package/src/app/products/components/shopEmptyState.tsx +29 -0
  276. package/src/app/request-return/layout.tsx +36 -0
  277. package/src/app/request-return/page.tsx +597 -0
  278. package/src/app/robots.txt/route.ts +27 -0
  279. package/src/app/search/layout.tsx +16 -0
  280. package/src/app/search/page.tsx +736 -0
  281. package/src/app/shipping-returns/page.tsx +60 -0
  282. package/src/app/site-map/layout.tsx +33 -0
  283. package/src/app/site-map/page.tsx +113 -0
  284. package/src/app/sitemap-index.xml/route.ts +20 -0
  285. package/src/app/sitemap.ts +10 -0
  286. package/src/app/terms-and-conditions/loading.tsx +17 -0
  287. package/src/app/terms-and-conditions/page.tsx +56 -0
  288. package/src/app/utils/appConfiguration.ts +327 -0
  289. package/src/app/utils/branding.ts +52 -0
  290. package/src/app/utils/configurationService.ts +202 -0
  291. package/src/app/utils/constant.tsx +242 -0
  292. package/src/app/utils/editorJsUtils.tsx +249 -0
  293. package/src/app/utils/functions.ts +146 -0
  294. package/src/app/utils/googleAnalytics.ts +168 -0
  295. package/src/app/utils/googleTagManager.ts +475 -0
  296. package/src/app/utils/ipDetection.ts +270 -0
  297. package/src/app/utils/serverConfigurationService.ts +209 -0
  298. package/src/app/utils/svgs/GridIcon.tsx +45 -0
  299. package/src/app/utils/svgs/account/myAccount/listDotIcon.tsx +3 -0
  300. package/src/app/utils/svgs/account/myAccount/tickIcon.tsx +10 -0
  301. package/src/app/utils/svgs/account/orderHistory/InfoIcon.tsx +49 -0
  302. package/src/app/utils/svgs/arrowDownIcon.tsx +17 -0
  303. package/src/app/utils/svgs/arrowIcon.tsx +25 -0
  304. package/src/app/utils/svgs/arrowUpIcon.tsx +16 -0
  305. package/src/app/utils/svgs/brandsSearchIcon.tsx +25 -0
  306. package/src/app/utils/svgs/cart/cartIcon.tsx +31 -0
  307. package/src/app/utils/svgs/cart/plusIcon.tsx +13 -0
  308. package/src/app/utils/svgs/cart/subtractIcon.tsx +13 -0
  309. package/src/app/utils/svgs/cart/successTickIcon.tsx +14 -0
  310. package/src/app/utils/svgs/chevronDownIcon.tsx +21 -0
  311. package/src/app/utils/svgs/closeEyeIcon.tsx +47 -0
  312. package/src/app/utils/svgs/crossIcon.tsx +25 -0
  313. package/src/app/utils/svgs/eyeIcon.tsx +29 -0
  314. package/src/app/utils/svgs/featureTag.tsx +20 -0
  315. package/src/app/utils/svgs/filterIcon.tsx +3 -0
  316. package/src/app/utils/svgs/globleIcon.tsx +41 -0
  317. package/src/app/utils/svgs/infoIcon.tsx +34 -0
  318. package/src/app/utils/svgs/listIcon.tsx +50 -0
  319. package/src/app/utils/svgs/logOutIcon.tsx +35 -0
  320. package/src/app/utils/svgs/menuIcon.tsx +8 -0
  321. package/src/app/utils/svgs/minusIcon.tsx +18 -0
  322. package/src/app/utils/svgs/newsletterIcon.tsx +19 -0
  323. package/src/app/utils/svgs/noDataFoundIcon-.tsx +26 -0
  324. package/src/app/utils/svgs/noProductFoundIcon.tsx +43 -0
  325. package/src/app/utils/svgs/passwordIcons/errorIcon.tsx +31 -0
  326. package/src/app/utils/svgs/passwordIcons/successIcon.tsx +24 -0
  327. package/src/app/utils/svgs/paymentProcessingIcons/hourglassIcon.tsx +43 -0
  328. package/src/app/utils/svgs/paymentProcessingIcons/modalCrossIcon.tsx +23 -0
  329. package/src/app/utils/svgs/paymentProcessingIcons/paymentFailedIcon.tsx +47 -0
  330. package/src/app/utils/svgs/pencilIcon.tsx +11 -0
  331. package/src/app/utils/svgs/plusIcon.tsx +25 -0
  332. package/src/app/utils/svgs/productInquiryIcon.tsx +40 -0
  333. package/src/app/utils/svgs/searchIcon.tsx +31 -0
  334. package/src/app/utils/svgs/shoppingCart.tsx +32 -0
  335. package/src/app/utils/svgs/spinnerIcon.tsx +22 -0
  336. package/src/app/utils/svgs/spinnerLoadingIcon.tsx +26 -0
  337. package/src/app/utils/svgs/successTickIcon.tsx +40 -0
  338. package/src/app/utils/svgs/swiperArrowIconLeft.tsx +18 -0
  339. package/src/app/utils/svgs/swiperArrowIconRight.tsx +18 -0
  340. package/src/app/utils/svgs/userProfileIcon.tsx +31 -0
  341. package/src/app/utils/svgs/warningCircleIcon.tsx +15 -0
  342. package/src/app/warranty/constant.tsx +63 -0
  343. package/src/app/warranty/loading.tsx +17 -0
  344. package/src/app/warranty/page.tsx +56 -0
  345. package/src/graphql/client.ts +288 -0
  346. package/src/graphql/mutations/accountAddressCreate.ts +56 -0
  347. package/src/graphql/mutations/accountAddressDelete.ts +23 -0
  348. package/src/graphql/mutations/accountAddressUpdate.ts +55 -0
  349. package/src/graphql/mutations/accountSetDefaultAddress.ts +32 -0
  350. package/src/graphql/mutations/accountUpdate.ts +34 -0
  351. package/src/graphql/mutations/changePassword.ts +25 -0
  352. package/src/graphql/mutations/checkout.ts +117 -0
  353. package/src/graphql/mutations/checkoutAddVoucher.ts +63 -0
  354. package/src/graphql/mutations/checkoutComplete.ts +79 -0
  355. package/src/graphql/mutations/checkoutCreate.ts +131 -0
  356. package/src/graphql/mutations/checkoutCustomerAttach.ts +50 -0
  357. package/src/graphql/mutations/checkoutEmailUpdate.ts +15 -0
  358. package/src/graphql/mutations/checkoutLineMetadataUpdate.ts +52 -0
  359. package/src/graphql/mutations/checkoutPaymentCreate.ts +82 -0
  360. package/src/graphql/mutations/paymentGatewayInitialize.ts +58 -0
  361. package/src/graphql/mutations/registerAccount.ts +65 -0
  362. package/src/graphql/mutations/requestPasswordReset.ts +32 -0
  363. package/src/graphql/mutations/setPassword.ts +49 -0
  364. package/src/graphql/mutations/signIn.ts +50 -0
  365. package/src/graphql/mutations/tokenRefresh.ts +19 -0
  366. package/src/graphql/mutations/updateCheckoutMetadata.ts +49 -0
  367. package/src/graphql/mutations/updateProfile.ts +18 -0
  368. package/src/graphql/mutations/willCallDeliveryMethod.ts +81 -0
  369. package/src/graphql/queries/checkout.ts +168 -0
  370. package/src/graphql/queries/findProductByOldSlug.ts +58 -0
  371. package/src/graphql/queries/getAboutPage.ts +24 -0
  372. package/src/graphql/queries/getAboutPageId.ts +9 -0
  373. package/src/graphql/queries/getAboutUs.ts +38 -0
  374. package/src/graphql/queries/getAddressInformation.ts +38 -0
  375. package/src/graphql/queries/getAllCategories.ts +41 -0
  376. package/src/graphql/queries/getAllCategoriesTree.ts +67 -0
  377. package/src/graphql/queries/getAllCategoriesWithProducts.ts +29 -0
  378. package/src/graphql/queries/getAllCollectionsWithProducts.ts +16 -0
  379. package/src/graphql/queries/getBlogs.ts +222 -0
  380. package/src/graphql/queries/getBrands.ts +17 -0
  381. package/src/graphql/queries/getBundles.ts +43 -0
  382. package/src/graphql/queries/getCategories.ts +20 -0
  383. package/src/graphql/queries/getChannels.ts +77 -0
  384. package/src/graphql/queries/getCheckoutQuestions.ts +115 -0
  385. package/src/graphql/queries/getCheckoutTermsAndConditions.ts +37 -0
  386. package/src/graphql/queries/getContactPage.ts +117 -0
  387. package/src/graphql/queries/getContentPage.ts +191 -0
  388. package/src/graphql/queries/getDiscountOffers.ts +18 -0
  389. package/src/graphql/queries/getDynamicPageBySlug.ts +251 -0
  390. package/src/graphql/queries/getFeaturedProducts.ts +48 -0
  391. package/src/graphql/queries/getHeroMetadata.ts +23 -0
  392. package/src/graphql/queries/getMenuBySlug.ts +84 -0
  393. package/src/graphql/queries/getMyProfile.ts +23 -0
  394. package/src/graphql/queries/getNewsletter.ts +122 -0
  395. package/src/graphql/queries/getNewsletterPage.ts +111 -0
  396. package/src/graphql/queries/getPageBySlug.ts +52 -0
  397. package/src/graphql/queries/getPageTypeId.ts +27 -0
  398. package/src/graphql/queries/getPaymentMethods.ts +61 -0
  399. package/src/graphql/queries/getProducts.ts +78 -0
  400. package/src/graphql/queries/getPromotions.ts +24 -0
  401. package/src/graphql/queries/getRequestReturnPage.ts +121 -0
  402. package/src/graphql/queries/getSiteInfo.ts +54 -0
  403. package/src/graphql/queries/getSocialLinks.ts +52 -0
  404. package/src/graphql/queries/getTestimonials.ts +25 -0
  405. package/src/graphql/queries/getUserWithCheckout.ts +27 -0
  406. package/src/graphql/queries/getVehicleMakes.ts +21 -0
  407. package/src/graphql/queries/getVehicleModels.ts +21 -0
  408. package/src/graphql/queries/getVehicleYears.ts +21 -0
  409. package/src/graphql/queries/meAddresses.ts +56 -0
  410. package/src/graphql/queries/myOrders.ts +37 -0
  411. package/src/graphql/queries/orderDetail.ts +231 -0
  412. package/src/graphql/queries/productDetailsById.ts +197 -0
  413. package/src/graphql/queries/productInquiry.ts +115 -0
  414. package/src/graphql/queries/productsByCategoriesAndCollections.ts +39 -0
  415. package/src/graphql/queries/willCallCollectionPoints.ts +55 -0
  416. package/src/graphql/server-client.ts +54 -0
  417. package/src/graphql/types/categories.ts +9 -0
  418. package/src/graphql/types/checkout.ts +168 -0
  419. package/src/graphql/types/offer.ts +12 -0
  420. package/src/graphql/types/product.ts +44 -0
  421. package/src/hooks/scrollPageTop.ts +9 -0
  422. package/src/hooks/serverNavbarData.ts +79 -0
  423. package/src/hooks/useCartSync.ts +24 -0
  424. package/src/hooks/useRecaptcha.ts +33 -0
  425. package/src/hooks/useTokenExpiration.ts +81 -0
  426. package/src/hooks/useVehicleData.ts +346 -0
  427. package/src/lib/api/kount.ts +165 -0
  428. package/src/lib/api/shop.ts +1445 -0
  429. package/src/lib/saleor/getSaleorApiUrl.ts +25 -0
  430. package/src/lib/schema.ts +303 -0
  431. package/src/lib/seo/extractTextFromEditorJs.ts +58 -0
  432. package/src/lib/seo/site.ts +10 -0
  433. package/src/lib/urls/normalizeInternalUrl.ts +53 -0
  434. package/src/middleware.ts +134 -0
  435. package/src/sitemaps/README.md +105 -0
  436. package/src/sitemaps/dynamic-pages-sitemap.ts +247 -0
  437. package/src/sitemaps/sitemap-index.ts +21 -0
  438. package/src/sitemaps/static-pages-sitemap.ts +36 -0
  439. package/src/store/useGlobalStore.tsx +1656 -0
  440. package/src/types/global.d.ts +148 -0
  441. package/tsconfig.json +27 -0
package/.env.example ADDED
@@ -0,0 +1,57 @@
1
+ # Core
2
+ NEXT_PUBLIC_API_URL="https://your-saleor-domain/graphql/"
3
+ NEXT_PUBLIC_SITE_URL="http://localhost:3000"
4
+ NEXT_PUBLIC_SALEOR_CHANNEL="default-channel"
5
+
6
+ # External configuration service (kept in this template)
7
+ # Used as the "tenant" identifier when calling the external config endpoint.
8
+ NEXT_PUBLIC_TENANT_NAME="your-tenant-slug"
9
+
10
+ # PartsLogic (YMM + fitment + option sets)
11
+ NEXT_PUBLIC_PARTSLOGIC_URL="https://your-partslogic-domain"
12
+
13
+ # Search service base URL
14
+ NEXT_PUBLIC_SEARCH_URL="https://your-search-service-domain"
15
+
16
+ # Storefront URL used by some payment return/cancel URLs (optional)
17
+ NEXT_PUBLIC_STOREFRONT_URL="http://localhost:3000"
18
+
19
+ # Branding
20
+ NEXT_PUBLIC_BRAND_NAME="AutoParts Store"
21
+ NEXT_PUBLIC_LOGO_URL="/Logo.png"
22
+ NEXT_PUBLIC_APP_ICON="/icons/appIcon.png"
23
+
24
+ # Theme
25
+ NEXT_PUBLIC_THEME_LAYOUT="showroom"
26
+ NEXT_PUBLIC_THEME_PALETTE="forest-green"
27
+
28
+ # Assets (optional)
29
+ NEXT_PUBLIC_ASSETS_BASE_URL=""
30
+
31
+ # Optional (Kount)
32
+ NEXT_PUBLIC_KOUNT_BASE_URL="https://kount.wsm-dev.com/api"
33
+
34
+ # next/image allowlist (optional)
35
+ # Comma-separated hostnames or URLs (https://cdn.example.com,images.example.com).
36
+ NEXT_PUBLIC_IMAGE_HOSTS=""
37
+
38
+ # Social links (optional)
39
+ NEXT_PUBLIC_SOCIAL_FACEBOOK_URL=""
40
+ NEXT_PUBLIC_SOCIAL_INSTAGRAM_URL=""
41
+
42
+ # Forms (optional)
43
+ # If you forward /api/form-submission to webhooks, restrict which domains can be called.
44
+ ALLOWED_WEBHOOK_DOMAINS="hooks.zapier.com,example.com"
45
+
46
+ # SMTP (optional)
47
+ # If set, form submissions will be emailed via SMTP.
48
+ SMTP_HOST=""
49
+ SMTP_PORT="587"
50
+ SMTP_SECURE="false"
51
+ SMTP_USER=""
52
+ SMTP_PASS=""
53
+ SMTP_FROM="no-reply@example.com"
54
+ SMTP_TO="leads@example.com"
55
+ SMTP_REPLY_TO=""
56
+ # Optional prefix for email subjects, e.g. "[Storefront]"
57
+ EMAIL_SUBJECT_PREFIX=""
@@ -0,0 +1,165 @@
1
+ # Apple Pay Quick Start Guide
2
+
3
+ ## ✅ Setup Complete!
4
+
5
+ The Apple Pay domain association file has been configured for your storefront.
6
+
7
+ ## What Was Done
8
+
9
+ 1. ✅ **Domain Association File Installed**
10
+ - File location: `public/.well-known/apple-developer-merchantid-domain-association`
11
+ - Accessible at: `https://your-domain.com/.well-known/apple-developer-merchantid-domain-association`
12
+
13
+ 2. ✅ **Next.js Configured**
14
+ - Added proper headers for the domain association file
15
+ - Content-Type: `application/octet-stream`
16
+ - Cache-Control configured
17
+
18
+ ## Next Steps
19
+
20
+ ### 1. Test File Accessibility
21
+
22
+ ```bash
23
+ # Start development server
24
+ npm run dev
25
+
26
+ # In another terminal, test file access
27
+ curl http://localhost:3000/.well-known/apple-developer-merchantid-domain-association
28
+
29
+ # Should return the certificate content (not 404)
30
+ ```
31
+
32
+ ### 2. Register Domain with PayPal
33
+
34
+ **Option A: Via PayPal App UI (Recommended)**
35
+
36
+ 1. Open Saleor Admin Dashboard
37
+ 2. Navigate to Apps → PayPal
38
+ 3. Find "Merchant Connection" section
39
+ 4. Scroll to "Apple Pay Domain Management"
40
+ 5. Enter your domain (e.g., `your-storefront.wsm-dev.com`)
41
+ 6. Click "Register Domain"
42
+ 7. Wait for status to show "VERIFIED" (usually takes a few minutes)
43
+
44
+ **Option B: Via API (Advanced)**
45
+
46
+ See `APPLE_PAY_SETUP.md` for API registration instructions.
47
+
48
+ ### 3. Verify Apple Pay is Working
49
+
50
+ 1. **Check merchant capabilities:**
51
+ - In PayPal app logs, look for: `✓ Apple Pay is ENABLED for merchant`
52
+ - Or look for warning: `✗ Apple Pay is DISABLED`
53
+
54
+ 2. **Open storefront in Safari:**
55
+ - Add items to cart
56
+ - Go to checkout
57
+ - Look for Apple Pay button (black button with Apple logo)
58
+
59
+ 3. **Test payment:**
60
+ - Click Apple Pay button
61
+ - Authenticate with Face ID/Touch ID
62
+ - Complete test payment
63
+
64
+ ## Troubleshooting
65
+
66
+ ### Apple Pay Button Not Showing
67
+
68
+ **Run Diagnostic:**
69
+
70
+ 1. Check browser console for errors
71
+ 2. Check PayPal app logs for:
72
+ ```
73
+ Google Pay readiness check
74
+ Apple Pay readiness check
75
+ ```
76
+
77
+ 3. Look for capability status:
78
+ ```
79
+ apple_pay_capability_status: "ACTIVE" (good)
80
+ apple_pay_capability_status: "NOT_FOUND" (needs enablement)
81
+ ```
82
+
83
+ **Common Issues:**
84
+
85
+ | Issue | Solution |
86
+ |-------|----------|
87
+ | Domain not accessible | Verify file at `/.well-known/apple-developer-merchantid-domain-association` returns 200 |
88
+ | Domain not registered | Register domain via PayPal app UI |
89
+ | Apple Pay capability not enabled | Contact PayPal support to enable APPLE_PAY capability |
90
+ | PAYMENT_METHODS not subscribed | Contact PayPal support to enable PAYMENT_METHODS product |
91
+ | Not using Safari | Apple Pay only works in Safari on Mac/iOS |
92
+
93
+ ### Check Logs
94
+
95
+ **In PayPal App:**
96
+
97
+ Look for these log messages:
98
+
99
+ ```
100
+ ✓ Apple Pay is ENABLED for merchant
101
+ - Shows Apple Pay is working
102
+
103
+ ✗ Apple Pay is DISABLED - capability not active
104
+ - Check merchant capabilities
105
+
106
+ ✗ Apple Pay is DISABLED - product requirements not met
107
+ - Contact PayPal support
108
+ ```
109
+
110
+ **In Storefront Console:**
111
+
112
+ ```javascript
113
+ // Check Apple Pay support
114
+ console.log(window.ApplePaySession ? 'Supported' : 'Not supported');
115
+ console.log(ApplePaySession.canMakePayments());
116
+ ```
117
+
118
+ ## Current Status
119
+
120
+ ### What's Working ✅
121
+
122
+ - Domain association file hosted
123
+ - Next.js configured to serve the file
124
+ - File accessible at correct path
125
+ - Proper headers configured
126
+
127
+ ### What You Need To Do 📋
128
+
129
+ 1. **Register your domain** with PayPal (via app UI or API)
130
+ 2. **Verify domain status** is "VERIFIED"
131
+ 3. **Enable Apple Pay capability** for merchant (if not already enabled)
132
+ 4. **Test payment flow** in Safari
133
+
134
+ ## Quick Reference
135
+
136
+ ### File Locations
137
+
138
+ ```
139
+ public/.well-known/apple-developer-merchantid-domain-association (✅ Installed)
140
+ ```
141
+
142
+ ### URLs
143
+
144
+ ```
145
+ Development: http://localhost:3000/.well-known/apple-developer-merchantid-domain-association
146
+ Production: https://your-domain.com/.well-known/apple-developer-merchantid-domain-association
147
+ ```
148
+
149
+ ### Documentation
150
+
151
+ - Full setup guide: `APPLE_PAY_SETUP.md`
152
+ - PayPal app docs: `apps/paypal/APPLE_PAY_IMPLEMENTATION_GUIDE.md`
153
+
154
+ ## Need Help?
155
+
156
+ 1. Check `APPLE_PAY_SETUP.md` for detailed instructions
157
+ 2. Check PayPal app logs for diagnostic information
158
+ 3. Contact PayPal Partner Support for capability enablement
159
+ 4. Check Apple Developer documentation for Apple Pay issues
160
+
161
+ ---
162
+
163
+ **Ready to test!** 🎉
164
+
165
+ Start your dev server and navigate to checkout to see if the Apple Pay button appears.
@@ -0,0 +1,331 @@
1
+ # Apple Pay Setup Guide for Storefront
2
+
3
+ ## Overview
4
+
5
+ This guide explains how to set up Apple Pay on your storefront to work with PayPal's Apple Pay integration.
6
+
7
+ ## Prerequisites
8
+
9
+ - Storefront running on HTTPS (required for Apple Pay)
10
+ - PayPal app configured with Apple Pay capability
11
+ - Domain accessible publicly
12
+
13
+ ---
14
+
15
+ ## Step 1: Host Apple Domain Association File
16
+
17
+ ### What is the Domain Association File?
18
+
19
+ The domain association file is a security file from Apple that proves your domain is authorized to process Apple Pay payments. PayPal provides this file for sandbox and production environments.
20
+
21
+ ### Sandbox Environment
22
+
23
+ The file is already placed in your storefront:
24
+
25
+ ```
26
+ public/.well-known/apple-developer-merchantid-domain-association
27
+ ```
28
+
29
+ This file is served at:
30
+ ```
31
+ https://your-domain.com/.well-known/apple-developer-merchantid-domain-association
32
+ ```
33
+
34
+ ### Verify File is Accessible
35
+
36
+ 1. **Start your development server:**
37
+ ```bash
38
+ npm run dev
39
+ # or
40
+ pnpm dev
41
+ ```
42
+
43
+ 2. **Test the file is accessible:**
44
+ ```bash
45
+ curl https://your-domain.com/.well-known/apple-developer-merchantid-domain-association
46
+ ```
47
+
48
+ You should see the file contents (a certificate).
49
+
50
+ 3. **Verify in browser:**
51
+ Navigate to: `https://your-domain.com/.well-known/apple-developer-merchantid-domain-association`
52
+
53
+ ### Important Notes
54
+
55
+ - ✅ The file must be served with `Content-Type: application/octet-stream` or `text/plain`
56
+ - ✅ No redirects - Apple rejects 3XX responses
57
+ - ✅ Must be accessible via HTTPS only
58
+ - ✅ Must be at the exact path `/.well-known/apple-developer-merchantid-domain-association`
59
+
60
+ ---
61
+
62
+ ## Step 2: Configure Next.js to Serve the File
63
+
64
+ Next.js automatically serves files from the `public` directory. The file will be available at:
65
+
66
+ ```
67
+ https://your-domain.com/.well-known/apple-developer-merchantid-domain-association
68
+ ```
69
+
70
+ ### Verify Next.js Configuration
71
+
72
+ Make sure your `next.config.js` doesn't block the `.well-known` directory:
73
+
74
+ ```javascript
75
+ // next.config.js
76
+ module.exports = {
77
+ // ... other config
78
+
79
+ // Ensure .well-known is not blocked
80
+ async headers() {
81
+ return [
82
+ {
83
+ source: '/.well-known/:path*',
84
+ headers: [
85
+ {
86
+ key: 'Content-Type',
87
+ value: 'application/octet-stream',
88
+ },
89
+ ],
90
+ },
91
+ ];
92
+ },
93
+ };
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Step 3: Register Domain with PayPal
99
+
100
+ After the file is hosted and accessible, register your domain with PayPal:
101
+
102
+ ### Option 1: Via PayPal App UI
103
+
104
+ 1. Navigate to the PayPal app in Saleor dashboard
105
+ 2. Go to Merchant Connection section
106
+ 3. Find "Apple Pay Domain Management"
107
+ 4. Enter your domain (e.g., `store.example.com`)
108
+ 5. Click "Register Domain"
109
+
110
+ ### Option 2: Via API (for testing)
111
+
112
+ ```bash
113
+ # Get access token
114
+ ACCESS_TOKEN=$(curl -X POST https://api-m.sandbox.paypal.com/v1/oauth2/token \
115
+ -H "Content-Type: application/x-www-form-urlencoded" \
116
+ -u "YOUR_CLIENT_ID:YOUR_CLIENT_SECRET" \
117
+ -d "grant_type=client_credentials" \
118
+ | jq -r '.access_token')
119
+
120
+ # Generate PayPal-Auth-Assertion header
121
+ # Format: base64({"alg":"none"}).base64({"iss":"YOUR_CLIENT_ID","payer_id":"MERCHANT_ID"}).
122
+ HEADER=$(echo -n '{"alg":"none"}' | base64)
123
+ PAYLOAD=$(echo -n '{"iss":"YOUR_CLIENT_ID","payer_id":"MERCHANT_ID"}' | base64)
124
+ AUTH_ASSERTION="${HEADER}.${PAYLOAD}."
125
+
126
+ # Register domain
127
+ curl -X POST https://api-m.sandbox.paypal.com/v1/customer/wallet-domains \
128
+ -H "Content-Type: application/json" \
129
+ -H "Authorization: Bearer $ACCESS_TOKEN" \
130
+ -H "PayPal-Auth-Assertion: $AUTH_ASSERTION" \
131
+ -d '{
132
+ "provider_type": "APPLE_PAY",
133
+ "domain": {
134
+ "name": "your-domain.com"
135
+ }
136
+ }'
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Step 4: Verify Domain Registration
142
+
143
+ ### Check Registration Status
144
+
145
+ ```bash
146
+ # Get registered domains
147
+ curl -X GET https://api-m.sandbox.paypal.com/v1/customer/wallet-domains \
148
+ -H "Authorization: Bearer $ACCESS_TOKEN" \
149
+ -H "PayPal-Auth-Assertion: $AUTH_ASSERTION"
150
+ ```
151
+
152
+ ### Expected Response
153
+
154
+ ```json
155
+ {
156
+ "domains": [
157
+ {
158
+ "provider_type": "APPLE_PAY",
159
+ "domain": {
160
+ "name": "your-domain.com"
161
+ },
162
+ "status": "VERIFIED",
163
+ "created_at": "2024-11-10T10:00:00Z",
164
+ "updated_at": "2024-11-10T10:05:00Z"
165
+ }
166
+ ]
167
+ }
168
+ ```
169
+
170
+ ### Domain Status Values
171
+
172
+ - `VERIFIED` ✅ - Domain verified by Apple, ready to use
173
+ - `PENDING` ⏳ - Verification in progress (usually completes in minutes)
174
+ - `DENIED` ❌ - Verification failed (check domain accessibility)
175
+
176
+ ---
177
+
178
+ ## Step 5: Test Apple Pay Button
179
+
180
+ 1. **Use Safari browser** (Apple Pay only works in Safari on Mac, or Safari/Chrome on iOS)
181
+
182
+ 2. **Navigate to checkout page** with items in cart
183
+
184
+ 3. **Look for Apple Pay button** - Should appear if:
185
+ - ✅ Device supports Apple Pay
186
+ - ✅ Domain is verified
187
+ - ✅ Merchant has Apple Pay capability enabled
188
+ - ✅ User has payment methods in Apple Wallet
189
+
190
+ 4. **Complete test transaction:**
191
+ - Click Apple Pay button
192
+ - Authenticate with Face ID/Touch ID
193
+ - Complete payment
194
+ - Verify order is created
195
+
196
+ ---
197
+
198
+ ## Troubleshooting
199
+
200
+ ### Apple Pay Button Not Showing
201
+
202
+ **Check 1: Browser Compatibility**
203
+ ```javascript
204
+ // In browser console
205
+ console.log(window.ApplePaySession ? 'Supported' : 'Not supported');
206
+ console.log(ApplePaySession.canMakePayments());
207
+ ```
208
+
209
+ **Check 2: Domain Association File**
210
+ ```bash
211
+ curl -I https://your-domain.com/.well-known/apple-developer-merchantid-domain-association
212
+ # Should return 200 OK
213
+ ```
214
+
215
+ **Check 3: Domain Registration Status**
216
+ - Log into PayPal app
217
+ - Check Apple Pay Domain Management section
218
+ - Verify domain shows "VERIFIED" status
219
+
220
+ **Check 4: Merchant Capability**
221
+ - Verify merchant has `APPLE_PAY` capability active
222
+ - Check PayPal app logs for capability status
223
+
224
+ ### Domain Verification Failed
225
+
226
+ **Common Causes:**
227
+
228
+ 1. **File not accessible:**
229
+ ```bash
230
+ # Test accessibility
231
+ curl https://your-domain.com/.well-known/apple-developer-merchantid-domain-association
232
+ ```
233
+
234
+ 2. **Wrong content type:**
235
+ - Should be `application/octet-stream` or `text/plain`
236
+ - Check your Next.js headers configuration
237
+
238
+ 3. **Redirect issues:**
239
+ - Apple rejects 3XX redirects
240
+ - Ensure direct access to the file
241
+
242
+ 4. **HTTPS not working:**
243
+ - Apple Pay requires valid HTTPS
244
+ - Check SSL certificate is valid
245
+
246
+ ### Payment Authorization Failed
247
+
248
+ 1. **Check merchant configuration:**
249
+ - Verify merchant ID in PayPal app
250
+ - Ensure Apple Pay capability is active
251
+
252
+ 2. **Check logs:**
253
+ ```bash
254
+ # In storefront
255
+ # Check browser console for errors
256
+
257
+ # In PayPal app
258
+ # Check logs for Apple Pay session errors
259
+ ```
260
+
261
+ 3. **Verify token format:**
262
+ - Ensure Apple Pay token is correctly passed to PayPal
263
+ - Check token structure matches PayPal requirements
264
+
265
+ ---
266
+
267
+ ## Production Deployment
268
+
269
+ ### Production Domain Association File
270
+
271
+ For production:
272
+
273
+ 1. **Download production file** from PayPal:
274
+ - URL: https://www.paypal.com/bizsignup/assets/ppcp/apple-developer-merchantid-domain-association
275
+
276
+ 2. **Replace sandbox file:**
277
+ ```bash
278
+ # Download production file
279
+ curl https://www.paypal.com/bizsignup/assets/ppcp/apple-developer-merchantid-domain-association \
280
+ -o public/.well-known/apple-developer-merchantid-domain-association
281
+ ```
282
+
283
+ 3. **Register production domain:**
284
+ - Use production PayPal API: `https://api-m.paypal.com`
285
+ - Use production credentials
286
+ - Register your production domain
287
+
288
+ ### Production Checklist
289
+
290
+ - [ ] Production domain association file hosted
291
+ - [ ] File accessible via HTTPS (no redirects)
292
+ - [ ] Domain registered with PayPal production API
293
+ - [ ] Domain status is "VERIFIED"
294
+ - [ ] Merchant has Apple Pay capability in production
295
+ - [ ] SSL certificate valid and not expiring soon
296
+ - [ ] Tested Apple Pay payment flow end-to-end
297
+ - [ ] Verified refund flow works
298
+ - [ ] Customer support trained on Apple Pay
299
+
300
+ ---
301
+
302
+ ## Additional Resources
303
+
304
+ ### PayPal Documentation
305
+
306
+ - [Apple Pay Integration Guide](https://developer.paypal.com/docs/multiparty/checkout/apm/apple-pay/)
307
+ - [Wallet Domains API Reference](https://developer.paypal.com/api/rest/reference/wallet/v1/wallet-domains/)
308
+
309
+ ### Apple Documentation
310
+
311
+ - [Apple Pay on the Web](https://developer.apple.com/documentation/apple_pay_on_the_web)
312
+ - [Apple Pay JS API](https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api)
313
+
314
+ ### Support
315
+
316
+ - **PayPal Partner Support**: Contact for capability enablement
317
+ - **Apple Developer Support**: For Apple Pay specific issues
318
+ - **PayPal App Logs**: Check for detailed error messages and debug IDs
319
+
320
+ ---
321
+
322
+ ## Summary
323
+
324
+ ✅ **Setup Complete When:**
325
+ 1. Domain association file is hosted and accessible
326
+ 2. Domain registered with PayPal wallet-domains API
327
+ 3. Domain status shows "VERIFIED"
328
+ 4. Apple Pay button appears on checkout
329
+ 5. Test payment completes successfully
330
+
331
+ 🎉 **Your storefront is now ready to accept Apple Pay payments!**
package/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # Saleor Advance Template
2
+
3
+ Next.js storefront template for Saleor with:
4
+ - PartsLogic-driven YMM (fitment groups)
5
+ - Fitment-required vs universal products (driven by PartsLogic)
6
+ - Product option sets (including multi-value option sets) driven by PartsLogic
7
+ - Saleor Pages for static pages (T&C, Shipping & Returns, etc.)
8
+ - Checkout with checkout questions, PayPal, Affirm, and ship-to-dealer/will-call support (via Saleor shipping methods + custom app)
9
+ - Inquiries/forms/applications
10
+
11
+ ## Quickstart
12
+
13
+ 1. Copy `.env.example` to `.env.local` and fill values
14
+ 2. Install and run
15
+
16
+ ```bash
17
+ yarn install
18
+ yarn dev
19
+ ```
20
+
21
+ ## Required Environment Variables
22
+
23
+ - `NEXT_PUBLIC_API_URL`
24
+ - `NEXT_PUBLIC_SITE_URL` (use `http://localhost:3000` for local dev)
25
+ - `NEXT_PUBLIC_SALEOR_CHANNEL`
26
+ - `NEXT_PUBLIC_TENANT_NAME` (used by external configuration service)
27
+ - `NEXT_PUBLIC_PARTSLOGIC_URL`
28
+ - `NEXT_PUBLIC_SEARCH_URL`
29
+
30
+ ## Optional Environment Variables
31
+
32
+ - `NEXT_PUBLIC_STOREFRONT_URL` (used for some payment return/cancel URLs; defaults to request origin)
33
+ - `NEXT_PUBLIC_THEME_LAYOUT`
34
+ - `NEXT_PUBLIC_THEME_PALETTE`
35
+ - `NEXT_PUBLIC_BRAND_NAME`
36
+ - `NEXT_PUBLIC_LOGO_URL`
37
+ - `NEXT_PUBLIC_APP_ICON`
38
+ - `NEXT_PUBLIC_ASSETS_BASE_URL`
39
+ - `NEXT_PUBLIC_IMAGE_HOSTS`
40
+ - `ALLOWED_WEBHOOK_DOMAINS`
41
+ - `NEXT_PUBLIC_KOUNT_BASE_URL`
42
+
43
+ ## Notes
44
+
45
+ - This repo is intended to be **single-tenant per deployment**.
46
+ - Redirect migration has been intentionally removed from the template.