payaza-storefront-layouts 1.0.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/README.md +108 -0
- package/dist/components/learning/CertificateTemplates.d.ts +25 -0
- package/dist/components/learning/CertificateTemplates.d.ts.map +1 -0
- package/dist/components/learning/CertificateTemplates.js +31 -0
- package/dist/components/learning/CertificateViewer.d.ts +11 -0
- package/dist/components/learning/CertificateViewer.d.ts.map +1 -0
- package/dist/components/learning/CertificateViewer.js +114 -0
- package/dist/components/learning/MentorshipProgress.d.ts +18 -0
- package/dist/components/learning/MentorshipProgress.d.ts.map +1 -0
- package/dist/components/learning/MentorshipProgress.js +19 -0
- package/dist/components/ui/address-selector.d.ts +11 -0
- package/dist/components/ui/address-selector.d.ts.map +1 -0
- package/dist/components/ui/address-selector.js +21 -0
- package/dist/components/ui/avatar-image.d.ts +11 -0
- package/dist/components/ui/avatar-image.d.ts.map +1 -0
- package/dist/components/ui/avatar-image.js +39 -0
- package/dist/components/ui/background-patterns.d.ts +27 -0
- package/dist/components/ui/background-patterns.d.ts.map +1 -0
- package/dist/components/ui/background-patterns.js +5 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +20 -0
- package/dist/components/ui/breadcrumbs.d.ts +11 -0
- package/dist/components/ui/breadcrumbs.d.ts.map +1 -0
- package/dist/components/ui/breadcrumbs.js +8 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +33 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +24 -0
- package/dist/components/ui/category-tree.d.ts +16 -0
- package/dist/components/ui/category-tree.d.ts.map +1 -0
- package/dist/components/ui/category-tree.js +74 -0
- package/dist/components/ui/checkout-button.d.ts +11 -0
- package/dist/components/ui/checkout-button.d.ts.map +1 -0
- package/dist/components/ui/checkout-button.js +174 -0
- package/dist/components/ui/guest-checkout-modal.d.ts +19 -0
- package/dist/components/ui/guest-checkout-modal.d.ts.map +1 -0
- package/dist/components/ui/guest-checkout-modal.js +92 -0
- package/dist/components/ui/image-skeleton.d.ts +7 -0
- package/dist/components/ui/image-skeleton.d.ts.map +1 -0
- package/dist/components/ui/image-skeleton.js +15 -0
- package/dist/components/ui/image-with-fallback.d.ts +9 -0
- package/dist/components/ui/image-with-fallback.d.ts.map +1 -0
- package/dist/components/ui/image-with-fallback.js +203 -0
- package/dist/components/ui/input.d.ts +6 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +8 -0
- package/dist/components/ui/loading-skeleton-wrapper.d.ts +6 -0
- package/dist/components/ui/loading-skeleton-wrapper.d.ts.map +1 -0
- package/dist/components/ui/loading-skeleton-wrapper.js +10 -0
- package/dist/components/ui/modal.d.ts +11 -0
- package/dist/components/ui/modal.d.ts.map +1 -0
- package/dist/components/ui/modal.js +26 -0
- package/dist/components/ui/otp-input.d.ts +10 -0
- package/dist/components/ui/otp-input.d.ts.map +1 -0
- package/dist/components/ui/otp-input.js +57 -0
- package/dist/components/ui/out-of-stock-overlay.d.ts +8 -0
- package/dist/components/ui/out-of-stock-overlay.d.ts.map +1 -0
- package/dist/components/ui/out-of-stock-overlay.js +12 -0
- package/dist/components/ui/page-animate-wrapper.d.ts +7 -0
- package/dist/components/ui/page-animate-wrapper.d.ts.map +1 -0
- package/dist/components/ui/page-animate-wrapper.js +16 -0
- package/dist/components/ui/page-content-loader.d.ts +13 -0
- package/dist/components/ui/page-content-loader.d.ts.map +1 -0
- package/dist/components/ui/page-content-loader.js +12 -0
- package/dist/components/ui/page-loader.d.ts +20 -0
- package/dist/components/ui/page-loader.d.ts.map +1 -0
- package/dist/components/ui/page-loader.js +31 -0
- package/dist/components/ui/product-card.d.ts +11 -0
- package/dist/components/ui/product-card.d.ts.map +1 -0
- package/dist/components/ui/product-card.js +95 -0
- package/dist/components/ui/product-rating.d.ts +17 -0
- package/dist/components/ui/product-rating.d.ts.map +1 -0
- package/dist/components/ui/product-rating.js +54 -0
- package/dist/components/ui/review-form.d.ts +9 -0
- package/dist/components/ui/review-form.d.ts.map +1 -0
- package/dist/components/ui/review-form.js +28 -0
- package/dist/components/ui/route-skeleton-loader.d.ts +7 -0
- package/dist/components/ui/route-skeleton-loader.d.ts.map +1 -0
- package/dist/components/ui/route-skeleton-loader.js +75 -0
- package/dist/components/ui/sheet.d.ts +12 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +29 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +6 -0
- package/dist/components/ui/skeletons/category-grid-skeleton.d.ts +6 -0
- package/dist/components/ui/skeletons/category-grid-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/category-grid-skeleton.js +16 -0
- package/dist/components/ui/skeletons/checkout-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/checkout-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/checkout-skeleton.js +4 -0
- package/dist/components/ui/skeletons/index.d.ts +6 -0
- package/dist/components/ui/skeletons/index.d.ts.map +1 -0
- package/dist/components/ui/skeletons/index.js +5 -0
- package/dist/components/ui/skeletons/page-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/page-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/page-skeleton.js +4 -0
- package/dist/components/ui/skeletons/product-card-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/product-card-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/product-card-skeleton.js +4 -0
- package/dist/components/ui/skeletons/product-detail-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/product-detail-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/product-detail-skeleton.js +4 -0
- package/dist/components/ui/skeletons/product-grid-skeleton.d.ts +7 -0
- package/dist/components/ui/skeletons/product-grid-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/product-grid-skeleton.js +12 -0
- package/dist/components/ui/store-logos.d.ts +43 -0
- package/dist/components/ui/store-logos.d.ts.map +1 -0
- package/dist/components/ui/store-logos.js +83 -0
- package/dist/components/ui/toast.d.ts +19 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +33 -0
- package/dist/components/ui/video-player.d.ts +48 -0
- package/dist/components/ui/video-player.d.ts.map +1 -0
- package/dist/components/ui/video-player.js +96 -0
- package/dist/hooks/use-analytics.d.ts +14 -0
- package/dist/hooks/use-analytics.d.ts.map +1 -0
- package/dist/hooks/use-analytics.js +66 -0
- package/dist/hooks/use-api.d.ts +17 -0
- package/dist/hooks/use-api.d.ts.map +1 -0
- package/dist/hooks/use-api.js +53 -0
- package/dist/hooks/use-cart-api.d.ts +17 -0
- package/dist/hooks/use-cart-api.d.ts.map +1 -0
- package/dist/hooks/use-cart-api.js +134 -0
- package/dist/hooks/use-content-ready.d.ts +17 -0
- package/dist/hooks/use-content-ready.d.ts.map +1 -0
- package/dist/hooks/use-content-ready.js +197 -0
- package/dist/hooks/use-navigation-loading.d.ts +4 -0
- package/dist/hooks/use-navigation-loading.d.ts.map +1 -0
- package/dist/hooks/use-navigation-loading.js +14 -0
- package/dist/hooks/use-payaza-checkout.d.ts +14 -0
- package/dist/hooks/use-payaza-checkout.d.ts.map +1 -0
- package/dist/hooks/use-payaza-checkout.js +56 -0
- package/dist/hooks/use-products-api.d.ts +19 -0
- package/dist/hooks/use-products-api.d.ts.map +1 -0
- package/dist/hooks/use-products-api.js +84 -0
- package/dist/hooks/use-store-api.d.ts +12 -0
- package/dist/hooks/use-store-api.d.ts.map +1 -0
- package/dist/hooks/use-store-api.js +73 -0
- package/dist/index.d.ts +116 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/json/booking-agenda.json +18 -0
- package/dist/json/booking.json +71 -0
- package/dist/json/clothing-minimal.json +26 -0
- package/dist/json/clothing.json +169 -0
- package/dist/json/electronics-grid.json +18 -0
- package/dist/json/electronics.json +50 -0
- package/dist/json/food-modern.json +38 -0
- package/dist/json/food.json +85 -0
- package/dist/json/json-map.d.ts +7 -0
- package/dist/json/json-map.d.ts.map +1 -0
- package/dist/json/json-map.js +36 -0
- package/dist/json/motivational-speaker.json +96 -0
- package/dist/layouts/booking/components/BookingHomePage.d.ts +7 -0
- package/dist/layouts/booking/components/BookingHomePage.d.ts.map +1 -0
- package/dist/layouts/booking/components/BookingHomePage.js +49 -0
- package/dist/layouts/booking/index.d.ts +9 -0
- package/dist/layouts/booking/index.d.ts.map +1 -0
- package/dist/layouts/booking/index.js +9 -0
- package/dist/layouts/booking/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/booking/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/AboutPage.js +45 -0
- package/dist/layouts/booking/pages/BookPage.d.ts +8 -0
- package/dist/layouts/booking/pages/BookPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/BookPage.js +441 -0
- package/dist/layouts/booking/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/booking/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/CategoriesPage.js +162 -0
- package/dist/layouts/booking/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/booking/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/CategoryPage.js +67 -0
- package/dist/layouts/booking/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/booking/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/ContactPage.js +20 -0
- package/dist/layouts/booking/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/booking/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/booking/pages/ServicesPage.d.ts +9 -0
- package/dist/layouts/booking/pages/ServicesPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/ServicesPage.js +31 -0
- package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts +7 -0
- package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.js +186 -0
- package/dist/layouts/booking-agenda/index.d.ts +9 -0
- package/dist/layouts/booking-agenda/index.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/index.js +9 -0
- package/dist/layouts/booking-agenda/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/booking-agenda/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/AboutPage.js +45 -0
- package/dist/layouts/booking-agenda/pages/BookPage.d.ts +8 -0
- package/dist/layouts/booking-agenda/pages/BookPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/BookPage.js +441 -0
- package/dist/layouts/booking-agenda/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/booking-agenda/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/CategoriesPage.js +162 -0
- package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/CategoryPage.js +67 -0
- package/dist/layouts/booking-agenda/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/booking-agenda/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/ContactPage.js +20 -0
- package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts +9 -0
- package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/ServicesPage.js +31 -0
- package/dist/layouts/clothing/components/ClothingHomePage.d.ts +7 -0
- package/dist/layouts/clothing/components/ClothingHomePage.d.ts.map +1 -0
- package/dist/layouts/clothing/components/ClothingHomePage.js +295 -0
- package/dist/layouts/clothing/index.d.ts +8 -0
- package/dist/layouts/clothing/index.d.ts.map +1 -0
- package/dist/layouts/clothing/index.js +8 -0
- package/dist/layouts/clothing/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/AboutPage.js +45 -0
- package/dist/layouts/clothing/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/CategoriesPage.js +162 -0
- package/dist/layouts/clothing/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/clothing/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/CategoryPage.js +67 -0
- package/dist/layouts/clothing/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/ContactPage.js +20 -0
- package/dist/layouts/clothing/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/clothing/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/clothing/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/ProductsPage.js +297 -0
- package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts +7 -0
- package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.js +48 -0
- package/dist/layouts/clothing-minimal/index.d.ts +8 -0
- package/dist/layouts/clothing-minimal/index.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/index.js +8 -0
- package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/AboutPage.js +45 -0
- package/dist/layouts/clothing-minimal/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/CategoriesPage.js +162 -0
- package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/CategoryPage.js +67 -0
- package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/ContactPage.js +20 -0
- package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/ProductsPage.js +297 -0
- package/dist/layouts/electronics/components/ElectronicsCategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsCategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsCategoriesPage.js +34 -0
- package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts +10 -0
- package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsGridProductCard.js +107 -0
- package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsHomePage.js +78 -0
- package/dist/layouts/electronics/components/ElectronicsPageWrapper.d.ts +8 -0
- package/dist/layouts/electronics/components/ElectronicsPageWrapper.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsPageWrapper.js +10 -0
- package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsProductsPage.js +100 -0
- package/dist/layouts/electronics/components/ElectronicsStoreFooter.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsStoreFooter.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsStoreFooter.js +10 -0
- package/dist/layouts/electronics/components/ElectronicsStoreHeader.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsStoreHeader.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsStoreHeader.js +27 -0
- package/dist/layouts/electronics/index.d.ts +19 -0
- package/dist/layouts/electronics/index.d.ts.map +1 -0
- package/dist/layouts/electronics/index.js +19 -0
- package/dist/layouts/electronics/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/AboutPage.js +45 -0
- package/dist/layouts/electronics/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/CategoriesPage.js +6 -0
- package/dist/layouts/electronics/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/electronics/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/CategoryPage.js +67 -0
- package/dist/layouts/electronics/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ContactPage.js +20 -0
- package/dist/layouts/electronics/pages/HelpCenterPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/HelpCenterPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/HelpCenterPage.js +55 -0
- package/dist/layouts/electronics/pages/PrivacyPolicyPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/PrivacyPolicyPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/PrivacyPolicyPage.js +8 -0
- package/dist/layouts/electronics/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/electronics/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/electronics/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ProductsPage.js +297 -0
- package/dist/layouts/electronics/pages/ShippingReturnsPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/ShippingReturnsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ShippingReturnsPage.js +7 -0
- package/dist/layouts/electronics/pages/TermsPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/TermsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/TermsPage.js +8 -0
- package/dist/layouts/electronics/pages/TrackOrderPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/TrackOrderPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/TrackOrderPage.js +371 -0
- package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts +10 -0
- package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.js +107 -0
- package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts +7 -0
- package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.js +89 -0
- package/dist/layouts/electronics-grid/index.d.ts +15 -0
- package/dist/layouts/electronics-grid/index.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/index.js +15 -0
- package/dist/layouts/electronics-grid/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/AboutPage.js +45 -0
- package/dist/layouts/electronics-grid/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/CategoriesPage.js +6 -0
- package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/CategoryPage.js +67 -0
- package/dist/layouts/electronics-grid/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ContactPage.js +20 -0
- package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.js +15 -0
- package/dist/layouts/electronics-grid/pages/HelpCenterPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/HelpCenterPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/HelpCenterPage.js +55 -0
- package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.js +8 -0
- package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ProductsPage.js +297 -0
- package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.js +7 -0
- package/dist/layouts/electronics-grid/pages/TermsPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/TermsPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/TermsPage.js +8 -0
- package/dist/layouts/electronics-grid/pages/TrackOrderPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/TrackOrderPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/TrackOrderPage.js +371 -0
- package/dist/layouts/food/components/FoodHomePage.d.ts +7 -0
- package/dist/layouts/food/components/FoodHomePage.d.ts.map +1 -0
- package/dist/layouts/food/components/FoodHomePage.js +304 -0
- package/dist/layouts/food/index.d.ts +9 -0
- package/dist/layouts/food/index.d.ts.map +1 -0
- package/dist/layouts/food/index.js +9 -0
- package/dist/layouts/food/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/food/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/AboutPage.js +45 -0
- package/dist/layouts/food/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/food/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/CategoriesPage.js +162 -0
- package/dist/layouts/food/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/food/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/CategoryPage.js +67 -0
- package/dist/layouts/food/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/food/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/ContactPage.js +20 -0
- package/dist/layouts/food/pages/MenuPage.d.ts +8 -0
- package/dist/layouts/food/pages/MenuPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/MenuPage.js +75 -0
- package/dist/layouts/food/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/food/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/food/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/food/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/ProductsPage.js +297 -0
- package/dist/layouts/food-modern/components/FoodHomePageModern.d.ts +7 -0
- package/dist/layouts/food-modern/components/FoodHomePageModern.d.ts.map +1 -0
- package/dist/layouts/food-modern/components/FoodHomePageModern.js +118 -0
- package/dist/layouts/food-modern/index.d.ts +9 -0
- package/dist/layouts/food-modern/index.d.ts.map +1 -0
- package/dist/layouts/food-modern/index.js +9 -0
- package/dist/layouts/food-modern/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/AboutPage.js +45 -0
- package/dist/layouts/food-modern/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/CategoriesPage.js +162 -0
- package/dist/layouts/food-modern/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/food-modern/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/CategoryPage.js +67 -0
- package/dist/layouts/food-modern/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/ContactPage.js +20 -0
- package/dist/layouts/food-modern/pages/MenuPage.d.ts +8 -0
- package/dist/layouts/food-modern/pages/MenuPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/MenuPage.js +75 -0
- package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/food-modern/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/ProductsPage.js +297 -0
- package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/components/MotivationalHomePage.js +115 -0
- package/dist/layouts/motivational-speaker/components/MotivationalPageWrapper.d.ts +8 -0
- package/dist/layouts/motivational-speaker/components/MotivationalPageWrapper.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/components/MotivationalPageWrapper.js +10 -0
- package/dist/layouts/motivational-speaker/index.d.ts +10 -0
- package/dist/layouts/motivational-speaker/index.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/index.js +10 -0
- package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/AboutPage.js +45 -0
- package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/CategoryPage.js +67 -0
- package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ContactPage.js +20 -0
- package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ProductsPage.js +297 -0
- package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts +8 -0
- package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.js +144 -0
- package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts +9 -0
- package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ServicesPage.js +31 -0
- package/dist/layouts/motivational-speaker/pages/SubscriptionPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/SubscriptionPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/SubscriptionPage.js +136 -0
- package/dist/layouts/shared/components/BaseStoreLayout.d.ts +8 -0
- package/dist/layouts/shared/components/BaseStoreLayout.d.ts.map +1 -0
- package/dist/layouts/shared/components/BaseStoreLayout.js +59 -0
- package/dist/layouts/shared/components/GenericPageWrapper.d.ts +8 -0
- package/dist/layouts/shared/components/GenericPageWrapper.d.ts.map +1 -0
- package/dist/layouts/shared/components/GenericPageWrapper.js +19 -0
- package/dist/layouts/shared/components/PromoBanner.d.ts +9 -0
- package/dist/layouts/shared/components/PromoBanner.d.ts.map +1 -0
- package/dist/layouts/shared/components/PromoBanner.js +14 -0
- package/dist/layouts/shared/components/StoreFooter.d.ts +7 -0
- package/dist/layouts/shared/components/StoreFooter.d.ts.map +1 -0
- package/dist/layouts/shared/components/StoreFooter.js +147 -0
- package/dist/layouts/shared/components/StoreHeader.d.ts +8 -0
- package/dist/layouts/shared/components/StoreHeader.d.ts.map +1 -0
- package/dist/layouts/shared/components/StoreHeader.js +87 -0
- package/dist/layouts/shared/components/TestimonialCard.d.ts +8 -0
- package/dist/layouts/shared/components/TestimonialCard.d.ts.map +1 -0
- package/dist/layouts/shared/components/TestimonialCard.js +10 -0
- package/dist/layouts/shared/index.d.ts +23 -0
- package/dist/layouts/shared/index.d.ts.map +1 -0
- package/dist/layouts/shared/index.js +23 -0
- package/dist/layouts/shared/pages/AccountPage.d.ts +7 -0
- package/dist/layouts/shared/pages/AccountPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/AccountPage.js +605 -0
- package/dist/layouts/shared/pages/CartPage.d.ts +7 -0
- package/dist/layouts/shared/pages/CartPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/CartPage.js +83 -0
- package/dist/layouts/shared/pages/CheckoutPage.d.ts +7 -0
- package/dist/layouts/shared/pages/CheckoutPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/CheckoutPage.js +860 -0
- package/dist/layouts/shared/pages/CookiePolicyPage.d.ts +7 -0
- package/dist/layouts/shared/pages/CookiePolicyPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/CookiePolicyPage.js +8 -0
- package/dist/layouts/shared/pages/FeatureDisabledPage.d.ts +9 -0
- package/dist/layouts/shared/pages/FeatureDisabledPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/FeatureDisabledPage.js +8 -0
- package/dist/layouts/shared/pages/HelpCenterPage.d.ts +7 -0
- package/dist/layouts/shared/pages/HelpCenterPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/HelpCenterPage.js +55 -0
- package/dist/layouts/shared/pages/MaintenancePage.d.ts +7 -0
- package/dist/layouts/shared/pages/MaintenancePage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/MaintenancePage.js +44 -0
- package/dist/layouts/shared/pages/PortfolioPage.d.ts +7 -0
- package/dist/layouts/shared/pages/PortfolioPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/PortfolioPage.js +130 -0
- package/dist/layouts/shared/pages/PrivacyPolicyPage.d.ts +7 -0
- package/dist/layouts/shared/pages/PrivacyPolicyPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/PrivacyPolicyPage.js +8 -0
- package/dist/layouts/shared/pages/ShippingReturnsPage.d.ts +7 -0
- package/dist/layouts/shared/pages/ShippingReturnsPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/ShippingReturnsPage.js +7 -0
- package/dist/layouts/shared/pages/SizeGuidePage.d.ts +7 -0
- package/dist/layouts/shared/pages/SizeGuidePage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/SizeGuidePage.js +10 -0
- package/dist/layouts/shared/pages/StyleGuidePage.d.ts +7 -0
- package/dist/layouts/shared/pages/StyleGuidePage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/StyleGuidePage.js +126 -0
- package/dist/layouts/shared/pages/TeamPage.d.ts +7 -0
- package/dist/layouts/shared/pages/TeamPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/TeamPage.js +39 -0
- package/dist/layouts/shared/pages/TermsPage.d.ts +7 -0
- package/dist/layouts/shared/pages/TermsPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/TermsPage.js +8 -0
- package/dist/layouts/shared/pages/TrackOrderPage.d.ts +7 -0
- package/dist/layouts/shared/pages/TrackOrderPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/TrackOrderPage.js +371 -0
- package/dist/layouts/shared/pages/WishlistPage.d.ts +7 -0
- package/dist/layouts/shared/pages/WishlistPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/WishlistPage.js +162 -0
- package/dist/lib/api.d.ts +8 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +109 -0
- package/dist/lib/auth-context.d.ts +30 -0
- package/dist/lib/auth-context.d.ts.map +1 -0
- package/dist/lib/auth-context.js +207 -0
- package/dist/lib/content-selectors.d.ts +21 -0
- package/dist/lib/content-selectors.d.ts.map +1 -0
- package/dist/lib/content-selectors.js +75 -0
- package/dist/lib/countries.d.ts +11 -0
- package/dist/lib/countries.d.ts.map +1 -0
- package/dist/lib/countries.js +252 -0
- package/dist/lib/currency-symbols.d.ts +36 -0
- package/dist/lib/currency-symbols.d.ts.map +1 -0
- package/dist/lib/currency-symbols.js +153 -0
- package/dist/lib/guest-user.d.ts +27 -0
- package/dist/lib/guest-user.d.ts.map +1 -0
- package/dist/lib/guest-user.js +71 -0
- package/dist/lib/loading-context.d.ts +19 -0
- package/dist/lib/loading-context.d.ts.map +1 -0
- package/dist/lib/loading-context.js +197 -0
- package/dist/lib/mock-stores.d.ts +22 -0
- package/dist/lib/mock-stores.d.ts.map +1 -0
- package/dist/lib/mock-stores.js +2099 -0
- package/dist/lib/payaza-checkout.d.ts +167 -0
- package/dist/lib/payaza-checkout.d.ts.map +1 -0
- package/dist/lib/payaza-checkout.js +455 -0
- package/dist/lib/services/analytics.service.d.ts +58 -0
- package/dist/lib/services/analytics.service.d.ts.map +1 -0
- package/dist/lib/services/analytics.service.js +182 -0
- package/dist/lib/services/auth.service.d.ts +63 -0
- package/dist/lib/services/auth.service.d.ts.map +1 -0
- package/dist/lib/services/auth.service.js +101 -0
- package/dist/lib/services/booking.service.d.ts +53 -0
- package/dist/lib/services/booking.service.d.ts.map +1 -0
- package/dist/lib/services/booking.service.js +52 -0
- package/dist/lib/services/cart.service.d.ts +37 -0
- package/dist/lib/services/cart.service.d.ts.map +1 -0
- package/dist/lib/services/cart.service.js +55 -0
- package/dist/lib/services/category.service.d.ts +21 -0
- package/dist/lib/services/category.service.d.ts.map +1 -0
- package/dist/lib/services/category.service.js +41 -0
- package/dist/lib/services/checkout.service.d.ts +79 -0
- package/dist/lib/services/checkout.service.d.ts.map +1 -0
- package/dist/lib/services/checkout.service.js +37 -0
- package/dist/lib/services/customer.service.d.ts +52 -0
- package/dist/lib/services/customer.service.d.ts.map +1 -0
- package/dist/lib/services/customer.service.js +64 -0
- package/dist/lib/services/fees.service.d.ts +23 -0
- package/dist/lib/services/fees.service.d.ts.map +1 -0
- package/dist/lib/services/fees.service.js +13 -0
- package/dist/lib/services/index.d.ts +19 -0
- package/dist/lib/services/index.d.ts.map +1 -0
- package/dist/lib/services/index.js +18 -0
- package/dist/lib/services/order.service.d.ts +107 -0
- package/dist/lib/services/order.service.d.ts.map +1 -0
- package/dist/lib/services/order.service.js +82 -0
- package/dist/lib/services/payment.service.d.ts +51 -0
- package/dist/lib/services/payment.service.d.ts.map +1 -0
- package/dist/lib/services/payment.service.js +105 -0
- package/dist/lib/services/product.service.d.ts +90 -0
- package/dist/lib/services/product.service.d.ts.map +1 -0
- package/dist/lib/services/product.service.js +86 -0
- package/dist/lib/services/promo.service.d.ts +31 -0
- package/dist/lib/services/promo.service.d.ts.map +1 -0
- package/dist/lib/services/promo.service.js +29 -0
- package/dist/lib/services/review.service.d.ts +47 -0
- package/dist/lib/services/review.service.d.ts.map +1 -0
- package/dist/lib/services/review.service.js +54 -0
- package/dist/lib/services/service.service.d.ts +55 -0
- package/dist/lib/services/service.service.d.ts.map +1 -0
- package/dist/lib/services/service.service.js +37 -0
- package/dist/lib/services/shipping.service.d.ts +44 -0
- package/dist/lib/services/shipping.service.d.ts.map +1 -0
- package/dist/lib/services/shipping.service.js +23 -0
- package/dist/lib/services/store.service.d.ts +87 -0
- package/dist/lib/services/store.service.d.ts.map +1 -0
- package/dist/lib/services/store.service.js +41 -0
- package/dist/lib/services/wishlist.service.d.ts +30 -0
- package/dist/lib/services/wishlist.service.d.ts.map +1 -0
- package/dist/lib/services/wishlist.service.js +53 -0
- package/dist/lib/store-config-utils.d.ts +41 -0
- package/dist/lib/store-config-utils.d.ts.map +1 -0
- package/dist/lib/store-config-utils.js +1535 -0
- package/dist/lib/store-config.d.ts +3 -0
- package/dist/lib/store-config.d.ts.map +1 -0
- package/dist/lib/store-config.js +2 -0
- package/dist/lib/store-context.d.ts +39 -0
- package/dist/lib/store-context.d.ts.map +1 -0
- package/dist/lib/store-context.js +803 -0
- package/dist/lib/store-types.d.ts +663 -0
- package/dist/lib/store-types.d.ts.map +1 -0
- package/dist/lib/store-types.js +1 -0
- package/dist/lib/utils/asset-helpers.d.ts +102 -0
- package/dist/lib/utils/asset-helpers.d.ts.map +1 -0
- package/dist/lib/utils/asset-helpers.js +395 -0
- package/dist/lib/utils/category-tree.d.ts +25 -0
- package/dist/lib/utils/category-tree.d.ts.map +1 -0
- package/dist/lib/utils/category-tree.js +85 -0
- package/dist/lib/utils/demo-detection.d.ts +23 -0
- package/dist/lib/utils/demo-detection.d.ts.map +1 -0
- package/dist/lib/utils/demo-detection.js +36 -0
- package/dist/lib/utils/fee-calculations.d.ts +35 -0
- package/dist/lib/utils/fee-calculations.d.ts.map +1 -0
- package/dist/lib/utils/fee-calculations.js +64 -0
- package/dist/lib/utils/index.d.ts +37 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +160 -0
- package/dist/lib/utils/url-helpers.d.ts +30 -0
- package/dist/lib/utils/url-helpers.d.ts.map +1 -0
- package/dist/lib/utils/url-helpers.js +56 -0
- package/dist/lib/utils/video-helpers.d.ts +32 -0
- package/dist/lib/utils/video-helpers.d.ts.map +1 -0
- package/dist/lib/utils/video-helpers.js +210 -0
- package/package.json +92 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payaza Checkout SDK Integration
|
|
3
|
+
* Based on Payaza Web SDK documentation: https://docs.payaza.africa/developers/apis/sdks/web-sdk
|
|
4
|
+
*
|
|
5
|
+
* Implementation uses script tag: https://checkout-v2.payaza.africa/js/v1/bundle.js
|
|
6
|
+
* Method: PayazaCheckout.setup(config).showPopup()
|
|
7
|
+
*/
|
|
8
|
+
export interface PayazaCheckoutConfig {
|
|
9
|
+
publicKey: string;
|
|
10
|
+
amount: number;
|
|
11
|
+
currency?: string;
|
|
12
|
+
email: string;
|
|
13
|
+
firstName?: string;
|
|
14
|
+
lastName?: string;
|
|
15
|
+
phone?: string;
|
|
16
|
+
reference?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
callbackUrl?: string;
|
|
19
|
+
storeId?: string;
|
|
20
|
+
orderId?: string;
|
|
21
|
+
orderNumber?: string;
|
|
22
|
+
shippingAddress?: {
|
|
23
|
+
firstName?: string;
|
|
24
|
+
lastName?: string;
|
|
25
|
+
address?: string;
|
|
26
|
+
city?: string;
|
|
27
|
+
state?: string;
|
|
28
|
+
country?: string;
|
|
29
|
+
zipCode?: string;
|
|
30
|
+
};
|
|
31
|
+
metadata?: Record<string, unknown>;
|
|
32
|
+
onSuccess?: (response: PayazaCheckoutResponse) => void;
|
|
33
|
+
onError?: (error: string) => void;
|
|
34
|
+
onClose?: () => void;
|
|
35
|
+
}
|
|
36
|
+
export interface PayazaCurrency {
|
|
37
|
+
name: string;
|
|
38
|
+
code: string;
|
|
39
|
+
unicode: string;
|
|
40
|
+
html_value: string;
|
|
41
|
+
enabled: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface PayazaCustomer {
|
|
44
|
+
customer_id: string;
|
|
45
|
+
email_address: string;
|
|
46
|
+
first_name: string;
|
|
47
|
+
last_name: string;
|
|
48
|
+
mobile_number: string;
|
|
49
|
+
}
|
|
50
|
+
export interface PayazaSuccessData {
|
|
51
|
+
message: string;
|
|
52
|
+
payaza_reference: string;
|
|
53
|
+
transaction_reference: string;
|
|
54
|
+
transaction_fee: number;
|
|
55
|
+
transaction_total_amount: number;
|
|
56
|
+
currency: PayazaCurrency;
|
|
57
|
+
customer: PayazaCustomer;
|
|
58
|
+
}
|
|
59
|
+
export interface PayazaSuccessCallback {
|
|
60
|
+
type: 'success';
|
|
61
|
+
status: number;
|
|
62
|
+
data: PayazaSuccessData;
|
|
63
|
+
}
|
|
64
|
+
export interface PayazaCheckoutResponse {
|
|
65
|
+
status: 'success' | 'error';
|
|
66
|
+
message?: string;
|
|
67
|
+
transactionRef?: string;
|
|
68
|
+
checkoutUrl?: string;
|
|
69
|
+
callbackData?: PayazaSuccessCallback;
|
|
70
|
+
}
|
|
71
|
+
interface PayazaCheckoutSetupConfig {
|
|
72
|
+
merchant_key: string;
|
|
73
|
+
connection_mode: 'Live' | 'Test';
|
|
74
|
+
checkout_amount: number;
|
|
75
|
+
currency_code: string;
|
|
76
|
+
email_address: string;
|
|
77
|
+
first_name?: string;
|
|
78
|
+
last_name?: string;
|
|
79
|
+
phone_number?: string;
|
|
80
|
+
transaction_reference: string;
|
|
81
|
+
country_code?: string;
|
|
82
|
+
virtual_account_configuration?: {
|
|
83
|
+
expires_in_minutes?: number;
|
|
84
|
+
};
|
|
85
|
+
additional_details?: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
interface PayazaCheckoutInstance {
|
|
88
|
+
setCallback: (callback: (response: {
|
|
89
|
+
transactionRef?: string;
|
|
90
|
+
reference?: string;
|
|
91
|
+
[key: string]: unknown;
|
|
92
|
+
}) => void) => void;
|
|
93
|
+
setOnClose: (onClose: () => void) => void;
|
|
94
|
+
showPopup: () => void;
|
|
95
|
+
}
|
|
96
|
+
declare global {
|
|
97
|
+
interface Window {
|
|
98
|
+
PayazaCheckout?: {
|
|
99
|
+
setup: (config: PayazaCheckoutSetupConfig) => PayazaCheckoutInstance;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Load Payaza SDK script dynamically
|
|
105
|
+
*/
|
|
106
|
+
export declare const loadPayazaSDK: () => Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Validate and normalize currency to ISO 4217 format (3-letter uppercase code)
|
|
109
|
+
* @param currency - Currency code to validate
|
|
110
|
+
* @returns Validated uppercase ISO 4217 currency code
|
|
111
|
+
* @throws Error if currency cannot be normalized to valid ISO format
|
|
112
|
+
*/
|
|
113
|
+
export declare function validateAndNormalizeCurrency(currency: string | null | undefined): string;
|
|
114
|
+
/**
|
|
115
|
+
* Validate and normalize currency with fallback
|
|
116
|
+
* @param currency - Currency code to validate
|
|
117
|
+
* @param fallback - Fallback currency if validation fails (default: 'USD')
|
|
118
|
+
* @returns Validated uppercase ISO 4217 currency code or fallback
|
|
119
|
+
*/
|
|
120
|
+
export declare function validateAndNormalizeCurrencyWithFallback(currency: string | null | undefined, fallback?: string): string;
|
|
121
|
+
/**
|
|
122
|
+
* Extract currency from items with fallback logic
|
|
123
|
+
* Handles mixed currencies by using the most common currency, or first item's currency
|
|
124
|
+
* All currencies are validated and normalized to ISO 4217 format
|
|
125
|
+
*/
|
|
126
|
+
export declare function getCurrencyFromItems(items: Array<{
|
|
127
|
+
product?: {
|
|
128
|
+
currency?: string;
|
|
129
|
+
};
|
|
130
|
+
}>, fallbackCurrency?: string): string;
|
|
131
|
+
/**
|
|
132
|
+
* Initialize Payaza checkout using SDK
|
|
133
|
+
* Uses PayazaCheckout.setup() method as per official documentation
|
|
134
|
+
*/
|
|
135
|
+
export declare const initiatePayazaCheckout: (config: PayazaCheckoutConfig) => Promise<PayazaCheckoutResponse>;
|
|
136
|
+
/**
|
|
137
|
+
* Generate checkout config from cart items
|
|
138
|
+
*/
|
|
139
|
+
export declare const generateCheckoutConfig: (items: Array<{
|
|
140
|
+
product: {
|
|
141
|
+
name: string;
|
|
142
|
+
price: number;
|
|
143
|
+
currency?: string;
|
|
144
|
+
};
|
|
145
|
+
quantity: number;
|
|
146
|
+
price: number;
|
|
147
|
+
}>, customerEmail: string, publicKey: string, options?: {
|
|
148
|
+
firstName?: string;
|
|
149
|
+
lastName?: string;
|
|
150
|
+
phone?: string;
|
|
151
|
+
callbackUrl?: string;
|
|
152
|
+
currency?: string;
|
|
153
|
+
storeId?: string;
|
|
154
|
+
orderId?: string;
|
|
155
|
+
orderNumber?: string;
|
|
156
|
+
shippingAddress?: {
|
|
157
|
+
firstName?: string;
|
|
158
|
+
lastName?: string;
|
|
159
|
+
address?: string;
|
|
160
|
+
city?: string;
|
|
161
|
+
state?: string;
|
|
162
|
+
country?: string;
|
|
163
|
+
zipCode?: string;
|
|
164
|
+
};
|
|
165
|
+
}) => PayazaCheckoutConfig;
|
|
166
|
+
export {};
|
|
167
|
+
//# sourceMappingURL=payaza-checkout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payaza-checkout.d.ts","sourceRoot":"","sources":["../../src/lib/payaza-checkout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC;AAED,UAAU,yBAAyB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6BAA6B,CAAC,EAAE;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,UAAU,sBAAsB;IAC9B,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7H,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,cAAc,CAAC,EAAE;YACf,KAAK,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,sBAAsB,CAAC;SACtE,CAAC;KACH;CACF;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,IAAI,CAwE5C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAexF;AAED;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,QAAQ,GAAE,MAAc,GACvB,MAAM,CAYR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACjD,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAuCR;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,oBAAoB,KAC3B,OAAO,CAAC,sBAAsB,CA4NhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,KAAK,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9G,eAAe,MAAM,EACrB,WAAW,MAAM,EACjB,UAAU;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,KACA,oBAkGF,CAAC"}
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payaza Checkout SDK Integration
|
|
3
|
+
* Based on Payaza Web SDK documentation: https://docs.payaza.africa/developers/apis/sdks/web-sdk
|
|
4
|
+
*
|
|
5
|
+
* Implementation uses script tag: https://checkout-v2.payaza.africa/js/v1/bundle.js
|
|
6
|
+
* Method: PayazaCheckout.setup(config).showPopup()
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Load Payaza SDK script dynamically
|
|
10
|
+
*/
|
|
11
|
+
export const loadPayazaSDK = () => {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
// Check if already loaded
|
|
14
|
+
if (window.PayazaCheckout && typeof window.PayazaCheckout.setup === 'function') {
|
|
15
|
+
console.log('Payaza SDK already loaded');
|
|
16
|
+
resolve();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Check if script is already in DOM
|
|
20
|
+
const existingScript = document.querySelector('script[src*="payaza"]');
|
|
21
|
+
if (existingScript) {
|
|
22
|
+
console.log('Payaza script already in DOM, waiting for load...');
|
|
23
|
+
// Wait for it to load
|
|
24
|
+
const checkInterval = setInterval(() => {
|
|
25
|
+
if (window.PayazaCheckout && typeof window.PayazaCheckout.setup === 'function') {
|
|
26
|
+
clearInterval(checkInterval);
|
|
27
|
+
resolve();
|
|
28
|
+
}
|
|
29
|
+
}, 100);
|
|
30
|
+
existingScript.addEventListener('load', () => {
|
|
31
|
+
clearInterval(checkInterval);
|
|
32
|
+
// Give SDK time to initialize
|
|
33
|
+
setTimeout(() => {
|
|
34
|
+
console.log('Existing script loaded, SDK available:', !!(window.PayazaCheckout && typeof window.PayazaCheckout.setup === 'function'));
|
|
35
|
+
resolve();
|
|
36
|
+
}, 300);
|
|
37
|
+
});
|
|
38
|
+
existingScript.addEventListener('error', () => {
|
|
39
|
+
clearInterval(checkInterval);
|
|
40
|
+
reject(new Error('Failed to load Payaza SDK from existing script'));
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Payaza SDK script URL (from official documentation)
|
|
45
|
+
const sdkUrl = 'https://checkout-v2.payaza.africa/js/v1/bundle.js';
|
|
46
|
+
// Load the Payaza SDK script
|
|
47
|
+
const script = document.createElement('script');
|
|
48
|
+
script.src = sdkUrl;
|
|
49
|
+
script.defer = true;
|
|
50
|
+
script.onload = () => {
|
|
51
|
+
console.log('Payaza SDK script loaded, waiting for initialization...');
|
|
52
|
+
// Wait for SDK to initialize
|
|
53
|
+
const checkInterval = setInterval(() => {
|
|
54
|
+
if (window.PayazaCheckout && typeof window.PayazaCheckout.setup === 'function') {
|
|
55
|
+
clearInterval(checkInterval);
|
|
56
|
+
console.log('Payaza SDK initialized successfully');
|
|
57
|
+
resolve();
|
|
58
|
+
}
|
|
59
|
+
}, 100);
|
|
60
|
+
// Timeout after 5 seconds
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
clearInterval(checkInterval);
|
|
63
|
+
if (window.PayazaCheckout && typeof window.PayazaCheckout.setup === 'function') {
|
|
64
|
+
resolve();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
reject(new Error('Payaza SDK loaded but PayazaCheckout.setup not found'));
|
|
68
|
+
}
|
|
69
|
+
}, 5000);
|
|
70
|
+
};
|
|
71
|
+
script.onerror = () => {
|
|
72
|
+
reject(new Error(`Failed to load Payaza SDK from ${sdkUrl}`));
|
|
73
|
+
};
|
|
74
|
+
document.head.appendChild(script);
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Validate and normalize currency to ISO 4217 format (3-letter uppercase code)
|
|
79
|
+
* @param currency - Currency code to validate
|
|
80
|
+
* @returns Validated uppercase ISO 4217 currency code
|
|
81
|
+
* @throws Error if currency cannot be normalized to valid ISO format
|
|
82
|
+
*/
|
|
83
|
+
export function validateAndNormalizeCurrency(currency) {
|
|
84
|
+
if (!currency || typeof currency !== 'string') {
|
|
85
|
+
throw new Error('Currency is required and must be a string');
|
|
86
|
+
}
|
|
87
|
+
// Normalize: trim whitespace and convert to uppercase
|
|
88
|
+
const normalized = currency.trim().toUpperCase();
|
|
89
|
+
// Validate: must be exactly 3 uppercase letters (ISO 4217 format)
|
|
90
|
+
const iso4217Pattern = /^[A-Z]{3}$/;
|
|
91
|
+
if (!iso4217Pattern.test(normalized)) {
|
|
92
|
+
throw new Error(`Invalid currency format: "${currency}". Must be a 3-letter ISO 4217 code (e.g., USD, NGN, KES, GHS)`);
|
|
93
|
+
}
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Validate and normalize currency with fallback
|
|
98
|
+
* @param currency - Currency code to validate
|
|
99
|
+
* @param fallback - Fallback currency if validation fails (default: 'USD')
|
|
100
|
+
* @returns Validated uppercase ISO 4217 currency code or fallback
|
|
101
|
+
*/
|
|
102
|
+
export function validateAndNormalizeCurrencyWithFallback(currency, fallback = 'USD') {
|
|
103
|
+
try {
|
|
104
|
+
return validateAndNormalizeCurrency(currency);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.warn(`[Currency] Invalid currency "${currency}", using fallback "${fallback}":`, error);
|
|
108
|
+
try {
|
|
109
|
+
return validateAndNormalizeCurrency(fallback);
|
|
110
|
+
}
|
|
111
|
+
catch (fallbackError) {
|
|
112
|
+
console.error(`[Currency] Fallback currency "${fallback}" is also invalid, using USD`);
|
|
113
|
+
return 'USD';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract currency from items with fallback logic
|
|
119
|
+
* Handles mixed currencies by using the most common currency, or first item's currency
|
|
120
|
+
* All currencies are validated and normalized to ISO 4217 format
|
|
121
|
+
*/
|
|
122
|
+
export function getCurrencyFromItems(items, fallbackCurrency) {
|
|
123
|
+
if (!items || items.length === 0) {
|
|
124
|
+
return validateAndNormalizeCurrencyWithFallback(fallbackCurrency, 'USD');
|
|
125
|
+
}
|
|
126
|
+
// Extract currencies from items and validate/normalize them
|
|
127
|
+
const currencies = [];
|
|
128
|
+
for (const item of items) {
|
|
129
|
+
if (item.product?.currency) {
|
|
130
|
+
try {
|
|
131
|
+
const validated = validateAndNormalizeCurrency(item.product.currency);
|
|
132
|
+
currencies.push(validated);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.warn(`[Currency] Invalid currency "${item.product.currency}" in product, skipping:`, error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (currencies.length === 0) {
|
|
140
|
+
return validateAndNormalizeCurrencyWithFallback(fallbackCurrency, 'USD');
|
|
141
|
+
}
|
|
142
|
+
// If all items have the same currency, use it
|
|
143
|
+
const uniqueCurrencies = [...new Set(currencies)];
|
|
144
|
+
if (uniqueCurrencies.length === 1) {
|
|
145
|
+
return uniqueCurrencies[0];
|
|
146
|
+
}
|
|
147
|
+
// If mixed currencies, find the most common one
|
|
148
|
+
const currencyCounts = {};
|
|
149
|
+
currencies.forEach(currency => {
|
|
150
|
+
currencyCounts[currency] = (currencyCounts[currency] || 0) + 1;
|
|
151
|
+
});
|
|
152
|
+
const mostCommonCurrency = Object.entries(currencyCounts).reduce((a, b) => currencyCounts[a[0]] > currencyCounts[b[0]] ? a : b)[0];
|
|
153
|
+
return mostCommonCurrency;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Initialize Payaza checkout using SDK
|
|
157
|
+
* Uses PayazaCheckout.setup() method as per official documentation
|
|
158
|
+
*/
|
|
159
|
+
export const initiatePayazaCheckout = async (config) => {
|
|
160
|
+
try {
|
|
161
|
+
// Validate currency before proceeding
|
|
162
|
+
if (!config.currency) {
|
|
163
|
+
throw new Error('Currency is required for Payaza checkout');
|
|
164
|
+
}
|
|
165
|
+
// Validate and normalize currency to ISO 4217 format
|
|
166
|
+
let validatedCurrency;
|
|
167
|
+
try {
|
|
168
|
+
validatedCurrency = validateAndNormalizeCurrency(config.currency);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
throw new Error(`Invalid currency code: ${config.currency}. Currency must be a valid 3-letter ISO 4217 code (e.g., USD, NGN, KES, GHS)`);
|
|
172
|
+
}
|
|
173
|
+
// Load SDK if not already loaded with timeout
|
|
174
|
+
const SDK_LOAD_TIMEOUT = 10000; // 10 seconds
|
|
175
|
+
const loadPromise = loadPayazaSDK();
|
|
176
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Payaza SDK loading timeout. Please check your internet connection and try again.')), SDK_LOAD_TIMEOUT));
|
|
177
|
+
try {
|
|
178
|
+
await Promise.race([loadPromise, timeoutPromise]);
|
|
179
|
+
}
|
|
180
|
+
catch (loadError) {
|
|
181
|
+
if (loadError?.message?.includes('timeout')) {
|
|
182
|
+
throw new Error('Payment system is loading. Please wait a moment and try again.');
|
|
183
|
+
}
|
|
184
|
+
throw new Error(`Failed to load payment system: ${loadError?.message || 'Unknown error'}`);
|
|
185
|
+
}
|
|
186
|
+
// Wait a bit for SDK to initialize
|
|
187
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
188
|
+
// Generate transaction reference
|
|
189
|
+
const reference = config.reference || `PL${Math.floor((Math.random() * 10000000) + 1)}`;
|
|
190
|
+
// Use PayazaCheckout.setup() method (official implementation)
|
|
191
|
+
if (!window.PayazaCheckout || typeof window.PayazaCheckout.setup !== 'function') {
|
|
192
|
+
throw new Error('Payaza SDK not loaded. PayazaCheckout.setup is not available. Please refresh the page and try again.');
|
|
193
|
+
}
|
|
194
|
+
// Determine connection mode from public key
|
|
195
|
+
const connectionMode = config.publicKey.includes('PKLIVE') ? 'Live' : 'Test';
|
|
196
|
+
// Build comprehensive additional_details metadata
|
|
197
|
+
// This data will be available in Payaza webhooks and transaction responses
|
|
198
|
+
const additionalDetails = {
|
|
199
|
+
// Merge any custom metadata first
|
|
200
|
+
...(config.metadata || {}),
|
|
201
|
+
};
|
|
202
|
+
// Core order identifiers
|
|
203
|
+
if (config.storeId) {
|
|
204
|
+
additionalDetails.storeId = config.storeId;
|
|
205
|
+
}
|
|
206
|
+
if (config.orderId) {
|
|
207
|
+
additionalDetails.orderId = config.orderId;
|
|
208
|
+
}
|
|
209
|
+
if (config.orderNumber) {
|
|
210
|
+
additionalDetails.orderNumber = config.orderNumber;
|
|
211
|
+
}
|
|
212
|
+
// Customer information
|
|
213
|
+
if (config.email) {
|
|
214
|
+
additionalDetails.customerEmail = config.email;
|
|
215
|
+
}
|
|
216
|
+
if (config.firstName) {
|
|
217
|
+
additionalDetails.customerFirstName = config.firstName;
|
|
218
|
+
}
|
|
219
|
+
if (config.lastName) {
|
|
220
|
+
additionalDetails.customerLastName = config.lastName;
|
|
221
|
+
}
|
|
222
|
+
if (config.phone) {
|
|
223
|
+
additionalDetails.customerPhone = config.phone;
|
|
224
|
+
}
|
|
225
|
+
// Shipping address information
|
|
226
|
+
if (config.shippingAddress) {
|
|
227
|
+
additionalDetails.shippingAddress = {
|
|
228
|
+
firstName: config.shippingAddress.firstName,
|
|
229
|
+
lastName: config.shippingAddress.lastName,
|
|
230
|
+
address: config.shippingAddress.address,
|
|
231
|
+
city: config.shippingAddress.city,
|
|
232
|
+
state: config.shippingAddress.state,
|
|
233
|
+
country: config.shippingAddress.country,
|
|
234
|
+
zipCode: config.shippingAddress.zipCode,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
// Transaction details
|
|
238
|
+
additionalDetails.amount = config.amount;
|
|
239
|
+
additionalDetails.currency = validatedCurrency;
|
|
240
|
+
if (config.description) {
|
|
241
|
+
additionalDetails.description = config.description;
|
|
242
|
+
}
|
|
243
|
+
// Timestamp for tracking
|
|
244
|
+
additionalDetails.timestamp = new Date().toISOString();
|
|
245
|
+
// Setup Payaza checkout with correct configuration
|
|
246
|
+
// Ensure currency_code is validated ISO 4217 format
|
|
247
|
+
const payazaConfig = {
|
|
248
|
+
merchant_key: config.publicKey,
|
|
249
|
+
connection_mode: connectionMode,
|
|
250
|
+
checkout_amount: config.amount,
|
|
251
|
+
currency_code: validatedCurrency, // Use validated ISO 4217 currency code
|
|
252
|
+
email_address: config.email,
|
|
253
|
+
first_name: config.firstName,
|
|
254
|
+
last_name: config.lastName,
|
|
255
|
+
phone_number: config.phone,
|
|
256
|
+
transaction_reference: reference,
|
|
257
|
+
additional_details: additionalDetails,
|
|
258
|
+
};
|
|
259
|
+
// Create checkout instance
|
|
260
|
+
const payazaCheckout = window.PayazaCheckout.setup(payazaConfig);
|
|
261
|
+
// Track payment success state to prevent misleading "Payment canceled" message
|
|
262
|
+
// when checkout window closes after successful payment
|
|
263
|
+
let paymentSuccessful = false;
|
|
264
|
+
// Set callback for payment response
|
|
265
|
+
payazaCheckout.setCallback((callbackResponse) => {
|
|
266
|
+
// TO BE REMOVED FOR PRODUCTION - Temporary logging for debugging
|
|
267
|
+
console.log('=== PAYAZA CHECKOUT SDK CALLBACK DATA (TO BE REMOVED FOR PRODUCTION) ===');
|
|
268
|
+
console.log('Full callback response:', JSON.stringify(callbackResponse, null, 2));
|
|
269
|
+
console.log('=== END OF CALLBACK DATA ===');
|
|
270
|
+
// Parse the callback response structure
|
|
271
|
+
// Payaza returns: { type: "success", status: 201, data: { ... } }
|
|
272
|
+
const isSuccessResponse = callbackResponse.type === 'success' ||
|
|
273
|
+
(callbackResponse.status !== undefined && callbackResponse.status >= 200 && callbackResponse.status < 300);
|
|
274
|
+
if (isSuccessResponse && callbackResponse.data) {
|
|
275
|
+
// Full success response with transaction details
|
|
276
|
+
const successData = callbackResponse.data;
|
|
277
|
+
const transactionRef = successData.transaction_reference ||
|
|
278
|
+
callbackResponse.transactionRef ||
|
|
279
|
+
callbackResponse.reference ||
|
|
280
|
+
reference;
|
|
281
|
+
const fullCallback = {
|
|
282
|
+
type: callbackResponse.type || 'success',
|
|
283
|
+
status: callbackResponse.status || 201,
|
|
284
|
+
data: successData,
|
|
285
|
+
};
|
|
286
|
+
console.log('[Payaza Callback] Transaction successful:', {
|
|
287
|
+
transactionRef,
|
|
288
|
+
payazaReference: successData.payaza_reference,
|
|
289
|
+
amount: successData.transaction_total_amount,
|
|
290
|
+
fee: successData.transaction_fee,
|
|
291
|
+
currency: successData.currency?.code,
|
|
292
|
+
});
|
|
293
|
+
// Mark payment as successful BEFORE calling onSuccess
|
|
294
|
+
// This ensures onClose knows payment succeeded even if it fires immediately after
|
|
295
|
+
paymentSuccessful = true;
|
|
296
|
+
// Call the success handler with full callback data
|
|
297
|
+
if (config.onSuccess) {
|
|
298
|
+
config.onSuccess({
|
|
299
|
+
status: 'success',
|
|
300
|
+
transactionRef,
|
|
301
|
+
message: successData.message || 'Payment successful',
|
|
302
|
+
callbackData: fullCallback,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else if (isSuccessResponse) {
|
|
307
|
+
// Fallback for older callback format or minimal response
|
|
308
|
+
const transactionRef = callbackResponse.transactionRef ||
|
|
309
|
+
callbackResponse.reference ||
|
|
310
|
+
reference;
|
|
311
|
+
console.log('[Payaza Callback] Transaction reference:', transactionRef);
|
|
312
|
+
// Mark payment as successful
|
|
313
|
+
paymentSuccessful = true;
|
|
314
|
+
// Call the success handler if provided
|
|
315
|
+
if (config.onSuccess) {
|
|
316
|
+
config.onSuccess({
|
|
317
|
+
status: 'success',
|
|
318
|
+
transactionRef,
|
|
319
|
+
message: 'Payment successful',
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
// Set onClose handler
|
|
325
|
+
// Only call onClose if payment was not successful (user actually canceled)
|
|
326
|
+
payazaCheckout.setOnClose(() => {
|
|
327
|
+
console.log('Payaza checkout closed', { paymentSuccessful });
|
|
328
|
+
// Only call onClose if payment was not successful
|
|
329
|
+
// This prevents misleading "Payment canceled" message when payment succeeds
|
|
330
|
+
if (!paymentSuccessful && config.onClose) {
|
|
331
|
+
config.onClose();
|
|
332
|
+
}
|
|
333
|
+
// Reset flag for next checkout (if user opens checkout again)
|
|
334
|
+
paymentSuccessful = false;
|
|
335
|
+
});
|
|
336
|
+
// Show the popup
|
|
337
|
+
payazaCheckout.showPopup();
|
|
338
|
+
// Return success - actual payment status comes via callback
|
|
339
|
+
return {
|
|
340
|
+
status: 'success',
|
|
341
|
+
transactionRef: reference,
|
|
342
|
+
message: 'Checkout popup opened',
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
console.error('Payaza checkout error:', error);
|
|
347
|
+
return {
|
|
348
|
+
status: 'error',
|
|
349
|
+
message: error instanceof Error ? error.message : 'Failed to initialize checkout',
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
/**
|
|
354
|
+
* Generate checkout config from cart items
|
|
355
|
+
*/
|
|
356
|
+
export const generateCheckoutConfig = (items, customerEmail, publicKey, options) => {
|
|
357
|
+
const totalAmount = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
|
|
358
|
+
const itemCount = items.reduce((sum, item) => sum + item.quantity, 0);
|
|
359
|
+
// Extract currency from items or use provided currency with fallback chain
|
|
360
|
+
// Fallback chain: options.currency → getCurrencyFromItems() → 'USD'
|
|
361
|
+
// CRITICAL: Payaza only accepts ISO 4217 currency codes (e.g., 'NGN', 'USD'), NOT currency symbols (e.g., '₦', '$')
|
|
362
|
+
// All currency values must be validated and normalized to ISO format before use
|
|
363
|
+
let currency;
|
|
364
|
+
try {
|
|
365
|
+
if (options?.currency) {
|
|
366
|
+
// Validate that provided currency is an ISO code, not a symbol
|
|
367
|
+
currency = validateAndNormalizeCurrency(options.currency);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
// Try to get currency from items
|
|
371
|
+
const itemsCurrency = getCurrencyFromItems(items);
|
|
372
|
+
currency = validateAndNormalizeCurrency(itemsCurrency);
|
|
373
|
+
}
|
|
374
|
+
// Double-check: Ensure currency is a valid 3-letter ISO code
|
|
375
|
+
if (!currency || currency.length !== 3 || !/^[A-Z]{3}$/.test(currency)) {
|
|
376
|
+
throw new Error(`Invalid currency format: "${currency}". Must be a 3-letter ISO 4217 code.`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
console.error('[Checkout Config] Currency validation failed:', {
|
|
381
|
+
providedCurrency: options?.currency,
|
|
382
|
+
error: error?.message,
|
|
383
|
+
fallback: 'USD'
|
|
384
|
+
});
|
|
385
|
+
// Always fallback to USD if validation fails
|
|
386
|
+
currency = 'USD';
|
|
387
|
+
}
|
|
388
|
+
// Build comprehensive payer description
|
|
389
|
+
const customerName = options?.firstName && options?.lastName
|
|
390
|
+
? `${options.firstName} ${options.lastName}`
|
|
391
|
+
: options?.firstName || options?.lastName || 'Customer';
|
|
392
|
+
// Build shipping address string
|
|
393
|
+
const shippingParts = [];
|
|
394
|
+
if (options?.shippingAddress) {
|
|
395
|
+
const addr = options.shippingAddress;
|
|
396
|
+
if (addr.address)
|
|
397
|
+
shippingParts.push(addr.address);
|
|
398
|
+
if (addr.city)
|
|
399
|
+
shippingParts.push(addr.city);
|
|
400
|
+
if (addr.state)
|
|
401
|
+
shippingParts.push(addr.state);
|
|
402
|
+
if (addr.zipCode)
|
|
403
|
+
shippingParts.push(addr.zipCode);
|
|
404
|
+
if (addr.country)
|
|
405
|
+
shippingParts.push(addr.country);
|
|
406
|
+
}
|
|
407
|
+
const shippingAddressStr = shippingParts.length > 0 ? shippingParts.join(', ') : 'Not provided';
|
|
408
|
+
// Build comprehensive description
|
|
409
|
+
let description = '';
|
|
410
|
+
if (options?.orderNumber) {
|
|
411
|
+
description = `Order #${options.orderNumber} - ${customerName} (${customerEmail})\n`;
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
description = `Order - ${customerName} (${customerEmail})\n`;
|
|
415
|
+
}
|
|
416
|
+
description += `Items: ${itemCount} | Total: ${currency} ${totalAmount.toFixed(2)}\n`;
|
|
417
|
+
description += `Shipping: ${shippingAddressStr}`;
|
|
418
|
+
// Truncate if too long (Payaza may have limits)
|
|
419
|
+
const maxDescriptionLength = 500;
|
|
420
|
+
if (description.length > maxDescriptionLength) {
|
|
421
|
+
description = description.substring(0, maxDescriptionLength - 3) + '...';
|
|
422
|
+
}
|
|
423
|
+
return {
|
|
424
|
+
publicKey,
|
|
425
|
+
amount: totalAmount,
|
|
426
|
+
currency,
|
|
427
|
+
email: customerEmail,
|
|
428
|
+
firstName: options?.firstName,
|
|
429
|
+
lastName: options?.lastName,
|
|
430
|
+
phone: options?.phone,
|
|
431
|
+
description,
|
|
432
|
+
callbackUrl: options?.callbackUrl,
|
|
433
|
+
storeId: options?.storeId,
|
|
434
|
+
orderId: options?.orderId,
|
|
435
|
+
orderNumber: options?.orderNumber,
|
|
436
|
+
shippingAddress: options?.shippingAddress,
|
|
437
|
+
metadata: {
|
|
438
|
+
// Cart items information
|
|
439
|
+
items: items.map(item => ({
|
|
440
|
+
name: item.product.name,
|
|
441
|
+
quantity: item.quantity,
|
|
442
|
+
price: item.price,
|
|
443
|
+
currency: item.product.currency,
|
|
444
|
+
})),
|
|
445
|
+
// Order summary
|
|
446
|
+
itemCount: itemCount,
|
|
447
|
+
totalAmount: totalAmount,
|
|
448
|
+
// Customer information
|
|
449
|
+
customerName: customerName,
|
|
450
|
+
customerEmail: customerEmail,
|
|
451
|
+
// Shipping information
|
|
452
|
+
shippingAddress: shippingAddressStr,
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'search' | 'category_view' | 'checkout_start' | 'checkout_complete' | 'wishlist_add' | 'wishlist_remove';
|
|
2
|
+
export interface TrackEventParams {
|
|
3
|
+
storeId: string;
|
|
4
|
+
eventType: EventType;
|
|
5
|
+
userId?: string | null;
|
|
6
|
+
metadata?: Record<string, any>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Analytics service for tracking user events
|
|
10
|
+
*/
|
|
11
|
+
declare class AnalyticsService {
|
|
12
|
+
private sessionId;
|
|
13
|
+
private eventQueue;
|
|
14
|
+
private isProcessingQueue;
|
|
15
|
+
private readonly QUEUE_FLUSH_INTERVAL;
|
|
16
|
+
private readonly MAX_QUEUE_SIZE;
|
|
17
|
+
/**
|
|
18
|
+
* Get or create session ID
|
|
19
|
+
*/
|
|
20
|
+
getSessionId(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Detect device type
|
|
23
|
+
*/
|
|
24
|
+
detectDeviceType(): 'mobile' | 'desktop' | 'tablet' | null;
|
|
25
|
+
/**
|
|
26
|
+
* Extract UTM parameters from URL
|
|
27
|
+
*/
|
|
28
|
+
getUTMParams(): {
|
|
29
|
+
utmSource?: string;
|
|
30
|
+
utmMedium?: string;
|
|
31
|
+
utmCampaign?: string;
|
|
32
|
+
utmTerm?: string;
|
|
33
|
+
utmContent?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Get referrer
|
|
37
|
+
*/
|
|
38
|
+
getReferrer(): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Track an event
|
|
41
|
+
*/
|
|
42
|
+
trackEvent(params: TrackEventParams): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Queue an event for later sending
|
|
45
|
+
*/
|
|
46
|
+
private queueEvent;
|
|
47
|
+
/**
|
|
48
|
+
* Process queued events
|
|
49
|
+
*/
|
|
50
|
+
private processQueue;
|
|
51
|
+
/**
|
|
52
|
+
* Clear session (for logout)
|
|
53
|
+
*/
|
|
54
|
+
clearSession(): void;
|
|
55
|
+
}
|
|
56
|
+
export declare const analyticsService: AnalyticsService;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=analytics.service.d.ts.map
|