@mohasinac/appkit 4.13.1 → 4.15.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/dist/_internal/client/features/layout/DashboardLayoutClient.js +14 -5
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +3 -0
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -0
- package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +8 -0
- package/dist/_internal/client/features/lottery/LotteryDetailView.js +4 -1
- package/dist/_internal/client/features/lottery/LotteryListView.d.ts +7 -0
- package/dist/_internal/client/features/lottery/LotteryListView.js +1 -1
- package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +4 -1
- package/dist/_internal/client/features/lottery/slot-collage-items.d.ts +15 -0
- package/dist/_internal/client/features/lottery/slot-collage-items.js +13 -0
- package/dist/_internal/server/features/auctions/actions.js +8 -2
- package/dist/_internal/server/features/bundles/data.d.ts +16 -0
- package/dist/_internal/server/features/bundles/data.js +26 -0
- package/dist/_internal/server/features/bundles/index.d.ts +1 -1
- package/dist/_internal/server/features/bundles/index.js +1 -1
- package/dist/_internal/server/features/cart/service.d.ts +3 -3
- package/dist/_internal/server/features/checkout/actions.js +25 -0
- package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
- package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
- package/dist/_internal/server/features/checkout/source-context.d.ts +5 -0
- package/dist/_internal/server/features/checkout/source-context.js +157 -0
- package/dist/_internal/server/features/homepage/index.d.ts +0 -1
- package/dist/_internal/server/features/homepage/index.js +7 -1
- package/dist/_internal/server/features/lottery/adapters.js +4 -0
- package/dist/_internal/server/features/offers/adapters.d.ts +103 -0
- package/dist/_internal/server/features/offers/adapters.js +88 -0
- package/dist/_internal/server/features/offers/index.d.ts +2 -0
- package/dist/_internal/server/features/offers/index.js +1 -0
- package/dist/_internal/server/features/orders/adapters.js +24 -0
- package/dist/_internal/server/features/products/data.js +15 -37
- package/dist/_internal/server/features/products/index.d.ts +1 -1
- package/dist/_internal/server/features/products/index.js +1 -1
- package/dist/_internal/server/features/products/list-public.d.ts +46 -20
- package/dist/_internal/server/features/products/list-public.js +266 -90
- package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
- package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
- package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
- package/dist/_internal/server/features/site-settings/adapters.js +75 -0
- package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
- package/dist/_internal/server/features/site-settings/index.js +1 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
- package/dist/_internal/server/features/stores/adapters.js +91 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/jobs/core/auctionSettlement.js +56 -2
- package/dist/_internal/server/jobs/core/offerExpiry.js +55 -19
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
- package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
- package/dist/_internal/server/jobs/handlers/messages.js +10 -0
- package/dist/_internal/shared/actions/action-registry.js +17 -1
- package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
- package/dist/_internal/shared/checkout/lanes.js +26 -0
- package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
- package/dist/_internal/shared/features/auctions/config.js +27 -0
- package/dist/_internal/shared/features/auctions/schema.d.ts +14 -2
- package/dist/_internal/shared/features/auctions/schema.js +13 -1
- package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
- package/dist/_internal/shared/features/cart/schema.d.ts +20 -15
- package/dist/_internal/shared/features/cart/schema.js +15 -0
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
- package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
- package/dist/_internal/shared/features/emi/schedule.js +20 -5
- package/dist/_internal/shared/features/events/schema.d.ts +2 -2
- package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
- package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
- package/dist/_internal/shared/features/offers/config.d.ts +30 -0
- package/dist/_internal/shared/features/offers/config.js +59 -0
- package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
- package/dist/_internal/shared/features/products/schema.d.ts +30 -30
- package/dist/_internal/shared/features/products/to-product-item.js +6 -0
- package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
- package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
- package/dist/_internal/shared/features/site-settings/fees.js +39 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
- package/dist/_internal/shared/features/site-settings/types.js +1 -0
- package/dist/_internal/shared/history/history.d.ts +88 -0
- package/dist/_internal/shared/history/history.js +198 -0
- package/dist/_internal/shared/history/index.d.ts +4 -0
- package/dist/_internal/shared/history/index.js +2 -0
- package/dist/_internal/shared/history/types.d.ts +61 -0
- package/dist/_internal/shared/history/types.js +6 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
- package/dist/_internal/shared/listing-types/_registry.js +67 -0
- package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/art/config.js +5 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
- package/dist/_internal/shared/listing-types/auction/config.js +21 -0
- package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
- package/dist/_internal/shared/listing-types/availability.js +104 -0
- package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
- package/dist/_internal/shared/listing-types/capabilities.js +12 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/classified/config.js +5 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
- package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/live/config.js +5 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/standard/config.js +5 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
- package/dist/client.d.ts +20 -7
- package/dist/client.js +22 -4
- package/dist/constants/api-endpoints.d.ts +6 -0
- package/dist/constants/api-endpoints.js +2 -0
- package/dist/constants/field-names.d.ts +57 -8
- package/dist/constants/field-names.js +101 -8
- package/dist/constants/table-keys.d.ts +17 -0
- package/dist/constants/table-keys.js +17 -0
- package/dist/errors/error-codes.d.ts +13 -1
- package/dist/errors/error-codes.js +13 -1
- package/dist/errors/error-display-map.js +12 -3
- package/dist/errors/messages.d.ts +10 -2
- package/dist/errors/messages.js +10 -2
- package/dist/features/about/components/AboutView.d.ts +3 -0
- package/dist/features/about/components/AboutView.js +3 -2
- package/dist/features/about/components/PolicyPageView.d.ts +2 -1
- package/dist/features/about/components/PolicyPageView.js +61 -23
- package/dist/features/about/components/PublicProfileView.js +5 -0
- package/dist/features/about/schemas/firestore.d.ts +3 -0
- package/dist/features/account/components/UserBidsView.js +12 -4
- package/dist/features/account/components/UserOrdersView.js +7 -0
- package/dist/features/account/components/UserReturnsView.d.ts +3 -0
- package/dist/features/account/components/UserReturnsView.js +17 -1
- package/dist/features/account/components/index.d.ts +0 -2
- package/dist/features/account/components/index.js +0 -1
- package/dist/features/account/schemas/index.d.ts +2 -2
- package/dist/features/account/types/index.d.ts +21 -2
- package/dist/features/addresses/schemas/index.d.ts +4 -4
- package/dist/features/admin/components/AdminArtView.js +8 -3
- package/dist/features/admin/components/AdminAuditLogView.js +1 -0
- package/dist/features/admin/components/AdminBidsView.js +15 -2
- package/dist/features/admin/components/AdminBlogEditorView.js +65 -33
- package/dist/features/admin/components/AdminClassifiedView.js +8 -3
- package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
- package/dist/features/admin/components/AdminFeatureEditorView.js +35 -6
- package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
- package/dist/features/admin/components/AdminLiveView.js +8 -3
- package/dist/features/admin/components/AdminNavEditorView.js +15 -5
- package/dist/features/admin/components/AdminNewsletterView.js +18 -2
- package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
- package/dist/features/admin/components/AdminOffersView.js +230 -0
- package/dist/features/admin/components/AdminOrdersView.js +10 -1
- package/dist/features/admin/components/AdminPaymentMethodsView.js +24 -4
- package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
- package/dist/features/admin/components/AdminProductsView.js +16 -29
- package/dist/features/admin/components/AdminScammerEditorView.d.ts +2 -1
- package/dist/features/admin/components/AdminScammerEditorView.js +3 -13
- package/dist/features/admin/components/AdminScammersView.js +3 -8
- package/dist/features/admin/components/AdminSectionsView.js +32 -23
- package/dist/features/admin/components/AdminSessionsView.js +17 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
- package/dist/features/admin/components/AdminSiteView.js +6 -2
- package/dist/features/admin/components/AdminStickersView.js +8 -3
- package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -0
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +4 -2
- package/dist/features/admin/components/sections/adminSectionsTypes.js +45 -27
- package/dist/features/admin/constants/filter-tabs.d.ts +89 -0
- package/dist/features/admin/constants/filter-tabs.js +56 -0
- package/dist/features/admin/schemas/firestore.d.ts +122 -3
- package/dist/features/admin/schemas/firestore.js +1 -0
- package/dist/features/admin/schemas/homepage-section-form.d.ts +22 -0
- package/dist/features/admin/schemas/homepage-section-form.js +68 -0
- package/dist/features/admin/schemas/nav-item-form.d.ts +74 -0
- package/dist/features/admin/schemas/nav-item-form.js +72 -0
- package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
- package/dist/features/auctions/actions/bid-actions.js +93 -20
- package/dist/features/auctions/components/AuctionBidsTable.d.ts +10 -1
- package/dist/features/auctions/components/AuctionBidsTable.js +22 -4
- package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
- package/dist/features/auctions/components/AuctionsListView.js +5 -6
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
- package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
- package/dist/features/auctions/components/bid-detail-fields.d.ts +29 -0
- package/dist/features/auctions/components/bid-detail-fields.js +103 -0
- package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
- package/dist/features/auctions/repository/bid.repository.js +23 -0
- package/dist/features/auctions/schemas/firestore.d.ts +17 -0
- package/dist/features/auctions/schemas/index.d.ts +12 -12
- package/dist/features/audit-log/schemas/firestore.d.ts +14 -0
- package/dist/features/audit-log/schemas/firestore.js +7 -0
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +10 -1
- package/dist/features/blog/actions/blog-actions.d.ts +7 -7
- package/dist/features/blog/schemas/blog-form.d.ts +80 -0
- package/dist/features/blog/schemas/blog-form.js +100 -0
- package/dist/features/blog/schemas/index.d.ts +6 -6
- package/dist/features/cart/repository/cart.repository.js +1 -0
- package/dist/features/cart/schemas/firestore.d.ts +15 -0
- package/dist/features/catalogue/schemas/validation.d.ts +4 -4
- package/dist/features/categories/components/BrandDetailPageView.js +23 -40
- package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
- package/dist/features/categories/components/BrandDetailTabs.js +8 -12
- package/dist/features/categories/components/BundleCollage.js +1 -1
- package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
- package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
- package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
- package/dist/features/categories/components/CategoryProductsListing.js +11 -1
- package/dist/features/categories/components/ConcernCard.js +7 -1
- package/dist/features/categories/schemas/firestore.d.ts +13 -0
- package/dist/features/categories/schemas/index.d.ts +26 -26
- package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
- package/dist/features/events/components/AdminEventEditorView.js +32 -54
- package/dist/features/events/components/AdminEventEntriesView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +15 -11
- package/dist/features/events/components/EventFilters.d.ts +9 -1
- package/dist/features/events/components/EventFilters.js +45 -21
- package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
- package/dist/features/events/components/EventsIndexListing.js +2 -2
- package/dist/features/events/components/EventsListPageView.js +13 -4
- package/dist/features/events/repository/events.repository.d.ts +17 -0
- package/dist/features/events/repository/events.repository.js +27 -0
- package/dist/features/events/schemas/event-form.d.ts +113 -0
- package/dist/features/events/schemas/event-form.js +82 -0
- package/dist/features/events/schemas/firestore.d.ts +12 -0
- package/dist/features/events/schemas/firestore.js +12 -0
- package/dist/features/events/schemas/index.d.ts +50 -50
- package/dist/features/events/types/index.d.ts +11 -0
- package/dist/features/events/types/index.js +57 -1
- package/dist/features/faq/actions/faq-actions.d.ts +12 -12
- package/dist/features/faq/schemas/index.d.ts +8 -8
- package/dist/features/filters/FilterFacetSection.d.ts +7 -1
- package/dist/features/filters/FilterFacetSection.js +11 -3
- package/dist/features/grouped/schemas/grouped-listing-form.d.ts +101 -0
- package/dist/features/grouped/schemas/grouped-listing-form.js +89 -0
- package/dist/features/grouped/schemas/index.d.ts +4 -4
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +11 -3
- package/dist/features/homepage/actions/homepage-section-actions.js +33 -1
- package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
- package/dist/features/homepage/components/AnnouncementBar.js +3 -3
- package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
- package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
- package/dist/features/homepage/hooks/homepage-query.js +45 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
- package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
- package/dist/features/homepage/schemas/index.d.ts +33 -2
- package/dist/features/homepage/schemas/index.js +24 -0
- package/dist/features/layout/AppLayoutShell.d.ts +11 -1
- package/dist/features/layout/AppLayoutShell.js +15 -14
- package/dist/features/layout/BackToTop.d.ts +9 -0
- package/dist/features/layout/BackToTop.js +10 -1
- package/dist/features/layout/BottomActions.js +28 -25
- package/dist/features/layout/BottomChrome.d.ts +34 -0
- package/dist/features/layout/BottomChrome.js +55 -0
- package/dist/features/layout/BottomNavLayout.d.ts +6 -0
- package/dist/features/layout/BottomNavLayout.js +7 -1
- package/dist/features/layout/BottomNavbar.js +15 -2
- package/dist/features/layout/FooterLayout.js +11 -1
- package/dist/features/layout/NavbarLayout.js +1 -1
- package/dist/features/layout/TitleBarLayout.d.ts +7 -0
- package/dist/features/layout/TitleBarLayout.js +28 -5
- package/dist/features/layout/index.d.ts +2 -0
- package/dist/features/layout/index.js +1 -0
- package/dist/features/lottery/types/index.d.ts +3 -0
- package/dist/features/media/MediaPickerModal.js +5 -1
- package/dist/features/messages/schemas/index.d.ts +2 -2
- package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
- package/dist/features/orders/components/OrderScopeTabs.js +31 -0
- package/dist/features/orders/components/OrderStatusTimeline.d.ts +5 -1
- package/dist/features/orders/components/OrderStatusTimeline.js +39 -20
- package/dist/features/orders/constants/order-scope.d.ts +48 -0
- package/dist/features/orders/constants/order-scope.js +111 -0
- package/dist/features/orders/repository/orders.repository.d.ts +54 -7
- package/dist/features/orders/repository/orders.repository.js +121 -22
- package/dist/features/orders/schemas/firestore.d.ts +152 -0
- package/dist/features/orders/schemas/firestore.js +30 -0
- package/dist/features/orders/schemas/index.d.ts +18 -18
- package/dist/features/orders/types/index.d.ts +35 -7
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
- package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
- package/dist/features/pre-orders/schemas/index.d.ts +1 -1
- package/dist/features/products/actions/product-actions.d.ts +14 -0
- package/dist/features/products/actions/product-actions.js +49 -11
- package/dist/features/products/api/route.d.ts +12 -0
- package/dist/features/products/api/route.js +42 -100
- package/dist/features/products/components/ArtStickersListView.js +2 -2
- package/dist/features/products/components/AuctionsIndexListing.js +13 -11
- package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
- package/dist/features/products/components/AvailabilityTabs.js +47 -0
- package/dist/features/products/components/GroupSettingsPanel.js +5 -1
- package/dist/features/products/components/MakeOfferButton.js +48 -49
- package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
- package/dist/features/products/components/PrizeDrawCollage.js +9 -1
- package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
- package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
- package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
- package/dist/features/products/components/PrizeDrawsSection.js +23 -18
- package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
- package/dist/features/products/components/ProductDetailPageView.js +18 -4
- package/dist/features/products/components/ProductForm.js +5 -2
- package/dist/features/products/components/ProductGrid.js +6 -1
- package/dist/features/products/components/ProductsIndexListing.js +22 -32
- package/dist/features/products/components/ProductsIndexPageView.js +6 -9
- package/dist/features/products/components/index.d.ts +2 -2
- package/dist/features/products/components/index.js +1 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
- package/dist/features/products/config/listing-type-listing-config.js +22 -10
- package/dist/features/products/constants/action-defs.d.ts +2 -0
- package/dist/features/products/constants/action-defs.js +6 -0
- package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
- package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
- package/dist/features/products/hooks/useProducts.d.ts +5 -0
- package/dist/features/products/hooks/useProducts.js +13 -2
- package/dist/features/products/repository/products.repository.d.ts +31 -2
- package/dist/features/products/repository/products.repository.js +53 -21
- package/dist/features/products/schemas/firestore.d.ts +17 -3
- package/dist/features/products/schemas/firestore.js +7 -2
- package/dist/features/products/schemas/index.d.ts +64 -64
- package/dist/features/products/schemas/product-features.validators.d.ts +79 -6
- package/dist/features/products/schemas/product-features.validators.js +63 -0
- package/dist/features/products/types/index.d.ts +16 -1
- package/dist/features/promotions/schemas/index.d.ts +2 -2
- package/dist/features/reviews/schemas/index.d.ts +16 -16
- package/dist/features/scams/constants/scammer-status-display.d.ts +28 -0
- package/dist/features/scams/constants/scammer-status-display.js +79 -0
- package/dist/features/search/schemas/index.d.ts +4 -4
- package/dist/features/seller/actions/offer-actions.js +57 -4
- package/dist/features/seller/components/OfferPhaseTimeline.d.ts +59 -0
- package/dist/features/seller/components/OfferPhaseTimeline.js +107 -0
- package/dist/features/seller/components/SellerArtView.js +5 -0
- package/dist/features/seller/components/SellerAuctionsView.js +13 -15
- package/dist/features/seller/components/SellerBidsView.js +11 -4
- package/dist/features/seller/components/SellerClassifiedView.js +5 -0
- package/dist/features/seller/components/SellerCouponEditorView.js +17 -17
- package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
- package/dist/features/seller/components/SellerLiveView.js +5 -0
- package/dist/features/seller/components/SellerOffersView.js +2 -1
- package/dist/features/seller/components/SellerOrdersView.js +31 -9
- package/dist/features/seller/components/SellerPayoutSettingsView.js +56 -31
- package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
- package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
- package/dist/features/seller/components/SellerProductShell.js +7 -1
- package/dist/features/seller/components/SellerProductsView.js +11 -8
- package/dist/features/seller/components/SellerStickersView.js +5 -0
- package/dist/features/seller/components/index.d.ts +0 -2
- package/dist/features/seller/components/index.js +0 -1
- package/dist/features/seller/repository/offer.repository.d.ts +142 -24
- package/dist/features/seller/repository/offer.repository.js +165 -26
- package/dist/features/seller/schemas/coupon-form.d.ts +72 -0
- package/dist/features/seller/schemas/coupon-form.js +116 -0
- package/dist/features/seller/schemas/firestore.d.ts +56 -2
- package/dist/features/seller/schemas/firestore.js +27 -0
- package/dist/features/seller/schemas/index.d.ts +2 -2
- package/dist/features/seller/schemas/offer-forms.d.ts +46 -0
- package/dist/features/seller/schemas/offer-forms.js +42 -0
- package/dist/features/seller/server.d.ts +0 -1
- package/dist/features/seller/server.js +0 -1
- package/dist/features/shell/SectionForm.d.ts +99 -0
- package/dist/features/shell/SectionForm.js +128 -0
- package/dist/features/shell/build-sections.d.ts +63 -0
- package/dist/features/shell/build-sections.js +207 -0
- package/dist/features/shell/entity-form.d.ts +109 -0
- package/dist/features/shell/entity-form.js +96 -0
- package/dist/features/shell/field-ui-meta.d.ts +115 -0
- package/dist/features/shell/field-ui-meta.js +324 -0
- package/dist/features/shell/index.d.ts +8 -0
- package/dist/features/shell/index.js +4 -0
- package/dist/features/status-history/components/StatusTimeline.d.ts +74 -0
- package/dist/features/status-history/components/StatusTimeline.js +46 -0
- package/dist/features/status-history/index.d.ts +11 -0
- package/dist/features/status-history/index.js +10 -0
- package/dist/features/store-extensions/components/ReviewDecisionModal.d.ts +27 -0
- package/dist/features/store-extensions/components/ReviewDecisionModal.js +82 -0
- package/dist/features/store-extensions/index.d.ts +12 -0
- package/dist/features/store-extensions/index.js +12 -0
- package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +36 -0
- package/dist/features/store-extensions/schemas/admin-notification-form.js +114 -0
- package/dist/features/store-extensions/schemas/analytics-forms.d.ts +57 -0
- package/dist/features/store-extensions/schemas/analytics-forms.js +158 -0
- package/dist/features/store-extensions/schemas/custom-role-form.d.ts +85 -0
- package/dist/features/store-extensions/schemas/custom-role-form.js +118 -0
- package/dist/features/store-extensions/schemas/firestore.d.ts +21 -1
- package/dist/features/store-extensions/schemas/firestore.js +60 -0
- package/dist/features/store-extensions/schemas/google-config-form.d.ts +53 -0
- package/dist/features/store-extensions/schemas/google-config-form.js +105 -0
- package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +28 -0
- package/dist/features/store-extensions/schemas/item-request-create-form.js +80 -0
- package/dist/features/store-extensions/schemas/listing-template-form.d.ts +78 -0
- package/dist/features/store-extensions/schemas/listing-template-form.js +87 -0
- package/dist/features/store-extensions/schemas/moderation-review-form.d.ts +49 -0
- package/dist/features/store-extensions/schemas/moderation-review-form.js +101 -0
- package/dist/features/store-extensions/schemas/payout-method-form.d.ts +153 -0
- package/dist/features/store-extensions/schemas/payout-method-form.js +155 -0
- package/dist/features/store-extensions/schemas/report-create-form.d.ts +25 -0
- package/dist/features/store-extensions/schemas/report-create-form.js +79 -0
- package/dist/features/store-extensions/schemas/report-review-form.d.ts +47 -0
- package/dist/features/store-extensions/schemas/report-review-form.js +111 -0
- package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +148 -0
- package/dist/features/store-extensions/schemas/shipping-config-form.js +104 -0
- package/dist/features/store-extensions/schemas/store-category-form.d.ts +54 -0
- package/dist/features/store-extensions/schemas/store-category-form.js +73 -0
- package/dist/features/stores/api/[storeSlug]/route.js +2 -25
- package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
- package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
- package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
- package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
- package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
- package/dist/features/stores/components/StoreProductsListing.js +11 -1
- package/dist/features/stores/repository/store.repository.js +6 -0
- package/dist/features/stores/schemas/index.d.ts +6 -6
- package/dist/features/support/schemas/index.d.ts +4 -4
- package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
- package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +431 -1
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/index.d.ts +25 -12
- package/dist/index.js +26 -11
- package/dist/next/routing/route-map.d.ts +23 -3
- package/dist/next/routing/route-map.js +14 -2
- package/dist/providers/db-firebase/base.repository.d.ts +30 -0
- package/dist/providers/db-firebase/base.repository.js +50 -1
- package/dist/providers/db-firebase/index.d.ts +1 -1
- package/dist/providers/db-firebase/index.js +1 -1
- package/dist/providers/db-firebase/sieve.d.ts +25 -0
- package/dist/providers/db-firebase/sieve.js +52 -18
- package/dist/react/hooks/useUrlTable.js +10 -1
- package/dist/schemas/firestore-value.d.ts +8 -0
- package/dist/schemas/firestore-value.js +44 -0
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/registry.d.ts +702 -69
- package/dist/schemas/registry.js +64 -1
- package/dist/seed/_helpers/category-forest.d.ts +2 -0
- package/dist/seed/_helpers/category-forest.js +309 -0
- package/dist/seed/_helpers/category-tree.d.ts +27 -0
- package/dist/seed/_helpers/category-tree.js +103 -0
- package/dist/seed/bids-seed-data.js +30 -0
- package/dist/seed/catalogue-seed-data.js +12 -12
- package/dist/seed/categories-seed-data.js +177 -162
- package/dist/seed/events-seed-data.js +61 -10
- package/dist/seed/homepage-sections-seed-data.js +5 -1
- package/dist/seed/offers-seed-data.js +244 -34
- package/dist/seed/orders-seed-data.js +336 -1
- package/dist/seed/products-art-seed-data.js +50 -12
- package/dist/seed/products-auctions-seed-data.js +138 -18
- package/dist/seed/products-classifieds-seed-data.js +80 -16
- package/dist/seed/products-digital-codes-seed-data.js +66 -18
- package/dist/seed/products-live-items-seed-data.js +64 -13
- package/dist/seed/products-preorders-seed-data.d.ts +0 -1
- package/dist/seed/products-preorders-seed-data.js +52 -13
- package/dist/seed/products-prize-draws-seed-data.js +63 -14
- package/dist/seed/products-standard-seed-data.js +99 -26
- package/dist/seed/products-stickers-seed-data.js +47 -12
- package/dist/seed/reviews-seed-data.js +6 -1
- package/dist/seed/site-settings-seed-data.d.ts +1 -38
- package/dist/seed/site-settings-seed-data.js +38 -76
- package/dist/seed/stores-seed-data.js +71 -1
- package/dist/seed/users-seed-data.js +15 -5
- package/dist/server-entry.d.ts +1 -2
- package/dist/server-entry.js +4 -3
- package/dist/server.d.ts +6 -3
- package/dist/server.js +13 -4
- package/dist/styles.css +78 -12
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Button.style.css +19 -4
- package/dist/ui/components/CollapsibleSection.d.ts +17 -1
- package/dist/ui/components/CollapsibleSection.js +6 -2
- package/dist/ui/components/FilterChipGroup.d.ts +25 -1
- package/dist/ui/components/FilterChipGroup.js +21 -4
- package/dist/ui/components/HandMode.style.css +47 -0
- package/dist/ui/components/Layout.d.ts +9 -2
- package/dist/ui/components/Layout.js +1 -1
- package/dist/ui/components/ListingLayout.js +8 -8
- package/dist/ui/components/ListingLayout.style.css +8 -7
- package/dist/ui/components/RecordDetailModal.d.ts +10 -1
- package/dist/ui/components/RecordDetailModal.js +2 -2
- package/dist/ui/components/StickyToolbar.d.ts +3 -1
- package/dist/ui/components/StickyToolbar.js +62 -20
- package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
- package/dist/ui/components/bottom-chrome-slot.js +29 -0
- package/dist/ui/components/index.style.css +3 -0
- package/dist/ui/forms/FormShell.d.ts +43 -13
- package/dist/ui/forms/FormShell.js +22 -11
- package/dist/ui/forms/index.d.ts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +2 -1
- package/scripts/node-esm-loader.mjs +65 -0
- package/scripts/seed-cli-loader.mjs +6 -49
- package/scripts/seed-cli.mjs +1 -1
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* @tag consumers:CartRouteClient,CheckoutRouteClient,cart-actions,order-splitter,checkout/actions
|
|
25
25
|
* @tag sideEffects:none
|
|
26
26
|
*/
|
|
27
|
+
import { ROUTES } from "../../../next/routing/route-map";
|
|
27
28
|
export const CART_LANE = {
|
|
28
29
|
AUCTION: "auction",
|
|
29
30
|
OFFER: "offer",
|
|
@@ -72,6 +73,31 @@ export const LANE_CHECKOUT_WINDOW_HOURS = {
|
|
|
72
73
|
auction: LANE_CHECKOUT_WINDOW_MS.auction / (60 * 60 * 1000),
|
|
73
74
|
offer: LANE_CHECKOUT_WINDOW_MS.offer / (60 * 60 * 1000),
|
|
74
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* A BUYOUT hold is a third window, deliberately much shorter than the two above,
|
|
78
|
+
* even though it lands in the same auction lane.
|
|
79
|
+
*
|
|
80
|
+
* A settled win (`LANE_CHECKOUT_WINDOW_MS.auction`) is a finished auction: the
|
|
81
|
+
* clock already ran, nobody else is waiting, and 48 hours costs no one anything.
|
|
82
|
+
* A buyout is the opposite — the auction is still live and still taking bids
|
|
83
|
+
* while the hold exists, so a long window would let one buyer sit on a listing
|
|
84
|
+
* they may never pay for. One hour, and the hold is additionally clamped to the
|
|
85
|
+
* auction's own end time by `buyNowAuction` (see `AUCTION_BUYOUT_WINDOW_MS`
|
|
86
|
+
* callers): a buyout that hasn't been paid for by the time the auction ends
|
|
87
|
+
* fails, because by then the auction has settled to whoever actually won it.
|
|
88
|
+
*/
|
|
89
|
+
export const AUCTION_BUYOUT_WINDOW_MS = 60 * 60 * 1000;
|
|
90
|
+
/** 1 hour, in minutes — for buyer-facing copy ("pay within 60 minutes"). */
|
|
91
|
+
export const AUCTION_BUYOUT_WINDOW_MINUTES = AUCTION_BUYOUT_WINDOW_MS / (60 * 1000);
|
|
92
|
+
/**
|
|
93
|
+
* Deep link that drops a buyer straight into the auction lane at checkout.
|
|
94
|
+
*
|
|
95
|
+
* Declared once here, with the lane it selects, because it was previously a
|
|
96
|
+
* const in `auctionSettlement.ts` AND an inline template literal in
|
|
97
|
+
* `bid-actions.ts` — the same two-copies problem `LANE_CHECKOUT_WINDOW_MS` was
|
|
98
|
+
* extracted to fix, one layer up.
|
|
99
|
+
*/
|
|
100
|
+
export const AUCTION_CHECKOUT_URL = `${String(ROUTES.USER.CHECKOUT)}?lane=${CART_LANE.AUCTION}`;
|
|
75
101
|
/** The two lanes whose price is fixed outside the listing. */
|
|
76
102
|
export function isLockedLane(lane) {
|
|
77
103
|
return lane === CART_LANE.AUCTION || lane === CART_LANE.OFFER;
|
|
@@ -49,6 +49,33 @@ export interface ResolveMinBidOptions {
|
|
|
49
49
|
* together with `{ hasBids: false }`.
|
|
50
50
|
*/
|
|
51
51
|
export declare function resolveMinBid(currentBidAmount: number, tiers: BidIncrementTier[], override?: number | null, opts?: ResolveMinBidOptions): number;
|
|
52
|
+
export interface BuyNowAvailabilityInput {
|
|
53
|
+
buyNowPrice: number | null | undefined;
|
|
54
|
+
/** The auction's live visible price. Pass the SSE value client-side. */
|
|
55
|
+
currentBid: number | null | undefined;
|
|
56
|
+
isEnded: boolean;
|
|
57
|
+
isSold?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The single definition of "can this auction be bought outright right now".
|
|
61
|
+
*
|
|
62
|
+
* Written once for the same reason `resolveMinBid` is: the predicate had been
|
|
63
|
+
* hand-written in five places (the bid form, three spots on the auction detail
|
|
64
|
+
* page, the marketplace card) and they disagreed — the detail page advertised
|
|
65
|
+
* "Buy Now: ₹5,999" from a two-condition check while the button beneath it used
|
|
66
|
+
* a three-condition one, so most auctions showed a price with no button under
|
|
67
|
+
* it. That is the drift shape Root Cause #30 describes.
|
|
68
|
+
*
|
|
69
|
+
* The old third condition was `!bidsHaveStarted` (eBay's rule: BIN vanishes the
|
|
70
|
+
* moment anyone bids). It is deliberately gone. Buyout now stays available for
|
|
71
|
+
* as long as it is still a better deal than the standing bid, which is the
|
|
72
|
+
* condition that actually matters — a BIN price the bidding has already passed
|
|
73
|
+
* is meaningless, and one it hasn't is still a real offer.
|
|
74
|
+
*
|
|
75
|
+
* `isSold` is optional because client callers rendering a live auction page
|
|
76
|
+
* already know it isn't sold; server callers should always pass it.
|
|
77
|
+
*/
|
|
78
|
+
export declare function isBuyNowAvailable({ buyNowPrice, currentBid, isEnded, isSold, }: BuyNowAvailabilityInput): boolean;
|
|
52
79
|
/**
|
|
53
80
|
* Preset step multipliers offered by the bid form, as multiples of the
|
|
54
81
|
* effective minimum increment. With a ₹100 increment this renders
|
|
@@ -70,6 +70,33 @@ export function resolveMinBid(currentBidAmount, tiers, override, opts) {
|
|
|
70
70
|
return currentBidAmount;
|
|
71
71
|
return currentBidAmount + resolveMinBidIncrement(currentBidAmount, tiers, override);
|
|
72
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* The single definition of "can this auction be bought outright right now".
|
|
75
|
+
*
|
|
76
|
+
* Written once for the same reason `resolveMinBid` is: the predicate had been
|
|
77
|
+
* hand-written in five places (the bid form, three spots on the auction detail
|
|
78
|
+
* page, the marketplace card) and they disagreed — the detail page advertised
|
|
79
|
+
* "Buy Now: ₹5,999" from a two-condition check while the button beneath it used
|
|
80
|
+
* a three-condition one, so most auctions showed a price with no button under
|
|
81
|
+
* it. That is the drift shape Root Cause #30 describes.
|
|
82
|
+
*
|
|
83
|
+
* The old third condition was `!bidsHaveStarted` (eBay's rule: BIN vanishes the
|
|
84
|
+
* moment anyone bids). It is deliberately gone. Buyout now stays available for
|
|
85
|
+
* as long as it is still a better deal than the standing bid, which is the
|
|
86
|
+
* condition that actually matters — a BIN price the bidding has already passed
|
|
87
|
+
* is meaningless, and one it hasn't is still a real offer.
|
|
88
|
+
*
|
|
89
|
+
* `isSold` is optional because client callers rendering a live auction page
|
|
90
|
+
* already know it isn't sold; server callers should always pass it.
|
|
91
|
+
*/
|
|
92
|
+
export function isBuyNowAvailable({ buyNowPrice, currentBid, isEnded, isSold, }) {
|
|
93
|
+
if (isEnded || isSold === true)
|
|
94
|
+
return false;
|
|
95
|
+
if (typeof buyNowPrice !== "number" || !Number.isFinite(buyNowPrice) || buyNowPrice <= 0) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return buyNowPrice > (currentBid ?? 0);
|
|
99
|
+
}
|
|
73
100
|
/**
|
|
74
101
|
* Preset step multipliers offered by the bid form, as multiples of the
|
|
75
102
|
* effective minimum increment. With a ₹100 increment this renders
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Server-action input for placing a bid.
|
|
4
|
+
*
|
|
5
|
+
* Renamed from `placeBidSchema` 2026-08-24 (W3): a DIFFERENT `placeBidSchema`
|
|
6
|
+
* exists at `features/auctions/schemas/bid-input.ts`, and the two are not
|
|
7
|
+
* variants of one thing — that one is a client FORM factory taking the minimum
|
|
8
|
+
* bid and returning `{ bidAmount }`, this one is the action payload
|
|
9
|
+
* `{ auctionId, amount }`. Same name, different layer, different field names,
|
|
10
|
+
* incompatible shapes. Two same-named exports in one package is a defect even
|
|
11
|
+
* when both are correct, because the choice between them is invisible at the
|
|
12
|
+
* call site (Root Cause #36, one union over).
|
|
13
|
+
*/
|
|
14
|
+
export declare const placeBidActionSchema: z.ZodObject<{
|
|
3
15
|
auctionId: z.ZodString;
|
|
4
16
|
amount: z.ZodNumber;
|
|
5
17
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -26,5 +38,5 @@ export declare const buyNowSchema: z.ZodObject<{
|
|
|
26
38
|
}, {
|
|
27
39
|
auctionId: string;
|
|
28
40
|
}>;
|
|
29
|
-
export type
|
|
41
|
+
export type PlaceBidActionInput = z.infer<typeof placeBidActionSchema>;
|
|
30
42
|
export type CancelBidInput = z.infer<typeof cancelBidSchema>;
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Server-action input for placing a bid.
|
|
4
|
+
*
|
|
5
|
+
* Renamed from `placeBidSchema` 2026-08-24 (W3): a DIFFERENT `placeBidSchema`
|
|
6
|
+
* exists at `features/auctions/schemas/bid-input.ts`, and the two are not
|
|
7
|
+
* variants of one thing — that one is a client FORM factory taking the minimum
|
|
8
|
+
* bid and returning `{ bidAmount }`, this one is the action payload
|
|
9
|
+
* `{ auctionId, amount }`. Same name, different layer, different field names,
|
|
10
|
+
* incompatible shapes. Two same-named exports in one package is a defect even
|
|
11
|
+
* when both are correct, because the choice between them is invisible at the
|
|
12
|
+
* call site (Root Cause #36, one union over).
|
|
13
|
+
*/
|
|
14
|
+
export const placeBidActionSchema = z.object({
|
|
3
15
|
auctionId: z.string().min(1),
|
|
4
16
|
amount: z.number().positive("Bid amount must be a positive number"),
|
|
5
17
|
});
|
|
@@ -16,8 +16,8 @@ export declare const blogPostInputSchema: z.ZodObject<{
|
|
|
16
16
|
status: "draft" | "published";
|
|
17
17
|
title: string;
|
|
18
18
|
content: string;
|
|
19
|
-
category: string;
|
|
20
19
|
slug: string;
|
|
20
|
+
category: string;
|
|
21
21
|
tags: string[];
|
|
22
22
|
isFeatured: boolean;
|
|
23
23
|
youtubeId?: string | undefined;
|
|
@@ -28,8 +28,8 @@ export declare const blogPostInputSchema: z.ZodObject<{
|
|
|
28
28
|
}, {
|
|
29
29
|
title: string;
|
|
30
30
|
content: string;
|
|
31
|
-
category: string;
|
|
32
31
|
slug: string;
|
|
32
|
+
category: string;
|
|
33
33
|
status?: "draft" | "published" | undefined;
|
|
34
34
|
youtubeId?: string | undefined;
|
|
35
35
|
tags?: string[] | undefined;
|
|
@@ -8,32 +8,32 @@ export declare const addToCartSchema: z.ZodObject<{
|
|
|
8
8
|
storeId: z.ZodString;
|
|
9
9
|
storeName: z.ZodDefault<z.ZodString>;
|
|
10
10
|
quantity: z.ZodDefault<z.ZodNumber>;
|
|
11
|
-
listingType: z.ZodEnum<["standard", "auction", "pre-order", "prize-draw", "classified", "digital-code", "live"]>;
|
|
11
|
+
listingType: z.ZodEnum<["standard", "auction", "pre-order", "prize-draw", "classified", "digital-code", "live", "art", "stickers"]>;
|
|
12
12
|
isOffer: z.ZodOptional<z.ZodBoolean>;
|
|
13
13
|
offerId: z.ZodOptional<z.ZodString>;
|
|
14
14
|
lockedPrice: z.ZodOptional<z.ZodNumber>;
|
|
15
15
|
}, "strip", z.ZodTypeAny, {
|
|
16
16
|
currency: string;
|
|
17
17
|
storeId: string;
|
|
18
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
19
18
|
price: number;
|
|
20
|
-
|
|
19
|
+
listingType: "art" | "stickers" | "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
21
20
|
productId: string;
|
|
22
21
|
productTitle: string;
|
|
23
22
|
quantity: number;
|
|
23
|
+
storeName: string;
|
|
24
24
|
productImage: string;
|
|
25
25
|
offerId?: string | undefined;
|
|
26
26
|
lockedPrice?: number | undefined;
|
|
27
27
|
isOffer?: boolean | undefined;
|
|
28
28
|
}, {
|
|
29
29
|
storeId: string;
|
|
30
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
31
30
|
price: number;
|
|
31
|
+
listingType: "art" | "stickers" | "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
32
32
|
productId: string;
|
|
33
33
|
productTitle: string;
|
|
34
34
|
currency?: string | undefined;
|
|
35
|
-
storeName?: string | undefined;
|
|
36
35
|
quantity?: number | undefined;
|
|
36
|
+
storeName?: string | undefined;
|
|
37
37
|
productImage?: string | undefined;
|
|
38
38
|
offerId?: string | undefined;
|
|
39
39
|
lockedPrice?: number | undefined;
|
|
@@ -66,32 +66,32 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
|
|
|
66
66
|
storeId: z.ZodString;
|
|
67
67
|
storeName: z.ZodDefault<z.ZodString>;
|
|
68
68
|
quantity: z.ZodDefault<z.ZodNumber>;
|
|
69
|
-
listingType: z.ZodEnum<["standard", "auction", "pre-order", "prize-draw", "classified", "digital-code", "live"]>;
|
|
69
|
+
listingType: z.ZodEnum<["standard", "auction", "pre-order", "prize-draw", "classified", "digital-code", "live", "art", "stickers"]>;
|
|
70
70
|
isOffer: z.ZodOptional<z.ZodBoolean>;
|
|
71
71
|
offerId: z.ZodOptional<z.ZodString>;
|
|
72
72
|
lockedPrice: z.ZodOptional<z.ZodNumber>;
|
|
73
73
|
}, "strip", z.ZodTypeAny, {
|
|
74
74
|
currency: string;
|
|
75
75
|
storeId: string;
|
|
76
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
77
76
|
price: number;
|
|
78
|
-
|
|
77
|
+
listingType: "art" | "stickers" | "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
79
78
|
productId: string;
|
|
80
79
|
productTitle: string;
|
|
81
80
|
quantity: number;
|
|
81
|
+
storeName: string;
|
|
82
82
|
productImage: string;
|
|
83
83
|
offerId?: string | undefined;
|
|
84
84
|
lockedPrice?: number | undefined;
|
|
85
85
|
isOffer?: boolean | undefined;
|
|
86
86
|
}, {
|
|
87
87
|
storeId: string;
|
|
88
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
89
88
|
price: number;
|
|
89
|
+
listingType: "art" | "stickers" | "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
90
90
|
productId: string;
|
|
91
91
|
productTitle: string;
|
|
92
92
|
currency?: string | undefined;
|
|
93
|
-
storeName?: string | undefined;
|
|
94
93
|
quantity?: number | undefined;
|
|
94
|
+
storeName?: string | undefined;
|
|
95
95
|
productImage?: string | undefined;
|
|
96
96
|
offerId?: string | undefined;
|
|
97
97
|
lockedPrice?: number | undefined;
|
|
@@ -101,12 +101,12 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
|
|
|
101
101
|
guestItems: {
|
|
102
102
|
currency: string;
|
|
103
103
|
storeId: string;
|
|
104
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
105
104
|
price: number;
|
|
106
|
-
|
|
105
|
+
listingType: "art" | "stickers" | "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
107
106
|
productId: string;
|
|
108
107
|
productTitle: string;
|
|
109
108
|
quantity: number;
|
|
109
|
+
storeName: string;
|
|
110
110
|
productImage: string;
|
|
111
111
|
offerId?: string | undefined;
|
|
112
112
|
lockedPrice?: number | undefined;
|
|
@@ -115,18 +115,23 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
|
|
|
115
115
|
}, {
|
|
116
116
|
guestItems: {
|
|
117
117
|
storeId: string;
|
|
118
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
119
118
|
price: number;
|
|
119
|
+
listingType: "art" | "stickers" | "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
120
120
|
productId: string;
|
|
121
121
|
productTitle: string;
|
|
122
122
|
currency?: string | undefined;
|
|
123
|
-
storeName?: string | undefined;
|
|
124
123
|
quantity?: number | undefined;
|
|
124
|
+
storeName?: string | undefined;
|
|
125
125
|
productImage?: string | undefined;
|
|
126
126
|
offerId?: string | undefined;
|
|
127
127
|
lockedPrice?: number | undefined;
|
|
128
128
|
isOffer?: boolean | undefined;
|
|
129
129
|
}[];
|
|
130
130
|
}>;
|
|
131
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Renamed from `AddToCartInput` 2026-08-24 (W3) — `features/cart/schemas/
|
|
133
|
+
* firestore.ts` declares its own hand-written `AddToCartInput`, and a consumer
|
|
134
|
+
* importing the name had no way to tell which one it got.
|
|
135
|
+
*/
|
|
136
|
+
export type AddToCartActionInput = z.infer<typeof addToCartSchema>;
|
|
132
137
|
export type MergeGuestCartInput = z.infer<typeof mergeGuestCartSchema>;
|
|
@@ -10,6 +10,19 @@ const cartItemBaseSchema = z.object({
|
|
|
10
10
|
quantity: z.number().int().min(1).max(99).default(1),
|
|
11
11
|
// SB1-G Phase 4 — canonical listing-kind snapshot.
|
|
12
12
|
// SB-UNI-D — "bundle" removed from the listing-kind enum.
|
|
13
|
+
/*
|
|
14
|
+
* All NINE listing types. `art` and `stickers` were missing until
|
|
15
|
+
* 2026-08-24 (W3) — added to the union, the plugin registry, the capability
|
|
16
|
+
* map and the Sieve alias map, but not here.
|
|
17
|
+
*
|
|
18
|
+
* Not a live bug today, and verified rather than assumed (Rule #4): the real
|
|
19
|
+
* add-to-cart path is `POST /api/cart`, which takes only {productId,
|
|
20
|
+
* quantity} and derives the type server-side via `normalizeListingType`,
|
|
21
|
+
* never validating it against an enum. This enum sits on paths an art or
|
|
22
|
+
* sticker listing cannot currently reach. It was a trap waiting for the
|
|
23
|
+
* first caller that did — the third instalment of Root Cause #58, where a
|
|
24
|
+
* union member is added everywhere except the one allowlist that gates it.
|
|
25
|
+
*/
|
|
13
26
|
listingType: z.enum([
|
|
14
27
|
"standard",
|
|
15
28
|
"auction",
|
|
@@ -18,6 +31,8 @@ const cartItemBaseSchema = z.object({
|
|
|
18
31
|
"classified",
|
|
19
32
|
"digital-code",
|
|
20
33
|
"live",
|
|
34
|
+
"art",
|
|
35
|
+
"stickers",
|
|
21
36
|
]),
|
|
22
37
|
isOffer: z.boolean().optional(),
|
|
23
38
|
offerId: z.string().optional(),
|
|
@@ -26,35 +26,35 @@ export declare const bundleQueryRuleSchema: z.ZodDiscriminatedUnion<"type", [z.Z
|
|
|
26
26
|
/** Eligible listing types for a dynamic bundle rule. */
|
|
27
27
|
listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
|
|
28
28
|
}, "strip", z.ZodTypeAny, {
|
|
29
|
-
|
|
29
|
+
categorySlug?: string | undefined;
|
|
30
30
|
brandSlug?: string | undefined;
|
|
31
31
|
tags?: string[] | undefined;
|
|
32
|
-
categorySlug?: string | undefined;
|
|
33
|
-
}, {
|
|
34
32
|
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
categorySlug?: string | undefined;
|
|
35
35
|
brandSlug?: string | undefined;
|
|
36
36
|
tags?: string[] | undefined;
|
|
37
|
-
|
|
37
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
38
38
|
}>;
|
|
39
39
|
orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
|
|
40
40
|
limit: z.ZodNumber;
|
|
41
41
|
}, "strip", z.ZodTypeAny, {
|
|
42
42
|
type: "dynamic";
|
|
43
43
|
filter: {
|
|
44
|
-
|
|
44
|
+
categorySlug?: string | undefined;
|
|
45
45
|
brandSlug?: string | undefined;
|
|
46
46
|
tags?: string[] | undefined;
|
|
47
|
-
|
|
47
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
48
48
|
};
|
|
49
49
|
limit: number;
|
|
50
50
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
51
51
|
}, {
|
|
52
52
|
type: "dynamic";
|
|
53
53
|
filter: {
|
|
54
|
-
|
|
54
|
+
categorySlug?: string | undefined;
|
|
55
55
|
brandSlug?: string | undefined;
|
|
56
56
|
tags?: string[] | undefined;
|
|
57
|
-
|
|
57
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
58
58
|
};
|
|
59
59
|
limit: number;
|
|
60
60
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -102,35 +102,35 @@ export declare const bundleCreateSchema: z.ZodObject<{
|
|
|
102
102
|
/** Eligible listing types for a dynamic bundle rule. */
|
|
103
103
|
listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
|
|
104
104
|
}, "strip", z.ZodTypeAny, {
|
|
105
|
-
|
|
105
|
+
categorySlug?: string | undefined;
|
|
106
106
|
brandSlug?: string | undefined;
|
|
107
107
|
tags?: string[] | undefined;
|
|
108
|
-
categorySlug?: string | undefined;
|
|
109
|
-
}, {
|
|
110
108
|
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
109
|
+
}, {
|
|
110
|
+
categorySlug?: string | undefined;
|
|
111
111
|
brandSlug?: string | undefined;
|
|
112
112
|
tags?: string[] | undefined;
|
|
113
|
-
|
|
113
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
114
114
|
}>;
|
|
115
115
|
orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
|
|
116
116
|
limit: z.ZodNumber;
|
|
117
117
|
}, "strip", z.ZodTypeAny, {
|
|
118
118
|
type: "dynamic";
|
|
119
119
|
filter: {
|
|
120
|
-
|
|
120
|
+
categorySlug?: string | undefined;
|
|
121
121
|
brandSlug?: string | undefined;
|
|
122
122
|
tags?: string[] | undefined;
|
|
123
|
-
|
|
123
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
124
124
|
};
|
|
125
125
|
limit: number;
|
|
126
126
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
127
127
|
}, {
|
|
128
128
|
type: "dynamic";
|
|
129
129
|
filter: {
|
|
130
|
-
|
|
130
|
+
categorySlug?: string | undefined;
|
|
131
131
|
brandSlug?: string | undefined;
|
|
132
132
|
tags?: string[] | undefined;
|
|
133
|
-
|
|
133
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
134
134
|
};
|
|
135
135
|
limit: number;
|
|
136
136
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -172,10 +172,10 @@ export declare const bundleCreateSchema: z.ZodObject<{
|
|
|
172
172
|
} | {
|
|
173
173
|
type: "dynamic";
|
|
174
174
|
filter: {
|
|
175
|
-
|
|
175
|
+
categorySlug?: string | undefined;
|
|
176
176
|
brandSlug?: string | undefined;
|
|
177
177
|
tags?: string[] | undefined;
|
|
178
|
-
|
|
178
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
179
179
|
};
|
|
180
180
|
limit: number;
|
|
181
181
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -204,10 +204,10 @@ export declare const bundleCreateSchema: z.ZodObject<{
|
|
|
204
204
|
} | {
|
|
205
205
|
type: "dynamic";
|
|
206
206
|
filter: {
|
|
207
|
-
|
|
207
|
+
categorySlug?: string | undefined;
|
|
208
208
|
brandSlug?: string | undefined;
|
|
209
209
|
tags?: string[] | undefined;
|
|
210
|
-
|
|
210
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
211
211
|
};
|
|
212
212
|
limit: number;
|
|
213
213
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -250,35 +250,35 @@ export declare const bundleUpdateSchema: z.ZodObject<{
|
|
|
250
250
|
/** Eligible listing types for a dynamic bundle rule. */
|
|
251
251
|
listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
|
|
252
252
|
}, "strip", z.ZodTypeAny, {
|
|
253
|
-
|
|
253
|
+
categorySlug?: string | undefined;
|
|
254
254
|
brandSlug?: string | undefined;
|
|
255
255
|
tags?: string[] | undefined;
|
|
256
|
-
categorySlug?: string | undefined;
|
|
257
|
-
}, {
|
|
258
256
|
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
257
|
+
}, {
|
|
258
|
+
categorySlug?: string | undefined;
|
|
259
259
|
brandSlug?: string | undefined;
|
|
260
260
|
tags?: string[] | undefined;
|
|
261
|
-
|
|
261
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
262
262
|
}>;
|
|
263
263
|
orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
|
|
264
264
|
limit: z.ZodNumber;
|
|
265
265
|
}, "strip", z.ZodTypeAny, {
|
|
266
266
|
type: "dynamic";
|
|
267
267
|
filter: {
|
|
268
|
-
|
|
268
|
+
categorySlug?: string | undefined;
|
|
269
269
|
brandSlug?: string | undefined;
|
|
270
270
|
tags?: string[] | undefined;
|
|
271
|
-
|
|
271
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
272
272
|
};
|
|
273
273
|
limit: number;
|
|
274
274
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
275
275
|
}, {
|
|
276
276
|
type: "dynamic";
|
|
277
277
|
filter: {
|
|
278
|
-
|
|
278
|
+
categorySlug?: string | undefined;
|
|
279
279
|
brandSlug?: string | undefined;
|
|
280
280
|
tags?: string[] | undefined;
|
|
281
|
-
|
|
281
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
282
282
|
};
|
|
283
283
|
limit: number;
|
|
284
284
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -331,10 +331,10 @@ export declare const bundleUpdateSchema: z.ZodObject<{
|
|
|
331
331
|
} | {
|
|
332
332
|
type: "dynamic";
|
|
333
333
|
filter: {
|
|
334
|
-
|
|
334
|
+
categorySlug?: string | undefined;
|
|
335
335
|
brandSlug?: string | undefined;
|
|
336
336
|
tags?: string[] | undefined;
|
|
337
|
-
|
|
337
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
338
338
|
};
|
|
339
339
|
limit: number;
|
|
340
340
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -362,10 +362,10 @@ export declare const bundleUpdateSchema: z.ZodObject<{
|
|
|
362
362
|
} | {
|
|
363
363
|
type: "dynamic";
|
|
364
364
|
filter: {
|
|
365
|
-
|
|
365
|
+
categorySlug?: string | undefined;
|
|
366
366
|
brandSlug?: string | undefined;
|
|
367
367
|
tags?: string[] | undefined;
|
|
368
|
-
|
|
368
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
369
369
|
};
|
|
370
370
|
limit: number;
|
|
371
371
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -44,13 +44,23 @@ export interface EmiInstallmentPlan {
|
|
|
44
44
|
/** Decimal rupees. */
|
|
45
45
|
amount: number;
|
|
46
46
|
}
|
|
47
|
-
export interface EmiScheduleResult {
|
|
47
|
+
export interface EmiScheduleResult extends BuyerEmiQuote {
|
|
48
|
+
surchargeSellerShare: number;
|
|
49
|
+
surchargePlatformShare: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The buyer-visible half of an EMI schedule — everything the checkout UI
|
|
53
|
+
* renders, with the platform/seller surcharge split deliberately absent.
|
|
54
|
+
*
|
|
55
|
+
* This exists so the browser never needs `surchargeSellerSharePercent`, an
|
|
56
|
+
* internal revenue-split figure. `computeEmiSchedule` below adds the split
|
|
57
|
+
* back for the two server-side order-creation callers.
|
|
58
|
+
*/
|
|
59
|
+
export interface BuyerEmiQuote {
|
|
48
60
|
/** Down payment collected at checkout, decimal rupees. */
|
|
49
61
|
tokenAmount: number;
|
|
50
62
|
/** Total surcharge across the whole tenure, decimal rupees. */
|
|
51
63
|
surchargeAmount: number;
|
|
52
|
-
surchargeSellerShare: number;
|
|
53
|
-
surchargePlatformShare: number;
|
|
54
64
|
installments: EmiInstallmentPlan[];
|
|
55
65
|
/** Sum of all installment amounts — what's still owed after the token. */
|
|
56
66
|
remainingBalance: number;
|
|
@@ -60,4 +70,15 @@ export interface EmiScheduleResult {
|
|
|
60
70
|
* calendar month AFTER purchase, regardless of which day of the current
|
|
61
71
|
* month the purchase happens on.
|
|
62
72
|
*/
|
|
73
|
+
export declare function computeBuyerEmiQuote(sellerSubtotal: number, tenureMonths: number, settings: Pick<EmiSettings, "tokenPercent" | "billingDay" | "surchargePercentPerMonth">, purchaseDate?: Date): BuyerEmiQuote;
|
|
74
|
+
/**
|
|
75
|
+
* Server-side schedule — the buyer quote plus the platform/seller surcharge
|
|
76
|
+
* split. Order creation needs the split; the checkout UI does not, and must
|
|
77
|
+
* use `computeBuyerEmiQuote` so `surchargeSellerSharePercent` never has to be
|
|
78
|
+
* shipped to the browser.
|
|
79
|
+
*
|
|
80
|
+
* `surchargeSellerSharePercent` stays REQUIRED here on purpose: defaulting it
|
|
81
|
+
* to 0 would let a server caller that forgot to pass it silently record a zero
|
|
82
|
+
* seller share on a real order.
|
|
83
|
+
*/
|
|
63
84
|
export declare function computeEmiSchedule(sellerSubtotal: number, tenureMonths: number, settings: Pick<EmiSettings, "tokenPercent" | "billingDay" | "surchargePercentPerMonth" | "surchargeSellerSharePercent">, purchaseDate?: Date): EmiScheduleResult;
|
|
@@ -35,12 +35,10 @@ export function checkEmiEligibility(sellerSubtotal, sellerEmiEnabled, settings)
|
|
|
35
35
|
* calendar month AFTER purchase, regardless of which day of the current
|
|
36
36
|
* month the purchase happens on.
|
|
37
37
|
*/
|
|
38
|
-
export function
|
|
38
|
+
export function computeBuyerEmiQuote(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
|
|
39
39
|
const tokenAmount = roundRupees(sellerSubtotal * (settings.tokenPercent / 100));
|
|
40
40
|
const principalRemaining = sellerSubtotal - tokenAmount;
|
|
41
41
|
const surchargeAmount = roundRupees(principalRemaining * (settings.surchargePercentPerMonth / 100) * tenureMonths);
|
|
42
|
-
const surchargeSellerShare = roundRupees(surchargeAmount * (settings.surchargeSellerSharePercent / 100));
|
|
43
|
-
const surchargePlatformShare = roundRupees(surchargeAmount - surchargeSellerShare);
|
|
44
42
|
const totalToInstall = roundRupees(principalRemaining + surchargeAmount);
|
|
45
43
|
const baseInstallment = roundRupees(Math.floor((totalToInstall / tenureMonths) * 100) / 100);
|
|
46
44
|
const remainder = roundRupees(totalToInstall - baseInstallment * tenureMonths);
|
|
@@ -55,9 +53,26 @@ export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purch
|
|
|
55
53
|
return {
|
|
56
54
|
tokenAmount,
|
|
57
55
|
surchargeAmount,
|
|
58
|
-
surchargeSellerShare,
|
|
59
|
-
surchargePlatformShare,
|
|
60
56
|
installments,
|
|
61
57
|
remainingBalance: totalToInstall,
|
|
62
58
|
};
|
|
63
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Server-side schedule — the buyer quote plus the platform/seller surcharge
|
|
62
|
+
* split. Order creation needs the split; the checkout UI does not, and must
|
|
63
|
+
* use `computeBuyerEmiQuote` so `surchargeSellerSharePercent` never has to be
|
|
64
|
+
* shipped to the browser.
|
|
65
|
+
*
|
|
66
|
+
* `surchargeSellerSharePercent` stays REQUIRED here on purpose: defaulting it
|
|
67
|
+
* to 0 would let a server caller that forgot to pass it silently record a zero
|
|
68
|
+
* seller share on a real order.
|
|
69
|
+
*/
|
|
70
|
+
export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
|
|
71
|
+
const quote = computeBuyerEmiQuote(sellerSubtotal, tenureMonths, settings, purchaseDate);
|
|
72
|
+
const surchargeSellerShare = roundRupees(quote.surchargeAmount * (settings.surchargeSellerSharePercent / 100));
|
|
73
|
+
return {
|
|
74
|
+
...quote,
|
|
75
|
+
surchargeSellerShare,
|
|
76
|
+
surchargePlatformShare: roundRupees(quote.surchargeAmount - surchargeSellerShare),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -58,9 +58,9 @@ export declare const eventUpdateSchema: z.ZodObject<Omit<{
|
|
|
58
58
|
location?: string | undefined;
|
|
59
59
|
description?: string | undefined;
|
|
60
60
|
tags?: string[] | undefined;
|
|
61
|
-
maxEntries?: number | undefined;
|
|
62
61
|
startsAt?: string | undefined;
|
|
63
62
|
endsAt?: string | undefined;
|
|
63
|
+
maxEntries?: number | undefined;
|
|
64
64
|
imageUrl?: string | undefined;
|
|
65
65
|
entryFee?: number | undefined;
|
|
66
66
|
isOnline?: boolean | undefined;
|
|
@@ -70,9 +70,9 @@ export declare const eventUpdateSchema: z.ZodObject<Omit<{
|
|
|
70
70
|
location?: string | undefined;
|
|
71
71
|
description?: string | undefined;
|
|
72
72
|
tags?: string[] | undefined;
|
|
73
|
-
maxEntries?: number | undefined;
|
|
74
73
|
startsAt?: string | undefined;
|
|
75
74
|
endsAt?: string | undefined;
|
|
75
|
+
maxEntries?: number | undefined;
|
|
76
76
|
imageUrl?: string | undefined;
|
|
77
77
|
entryFee?: number | undefined;
|
|
78
78
|
isOnline?: boolean | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SectionType } from "../../../../features/homepage/schemas/firestore";
|
|
2
|
+
import type { FeatureFlagKey } from "../../../../features/admin/schemas/firestore";
|
|
3
|
+
/** Section types that require a feature flag to be enabled to show on the homepage. */
|
|
4
|
+
export declare const SECTION_FEATURE_GATE: Partial<Record<SectionType, FeatureFlagKey>>;
|
|
5
|
+
/**
|
|
6
|
+
* Drop sections whose feature flag is off.
|
|
7
|
+
*
|
|
8
|
+
* A section type with no gate entry always passes, and a MISSING flag value
|
|
9
|
+
* counts as enabled (`!== false`) — the flags map is partial, and a section
|
|
10
|
+
* must not vanish just because an admin has never opened Site Settings.
|
|
11
|
+
*/
|
|
12
|
+
export declare function filterSectionsByFeatureFlags<T extends {
|
|
13
|
+
type: string;
|
|
14
|
+
}>(sections: readonly T[], flags: Partial<Record<FeatureFlagKey, unknown>> | null | undefined): T[];
|