@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.
- package/.env.example +57 -0
- package/APPLE_PAY_QUICK_START.md +165 -0
- package/APPLE_PAY_SETUP.md +331 -0
- package/README.md +46 -0
- package/SEO_AUDIT_CHECKLIST_STATUS.md +244 -0
- package/SEO_AUDIT_REPORT.md +66 -0
- package/eslint.config.mjs +16 -0
- package/next-env.d.ts +5 -0
- package/next.config.ts +109 -0
- package/package.json +47 -0
- package/postcss.config.mjs +5 -0
- package/public/.well-known/apple-developer-merchantid-domain-association +1 -0
- package/public/Logo.png +0 -0
- package/public/brand-video.mp4 +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +1 -0
- package/public/footer/facebook.tsx +34 -0
- package/public/footer/instagram.tsx +27 -0
- package/public/footer/mail.tsx +5 -0
- package/public/footer/x.tsx +35 -0
- package/public/globe.svg +1 -0
- package/public/icons/Authorize.net.webp +0 -0
- package/public/icons/amex.gif +0 -0
- package/public/icons/appIcon.png +0 -0
- package/public/icons/discover.gif +0 -0
- package/public/icons/master.gif +0 -0
- package/public/icons/paypal.png +0 -0
- package/public/icons/stripe.png +0 -0
- package/public/icons/visa.gif +0 -0
- package/public/images/BackgroundNoise.png +0 -0
- package/public/images/footer-background.png +0 -0
- package/public/next.svg +1 -0
- package/public/no-image-avail-large.png +0 -0
- package/public/random-car-1.jpeg +0 -0
- package/public/random-car-2.png +0 -0
- package/public/random-car-3.jpg +0 -0
- package/public/random-car-4.jpg +0 -0
- package/public/random-car-5.jpg +0 -0
- package/public/star.svg +3 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/scripts/seo-audit/generate-checklist.mjs +156 -0
- package/src/app/(auth)/account/forgot-password/layout.tsx +16 -0
- package/src/app/(auth)/account/forgot-password/page.tsx +135 -0
- package/src/app/(auth)/account/login/layout.tsx +16 -0
- package/src/app/(auth)/account/login/page.tsx +288 -0
- package/src/app/(auth)/account/otp/layout.tsx +16 -0
- package/src/app/(auth)/account/otp/page.tsx +108 -0
- package/src/app/(auth)/account/register/layout.tsx +16 -0
- package/src/app/(auth)/account/register/page.tsx +431 -0
- package/src/app/(auth)/account/reset-password/layout.tsx +16 -0
- package/src/app/(auth)/account/reset-password/page.tsx +222 -0
- package/src/app/[slug]/page.tsx +43 -0
- package/src/app/about/loading.tsx +17 -0
- package/src/app/about/page.tsx +61 -0
- package/src/app/account/address/layout.tsx +15 -0
- package/src/app/account/address/page.tsx +166 -0
- package/src/app/account/head.tsx +4 -0
- package/src/app/account/layout.tsx +62 -0
- package/src/app/account/orders/[id]/layout.tsx +17 -0
- package/src/app/account/orders/[id]/page.tsx +115 -0
- package/src/app/account/orders/components/orderDetailsModal.tsx +410 -0
- package/src/app/account/orders/layout.tsx +15 -0
- package/src/app/account/orders/page.tsx +146 -0
- package/src/app/account/page.tsx +39 -0
- package/src/app/account/settings/components/editProfileSuccessModal.tsx +28 -0
- package/src/app/account/settings/layout.tsx +15 -0
- package/src/app/account/settings/page.tsx +260 -0
- package/src/app/api/affirm/check-status/route.ts +94 -0
- package/src/app/api/affirm/create-checkout/route.ts +109 -0
- package/src/app/api/affirm/get-config/route.ts +108 -0
- package/src/app/api/affirm/process-payment/route.ts +244 -0
- package/src/app/api/affirm/test-connection/route.ts +45 -0
- package/src/app/api/auth/clear/route.ts +16 -0
- package/src/app/api/auth/clear-cookies/route.ts +42 -0
- package/src/app/api/auth/set/route.ts +47 -0
- package/src/app/api/configuration/route.ts +18 -0
- package/src/app/api/dynamic-page/[slug]/route.ts +24 -0
- package/src/app/api/form-submission/route.ts +237 -0
- package/src/app/api/paypal/capture-order/route.ts +303 -0
- package/src/app/api/paypal/create-order/route.ts +211 -0
- package/src/app/api/paypal/get-config/route.ts +240 -0
- package/src/app/api/search-proxy/route.ts +52 -0
- package/src/app/authorize-net-success/layout.tsx +19 -0
- package/src/app/authorize-net-success/page.tsx +12 -0
- package/src/app/authorize-net-success/summary.tsx +486 -0
- package/src/app/blog/[slug]/blogContentRenderer.tsx +369 -0
- package/src/app/blog/[slug]/layout.tsx +17 -0
- package/src/app/blog/[slug]/page.tsx +151 -0
- package/src/app/blog/constant.tsx +147 -0
- package/src/app/blog/layout.tsx +31 -0
- package/src/app/blog/page.tsx +81 -0
- package/src/app/brand/[id]/BrandPageClient.tsx +188 -0
- package/src/app/brand/[id]/layout.tsx +17 -0
- package/src/app/brand/[id]/page.tsx +176 -0
- package/src/app/brands/components/brandsListingClient.tsx +97 -0
- package/src/app/brands/layout.tsx +31 -0
- package/src/app/brands/page.tsx +40 -0
- package/src/app/cancellation-policy/page.tsx +53 -0
- package/src/app/cart/layout.tsx +19 -0
- package/src/app/cart/page.tsx +752 -0
- package/src/app/category/[slug]/CategoryPageClient.tsx +377 -0
- package/src/app/category/[slug]/layout.tsx +17 -0
- package/src/app/category/[slug]/page.tsx +224 -0
- package/src/app/category/page.tsx +114 -0
- package/src/app/checkout/components/addNewAddressModal.tsx +474 -0
- package/src/app/checkout/layout.tsx +19 -0
- package/src/app/checkout/page.tsx +3312 -0
- package/src/app/components/account/AccountTabs.tsx +40 -0
- package/src/app/components/ads/GoogleAdSense.tsx +74 -0
- package/src/app/components/analytics/AnalyticsScripts.tsx +78 -0
- package/src/app/components/analytics/ConditionalGTMNoscript.tsx +24 -0
- package/src/app/components/analytics/ConditionalGoogleAnalytics.tsx +16 -0
- package/src/app/components/ancillary/AncillaryContent.tsx +7 -0
- package/src/app/components/auth/TokenExpirationHandler.tsx +8 -0
- package/src/app/components/blog/BlogList.tsx +112 -0
- package/src/app/components/checkout/AddressInformationSection.tsx +34 -0
- package/src/app/components/checkout/AddressManagement.tsx +571 -0
- package/src/app/components/checkout/CheckoutHeader.tsx +51 -0
- package/src/app/components/checkout/CheckoutQuestions.tsx +454 -0
- package/src/app/components/checkout/CheckoutTermsModal.tsx +81 -0
- package/src/app/components/checkout/ContactDetailsSection.tsx +52 -0
- package/src/app/components/checkout/DealerShippingSection.tsx +359 -0
- package/src/app/components/checkout/DeliveryMethodSection.tsx +249 -0
- package/src/app/components/checkout/OrderSummary.tsx +386 -0
- package/src/app/components/checkout/TermsContentRenderer.tsx +147 -0
- package/src/app/components/checkout/WillCallSection.tsx +133 -0
- package/src/app/components/checkout/affirmPayment.tsx +383 -0
- package/src/app/components/checkout/checkoutProcessingModal.tsx +96 -0
- package/src/app/components/checkout/googlePayButton.tsx +334 -0
- package/src/app/components/checkout/paymentStep.tsx +180 -0
- package/src/app/components/checkout/paypalPayment.tsx +1083 -0
- package/src/app/components/checkout/saleorNativePayment.tsx +1758 -0
- package/src/app/components/dynamicPage/DynamicPageRenderer.tsx +13 -0
- package/src/app/components/dynamicPage/HtmlWidgetRenderer.tsx +144 -0
- package/src/app/components/filtersCollapsible/index.tsx +365 -0
- package/src/app/components/globalSearch/index.tsx +423 -0
- package/src/app/components/layout/cartDropDown.tsx +628 -0
- package/src/app/components/layout/components/FooterNewsletter.tsx +21 -0
- package/src/app/components/layout/footer.tsx +283 -0
- package/src/app/components/layout/header/accountMenuDropdown.tsx +53 -0
- package/src/app/components/layout/header/components/CartBadge.tsx +18 -0
- package/src/app/components/layout/header/components/LoadingState.tsx +17 -0
- package/src/app/components/layout/header/components/MenuItemDropdown.tsx +124 -0
- package/src/app/components/layout/header/components/MobileNavbar.tsx +123 -0
- package/src/app/components/layout/header/components/NavbarActions.tsx +125 -0
- package/src/app/components/layout/header/components/NavbarBrand.tsx +29 -0
- package/src/app/components/layout/header/components/NavigationLinks.tsx +131 -0
- package/src/app/components/layout/header/hamMenuSlide.tsx +318 -0
- package/src/app/components/layout/header/header.tsx +44 -0
- package/src/app/components/layout/header/hooks/useDropdown.ts +45 -0
- package/src/app/components/layout/header/hooks/useNavbarData.ts +138 -0
- package/src/app/components/layout/header/hooks/useNavbarState.ts +66 -0
- package/src/app/components/layout/header/megaMenuDropdown.tsx +116 -0
- package/src/app/components/layout/header/navBar.tsx +121 -0
- package/src/app/components/layout/header/search.tsx +418 -0
- package/src/app/components/layout/header/styles/navbarStyles.ts +27 -0
- package/src/app/components/layout/header/topBar.tsx +214 -0
- package/src/app/components/layout/joinNewsletterForm/index.tsx +72 -0
- package/src/app/components/layout/mobileAccordian/index.tsx +92 -0
- package/src/app/components/layout/paymentMethods.tsx +75 -0
- package/src/app/components/layout/rootLayout.tsx +23 -0
- package/src/app/components/layout/siteInfo.tsx +103 -0
- package/src/app/components/layout/socialLinks.tsx +65 -0
- package/src/app/components/newsletterSection/emailListSection.tsx +224 -0
- package/src/app/components/newsletterSection/emailSectionServer.tsx +8 -0
- package/src/app/components/providers/ApolloWrapper.tsx +12 -0
- package/src/app/components/providers/AppConfigurationProvider.tsx +108 -0
- package/src/app/components/providers/GoogleAnalyticsProvider.tsx +149 -0
- package/src/app/components/providers/GoogleTagManagerProvider.tsx +31 -0
- package/src/app/components/providers/RecaptchaProvider.tsx +18 -0
- package/src/app/components/providers/ServerAppConfigurationProvider.tsx +133 -0
- package/src/app/components/providers/YMMStatusProvider.tsx +15 -0
- package/src/app/components/reuseableUI/AboutUs.tsx +115 -0
- package/src/app/components/reuseableUI/AddToCartClient.tsx +125 -0
- package/src/app/components/reuseableUI/EditorJsRenderer.tsx +219 -0
- package/src/app/components/reuseableUI/HeroSectionsearchByVehicle.tsx +188 -0
- package/src/app/components/reuseableUI/ImageWithFallback.tsx +41 -0
- package/src/app/components/reuseableUI/Toast.tsx +101 -0
- package/src/app/components/reuseableUI/blogCard.tsx +52 -0
- package/src/app/components/reuseableUI/brandCard.tsx +68 -0
- package/src/app/components/reuseableUI/breadcrumb.tsx +38 -0
- package/src/app/components/reuseableUI/categoryCard.tsx +37 -0
- package/src/app/components/reuseableUI/categorySkeleton.tsx +31 -0
- package/src/app/components/reuseableUI/commonButton.tsx +48 -0
- package/src/app/components/reuseableUI/defaultInputField/index.tsx +84 -0
- package/src/app/components/reuseableUI/emptyState.tsx +29 -0
- package/src/app/components/reuseableUI/errorTag.tsx +15 -0
- package/src/app/components/reuseableUI/heading/index.tsx +20 -0
- package/src/app/components/reuseableUI/input.tsx +117 -0
- package/src/app/components/reuseableUI/listCard.tsx +137 -0
- package/src/app/components/reuseableUI/loadingUI.tsx +12 -0
- package/src/app/components/reuseableUI/modalLayout.tsx +76 -0
- package/src/app/components/reuseableUI/newsletter/newsletterClient.tsx +622 -0
- package/src/app/components/reuseableUI/newsletter/newslettersHomeModal.tsx +68 -0
- package/src/app/components/reuseableUI/offerCard.tsx +42 -0
- package/src/app/components/reuseableUI/passwordRules/passwordRules.tsx +56 -0
- package/src/app/components/reuseableUI/primaryButton/index.tsx +34 -0
- package/src/app/components/reuseableUI/productCard.tsx +118 -0
- package/src/app/components/reuseableUI/productSkeleton.tsx +34 -0
- package/src/app/components/reuseableUI/searchByVehicle.tsx +187 -0
- package/src/app/components/reuseableUI/secondaryButton/index.tsx +34 -0
- package/src/app/components/reuseableUI/section.tsx +20 -0
- package/src/app/components/reuseableUI/select/index.tsx +98 -0
- package/src/app/components/reuseableUI/skeletonLoader.tsx +117 -0
- package/src/app/components/reuseableUI/statusTag.tsx +24 -0
- package/src/app/components/reuseableUI/tags/saleTag.tsx +19 -0
- package/src/app/components/reuseableUI/testimonialCard.tsx +93 -0
- package/src/app/components/richText/EditorRenderer.tsx +318 -0
- package/src/app/components/search/HierarchicalCategoryFilter.tsx +155 -0
- package/src/app/components/search/SearchFilters.tsx +155 -0
- package/src/app/components/search/YMMSearchSidebar.tsx +187 -0
- package/src/app/components/seo/ServerProductCard.tsx +91 -0
- package/src/app/components/seo/ServerProductGrid.tsx +45 -0
- package/src/app/components/shop/CategoryFilter.tsx +184 -0
- package/src/app/components/shop/ItemsPerPageSelect.tsx +69 -0
- package/src/app/components/shop/ItemsPerPageSelectClient.tsx +58 -0
- package/src/app/components/shop/MobileFilters.tsx +103 -0
- package/src/app/components/shop/ProductGridSkeleton.tsx +16 -0
- package/src/app/components/shop/ProductsGrid.tsx +230 -0
- package/src/app/components/shop/SearchFilter.tsx +218 -0
- package/src/app/components/shop/SearchFilterClient.tsx +122 -0
- package/src/app/components/shop/SearchLoadingOverlay.tsx +32 -0
- package/src/app/components/shop/ShopMobileFilters.tsx +205 -0
- package/src/app/components/showroom/VehicleSearchDropdowns.tsx +187 -0
- package/src/app/components/showroom/brandsSwiper.tsx +49 -0
- package/src/app/components/showroom/brandsSwiperClient copy.tsx +93 -0
- package/src/app/components/showroom/brandsSwiperClient.tsx +122 -0
- package/src/app/components/showroom/brandsSwiperServer.tsx +42 -0
- package/src/app/components/showroom/bundleProducts.tsx +120 -0
- package/src/app/components/showroom/categoryGrid.tsx +51 -0
- package/src/app/components/showroom/categoryGridServer.tsx +45 -0
- package/src/app/components/showroom/categorySwiper.tsx +115 -0
- package/src/app/components/showroom/featureStrip.tsx +139 -0
- package/src/app/components/showroom/offersSwiper.tsx +181 -0
- package/src/app/components/showroom/productGrid.tsx +56 -0
- package/src/app/components/showroom/productSwiper.tsx +119 -0
- package/src/app/components/showroom/promotion-slider.tsx +138 -0
- package/src/app/components/showroom/promotion.tsx +207 -0
- package/src/app/components/showroom/promotionsSwiper.tsx +174 -0
- package/src/app/components/showroom/showroomHeroCarousel.tsx +141 -0
- package/src/app/components/showroom/testimonialsGrid.tsx +106 -0
- package/src/app/components/skeletons/ContentSkeleton.tsx +14 -0
- package/src/app/components/sortDropdown/index.tsx +116 -0
- package/src/app/components/tertiaryButton/index.tsx +25 -0
- package/src/app/components/theme/theme-provider.tsx +82 -0
- package/src/app/contact/layout.tsx +32 -0
- package/src/app/contact/page.tsx +591 -0
- package/src/app/content/[slug]/layout.tsx +17 -0
- package/src/app/content/[slug]/page.tsx +159 -0
- package/src/app/content/layout.tsx +31 -0
- package/src/app/content/page.tsx +88 -0
- package/src/app/core-policies/page.tsx +55 -0
- package/src/app/discounts/page.tsx +54 -0
- package/src/app/frequently-asked-questions/page.tsx +57 -0
- package/src/app/globals.css +440 -0
- package/src/app/hooks/useDealerLocations.ts +259 -0
- package/src/app/hooks/useGTMEngagement.ts +71 -0
- package/src/app/hooks/useGoogleAnalytics.ts +145 -0
- package/src/app/layout.tsx +149 -0
- package/src/app/not-found.tsx +31 -0
- package/src/app/order-confirmation/layout.tsx +19 -0
- package/src/app/order-confirmation/page.tsx +12 -0
- package/src/app/order-confirmation/summary.tsx +1775 -0
- package/src/app/page.tsx +194 -0
- package/src/app/privacy-policy/loading.tsx +17 -0
- package/src/app/privacy-policy/page.tsx +56 -0
- package/src/app/product/[id]/ProductDetailClient.tsx +2448 -0
- package/src/app/product/[id]/components/itemInquiryModal.tsx +461 -0
- package/src/app/product/[id]/layout.tsx +116 -0
- package/src/app/product/[id]/page.tsx +200 -0
- package/src/app/product/layout.tsx +15 -0
- package/src/app/products/all/AllProductsClient.tsx +743 -0
- package/src/app/products/all/page.tsx +176 -0
- package/src/app/products/components/shopEmptyState.tsx +29 -0
- package/src/app/request-return/layout.tsx +36 -0
- package/src/app/request-return/page.tsx +597 -0
- package/src/app/robots.txt/route.ts +27 -0
- package/src/app/search/layout.tsx +16 -0
- package/src/app/search/page.tsx +736 -0
- package/src/app/shipping-returns/page.tsx +60 -0
- package/src/app/site-map/layout.tsx +33 -0
- package/src/app/site-map/page.tsx +113 -0
- package/src/app/sitemap-index.xml/route.ts +20 -0
- package/src/app/sitemap.ts +10 -0
- package/src/app/terms-and-conditions/loading.tsx +17 -0
- package/src/app/terms-and-conditions/page.tsx +56 -0
- package/src/app/utils/appConfiguration.ts +327 -0
- package/src/app/utils/branding.ts +52 -0
- package/src/app/utils/configurationService.ts +202 -0
- package/src/app/utils/constant.tsx +242 -0
- package/src/app/utils/editorJsUtils.tsx +249 -0
- package/src/app/utils/functions.ts +146 -0
- package/src/app/utils/googleAnalytics.ts +168 -0
- package/src/app/utils/googleTagManager.ts +475 -0
- package/src/app/utils/ipDetection.ts +270 -0
- package/src/app/utils/serverConfigurationService.ts +209 -0
- package/src/app/utils/svgs/GridIcon.tsx +45 -0
- package/src/app/utils/svgs/account/myAccount/listDotIcon.tsx +3 -0
- package/src/app/utils/svgs/account/myAccount/tickIcon.tsx +10 -0
- package/src/app/utils/svgs/account/orderHistory/InfoIcon.tsx +49 -0
- package/src/app/utils/svgs/arrowDownIcon.tsx +17 -0
- package/src/app/utils/svgs/arrowIcon.tsx +25 -0
- package/src/app/utils/svgs/arrowUpIcon.tsx +16 -0
- package/src/app/utils/svgs/brandsSearchIcon.tsx +25 -0
- package/src/app/utils/svgs/cart/cartIcon.tsx +31 -0
- package/src/app/utils/svgs/cart/plusIcon.tsx +13 -0
- package/src/app/utils/svgs/cart/subtractIcon.tsx +13 -0
- package/src/app/utils/svgs/cart/successTickIcon.tsx +14 -0
- package/src/app/utils/svgs/chevronDownIcon.tsx +21 -0
- package/src/app/utils/svgs/closeEyeIcon.tsx +47 -0
- package/src/app/utils/svgs/crossIcon.tsx +25 -0
- package/src/app/utils/svgs/eyeIcon.tsx +29 -0
- package/src/app/utils/svgs/featureTag.tsx +20 -0
- package/src/app/utils/svgs/filterIcon.tsx +3 -0
- package/src/app/utils/svgs/globleIcon.tsx +41 -0
- package/src/app/utils/svgs/infoIcon.tsx +34 -0
- package/src/app/utils/svgs/listIcon.tsx +50 -0
- package/src/app/utils/svgs/logOutIcon.tsx +35 -0
- package/src/app/utils/svgs/menuIcon.tsx +8 -0
- package/src/app/utils/svgs/minusIcon.tsx +18 -0
- package/src/app/utils/svgs/newsletterIcon.tsx +19 -0
- package/src/app/utils/svgs/noDataFoundIcon-.tsx +26 -0
- package/src/app/utils/svgs/noProductFoundIcon.tsx +43 -0
- package/src/app/utils/svgs/passwordIcons/errorIcon.tsx +31 -0
- package/src/app/utils/svgs/passwordIcons/successIcon.tsx +24 -0
- package/src/app/utils/svgs/paymentProcessingIcons/hourglassIcon.tsx +43 -0
- package/src/app/utils/svgs/paymentProcessingIcons/modalCrossIcon.tsx +23 -0
- package/src/app/utils/svgs/paymentProcessingIcons/paymentFailedIcon.tsx +47 -0
- package/src/app/utils/svgs/pencilIcon.tsx +11 -0
- package/src/app/utils/svgs/plusIcon.tsx +25 -0
- package/src/app/utils/svgs/productInquiryIcon.tsx +40 -0
- package/src/app/utils/svgs/searchIcon.tsx +31 -0
- package/src/app/utils/svgs/shoppingCart.tsx +32 -0
- package/src/app/utils/svgs/spinnerIcon.tsx +22 -0
- package/src/app/utils/svgs/spinnerLoadingIcon.tsx +26 -0
- package/src/app/utils/svgs/successTickIcon.tsx +40 -0
- package/src/app/utils/svgs/swiperArrowIconLeft.tsx +18 -0
- package/src/app/utils/svgs/swiperArrowIconRight.tsx +18 -0
- package/src/app/utils/svgs/userProfileIcon.tsx +31 -0
- package/src/app/utils/svgs/warningCircleIcon.tsx +15 -0
- package/src/app/warranty/constant.tsx +63 -0
- package/src/app/warranty/loading.tsx +17 -0
- package/src/app/warranty/page.tsx +56 -0
- package/src/graphql/client.ts +288 -0
- package/src/graphql/mutations/accountAddressCreate.ts +56 -0
- package/src/graphql/mutations/accountAddressDelete.ts +23 -0
- package/src/graphql/mutations/accountAddressUpdate.ts +55 -0
- package/src/graphql/mutations/accountSetDefaultAddress.ts +32 -0
- package/src/graphql/mutations/accountUpdate.ts +34 -0
- package/src/graphql/mutations/changePassword.ts +25 -0
- package/src/graphql/mutations/checkout.ts +117 -0
- package/src/graphql/mutations/checkoutAddVoucher.ts +63 -0
- package/src/graphql/mutations/checkoutComplete.ts +79 -0
- package/src/graphql/mutations/checkoutCreate.ts +131 -0
- package/src/graphql/mutations/checkoutCustomerAttach.ts +50 -0
- package/src/graphql/mutations/checkoutEmailUpdate.ts +15 -0
- package/src/graphql/mutations/checkoutLineMetadataUpdate.ts +52 -0
- package/src/graphql/mutations/checkoutPaymentCreate.ts +82 -0
- package/src/graphql/mutations/paymentGatewayInitialize.ts +58 -0
- package/src/graphql/mutations/registerAccount.ts +65 -0
- package/src/graphql/mutations/requestPasswordReset.ts +32 -0
- package/src/graphql/mutations/setPassword.ts +49 -0
- package/src/graphql/mutations/signIn.ts +50 -0
- package/src/graphql/mutations/tokenRefresh.ts +19 -0
- package/src/graphql/mutations/updateCheckoutMetadata.ts +49 -0
- package/src/graphql/mutations/updateProfile.ts +18 -0
- package/src/graphql/mutations/willCallDeliveryMethod.ts +81 -0
- package/src/graphql/queries/checkout.ts +168 -0
- package/src/graphql/queries/findProductByOldSlug.ts +58 -0
- package/src/graphql/queries/getAboutPage.ts +24 -0
- package/src/graphql/queries/getAboutPageId.ts +9 -0
- package/src/graphql/queries/getAboutUs.ts +38 -0
- package/src/graphql/queries/getAddressInformation.ts +38 -0
- package/src/graphql/queries/getAllCategories.ts +41 -0
- package/src/graphql/queries/getAllCategoriesTree.ts +67 -0
- package/src/graphql/queries/getAllCategoriesWithProducts.ts +29 -0
- package/src/graphql/queries/getAllCollectionsWithProducts.ts +16 -0
- package/src/graphql/queries/getBlogs.ts +222 -0
- package/src/graphql/queries/getBrands.ts +17 -0
- package/src/graphql/queries/getBundles.ts +43 -0
- package/src/graphql/queries/getCategories.ts +20 -0
- package/src/graphql/queries/getChannels.ts +77 -0
- package/src/graphql/queries/getCheckoutQuestions.ts +115 -0
- package/src/graphql/queries/getCheckoutTermsAndConditions.ts +37 -0
- package/src/graphql/queries/getContactPage.ts +117 -0
- package/src/graphql/queries/getContentPage.ts +191 -0
- package/src/graphql/queries/getDiscountOffers.ts +18 -0
- package/src/graphql/queries/getDynamicPageBySlug.ts +251 -0
- package/src/graphql/queries/getFeaturedProducts.ts +48 -0
- package/src/graphql/queries/getHeroMetadata.ts +23 -0
- package/src/graphql/queries/getMenuBySlug.ts +84 -0
- package/src/graphql/queries/getMyProfile.ts +23 -0
- package/src/graphql/queries/getNewsletter.ts +122 -0
- package/src/graphql/queries/getNewsletterPage.ts +111 -0
- package/src/graphql/queries/getPageBySlug.ts +52 -0
- package/src/graphql/queries/getPageTypeId.ts +27 -0
- package/src/graphql/queries/getPaymentMethods.ts +61 -0
- package/src/graphql/queries/getProducts.ts +78 -0
- package/src/graphql/queries/getPromotions.ts +24 -0
- package/src/graphql/queries/getRequestReturnPage.ts +121 -0
- package/src/graphql/queries/getSiteInfo.ts +54 -0
- package/src/graphql/queries/getSocialLinks.ts +52 -0
- package/src/graphql/queries/getTestimonials.ts +25 -0
- package/src/graphql/queries/getUserWithCheckout.ts +27 -0
- package/src/graphql/queries/getVehicleMakes.ts +21 -0
- package/src/graphql/queries/getVehicleModels.ts +21 -0
- package/src/graphql/queries/getVehicleYears.ts +21 -0
- package/src/graphql/queries/meAddresses.ts +56 -0
- package/src/graphql/queries/myOrders.ts +37 -0
- package/src/graphql/queries/orderDetail.ts +231 -0
- package/src/graphql/queries/productDetailsById.ts +197 -0
- package/src/graphql/queries/productInquiry.ts +115 -0
- package/src/graphql/queries/productsByCategoriesAndCollections.ts +39 -0
- package/src/graphql/queries/willCallCollectionPoints.ts +55 -0
- package/src/graphql/server-client.ts +54 -0
- package/src/graphql/types/categories.ts +9 -0
- package/src/graphql/types/checkout.ts +168 -0
- package/src/graphql/types/offer.ts +12 -0
- package/src/graphql/types/product.ts +44 -0
- package/src/hooks/scrollPageTop.ts +9 -0
- package/src/hooks/serverNavbarData.ts +79 -0
- package/src/hooks/useCartSync.ts +24 -0
- package/src/hooks/useRecaptcha.ts +33 -0
- package/src/hooks/useTokenExpiration.ts +81 -0
- package/src/hooks/useVehicleData.ts +346 -0
- package/src/lib/api/kount.ts +165 -0
- package/src/lib/api/shop.ts +1445 -0
- package/src/lib/saleor/getSaleorApiUrl.ts +25 -0
- package/src/lib/schema.ts +303 -0
- package/src/lib/seo/extractTextFromEditorJs.ts +58 -0
- package/src/lib/seo/site.ts +10 -0
- package/src/lib/urls/normalizeInternalUrl.ts +53 -0
- package/src/middleware.ts +134 -0
- package/src/sitemaps/README.md +105 -0
- package/src/sitemaps/dynamic-pages-sitemap.ts +247 -0
- package/src/sitemaps/sitemap-index.ts +21 -0
- package/src/sitemaps/static-pages-sitemap.ts +36 -0
- package/src/store/useGlobalStore.tsx +1656 -0
- package/src/types/global.d.ts +148 -0
- 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.
|