@mohasinac/appkit 4.64.1 → 4.66.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/.build-stamp.json +3 -3
- package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +4 -1
- package/dist/_internal/client/features/digital-code/DigitalContentPoolManager.js +5 -1
- package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +1 -1
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +3 -1
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -2
- package/dist/_internal/client/features/lottery/LotteryAdminSlotView.js +5 -1
- package/dist/_internal/client/features/lottery/LotteryDetailView.js +6 -1
- package/dist/_internal/client/features/lottery/LotteryEntriesView.js +6 -1
- package/dist/_internal/client/features/lottery/LotteryListView.js +7 -1
- package/dist/_internal/client/features/lottery/LotteryPullForm.js +3 -1
- package/dist/_internal/client/features/lottery/LotterySlotGrid.js +3 -1
- package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +6 -1
- package/dist/_internal/client/scaffolds/AppShell.js +3 -1
- package/dist/_internal/server/features/account/data.js +2 -1
- package/dist/_internal/server/features/auctions/service.js +1 -1
- package/dist/_internal/server/features/auth/capabilities.js +1 -1
- package/dist/_internal/server/features/auth/permissions.js +1 -1
- package/dist/_internal/server/features/brands/actions.js +1 -1
- package/dist/_internal/server/features/brands/data.js +1 -1
- package/dist/_internal/server/features/brands/service.js +1 -1
- package/dist/_internal/server/features/bundles/actions.js +1 -1
- package/dist/_internal/server/features/bundles/data.js +2 -2
- package/dist/_internal/server/features/cart/actions.js +1 -1
- package/dist/_internal/server/features/cart/data.js +1 -1
- package/dist/_internal/server/features/cart/service.js +1 -1
- package/dist/_internal/server/features/categories/data.js +1 -1
- package/dist/_internal/server/features/checkout/actions.js +20 -3
- package/dist/_internal/server/features/checkout/group-rule-revalidation.js +1 -1
- package/dist/_internal/server/features/checkout/locked-lines.js +1 -1
- package/dist/_internal/server/features/checkout/upi-resolution.js +2 -1
- package/dist/_internal/server/features/grouped/data.js +2 -1
- package/dist/_internal/server/features/history/actions.d.ts +1 -1
- package/dist/_internal/server/features/history/actions.js +1 -1
- package/dist/_internal/server/features/history/data.d.ts +1 -1
- package/dist/_internal/server/features/history/data.js +1 -1
- package/dist/_internal/server/features/item-requests/data.js +1 -1
- package/dist/_internal/server/features/messages/actions.js +1 -1
- package/dist/_internal/server/features/payouts/actions.js +1 -1
- package/dist/_internal/server/features/pre-orders/actions.js +1 -1
- package/dist/_internal/server/features/pre-orders/service.js +1 -1
- package/dist/_internal/server/features/prize-draws/actions.js +1 -1
- package/dist/_internal/server/features/products/actions.js +1 -1
- package/dist/_internal/server/features/products/data.js +1 -1
- package/dist/_internal/server/features/products/list-public.js +1 -1
- package/dist/_internal/server/features/products/service.js +1 -1
- package/dist/_internal/server/features/promotions/actions.js +1 -1
- package/dist/_internal/server/features/promotions/adapters.js +9 -0
- package/dist/_internal/server/features/promotions/data.d.ts +24 -3
- package/dist/_internal/server/features/promotions/data.js +41 -6
- package/dist/_internal/server/features/promotions/index.d.ts +1 -1
- package/dist/_internal/server/features/promotions/index.js +1 -1
- package/dist/_internal/server/features/promotions/service.js +1 -1
- package/dist/_internal/server/features/search/index-build/sources.js +27 -12
- package/dist/_internal/server/features/seo/sitemap.js +79 -13
- package/dist/_internal/server/features/shared/listing-data-factory.js +1 -1
- package/dist/_internal/server/features/shipping/courier-block.js +1 -1
- package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
- package/dist/_internal/server/features/site-settings/adapters.js +16 -1
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +1 -1
- package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
- package/dist/_internal/server/features/stores/adapters.js +14 -0
- package/dist/_internal/server/features/stores/data.js +1 -1
- package/dist/_internal/server/features/stores/tabs.d.ts +19 -15
- package/dist/_internal/server/features/stores/tabs.js +20 -21
- package/dist/_internal/server/features/sublisting-categories/data.js +1 -1
- package/dist/_internal/server/features/wishlist/actions.d.ts +1 -1
- package/dist/_internal/server/features/wishlist/actions.js +1 -1
- package/dist/_internal/server/features/wishlist/data.d.ts +1 -1
- package/dist/_internal/server/features/wishlist/data.js +1 -1
- package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.js +9 -4
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +1 -1
- package/dist/_internal/server/jobs/core/cartPrune.js +1 -1
- package/dist/_internal/server/jobs/core/catalogueImageStalenessReminder.js +1 -1
- package/dist/_internal/server/jobs/core/categoryTaxonomyBackfill.js +22 -0
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +1 -1
- package/dist/_internal/server/jobs/core/countersReconcile.js +0 -1
- package/dist/_internal/server/jobs/core/couponExpiry.js +1 -1
- package/dist/_internal/server/jobs/core/dailyDataCleanup.js +2 -1
- package/dist/_internal/server/jobs/core/draftPrune.js +1 -1
- package/dist/_internal/server/jobs/core/hardBanReinstatement.js +1 -1
- package/dist/_internal/server/jobs/core/newsletterExport.js +1 -1
- package/dist/_internal/server/jobs/core/notificationPrune.js +1 -1
- package/dist/_internal/server/jobs/core/onJobCreated.js +1 -1
- package/dist/_internal/server/jobs/core/onOrderCreate.js +3 -1
- package/dist/_internal/server/jobs/core/onProductWrite.js +2 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +2 -1
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +1 -1
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +1 -1
- package/dist/_internal/server/jobs/core/revenueRollup.js +1 -1
- package/dist/_internal/server/jobs/core/runJobOnce.js +1 -1
- package/dist/_internal/server/jobs/core/sellerStandingRollup.js +1 -1
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +1 -1
- package/dist/_internal/server/jobs/handlers/onCatalogueSubmittedForApproval.js +2 -2
- package/dist/_internal/shared/features/blog/schema.d.ts +12 -12
- package/dist/_internal/shared/features/brands/schema.d.ts +19 -19
- package/dist/_internal/shared/features/cart/schema.d.ts +17 -17
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +60 -60
- package/dist/_internal/shared/features/events/schema.d.ts +4 -4
- package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
- package/dist/_internal/shared/features/products/schema.d.ts +2 -2
- package/dist/_internal/shared/features/promotions/schema.d.ts +12 -12
- package/dist/_internal/shared/features/reviews/schema.d.ts +3 -3
- package/dist/_internal/shared/features/site-settings/types.d.ts +10 -2
- package/dist/_internal/shared/features/sticker-trace/trace/segment.js +13 -2
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +54 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +72 -0
- package/dist/client.d.ts +225 -117
- package/dist/client.js +148 -74
- package/dist/constants/field-names.d.ts +1 -0
- package/dist/constants/field-names.js +14 -0
- package/dist/errors/error-handler.d.ts +1 -1
- package/dist/features/about/components/AboutView.js +9 -1
- package/dist/features/about/components/DeveloperView.js +8 -2
- package/dist/features/about/components/FAQPageView.js +5 -2
- package/dist/features/about/components/FeesView.js +4 -1
- package/dist/features/about/components/GstExplainerView.js +6 -1
- package/dist/features/about/components/GuidesHubView.js +5 -1
- package/dist/features/about/components/HelpPageView.js +6 -2
- package/dist/features/about/components/HowAuctionsWorkView.js +6 -2
- package/dist/features/about/components/HowCheckoutWorksView.js +6 -2
- package/dist/features/about/components/HowEmiWorksView.js +7 -2
- package/dist/features/about/components/HowOffersWorkView.js +6 -2
- package/dist/features/about/components/HowOrdersWorkView.js +6 -2
- package/dist/features/about/components/HowPayoutsWorkView.js +6 -2
- package/dist/features/about/components/HowPreOrdersWorkView.js +6 -2
- package/dist/features/about/components/HowReviewsWorkView.js +6 -2
- package/dist/features/about/components/PolicyPageView.js +6 -3
- package/dist/features/about/components/ProseHero.js +3 -1
- package/dist/features/about/components/PublicProfileView.js +6 -1
- package/dist/features/about/components/SecurityPrivacyView.js +6 -2
- package/dist/features/about/components/ShippingPolicyView.js +7 -3
- package/dist/features/about/components/SpotAFakeView.js +6 -1
- package/dist/features/about/components/TrackOrderView.js +5 -2
- package/dist/features/about/components/UnauthorizedView.js +5 -2
- package/dist/features/about/schemas/index.d.ts +18 -18
- package/dist/features/account/api/[userId]/addresses/route.js +1 -5
- package/dist/features/account/components/AddressBook.js +4 -1
- package/dist/features/account/components/AddressFilters.js +1 -1
- package/dist/features/account/components/AddressForm.js +1 -1
- package/dist/features/account/components/AddressSelectorCreate.js +2 -1
- package/dist/features/account/components/AddressesIndexListing.js +5 -1
- package/dist/features/account/components/BecomeSellerView.js +2 -1
- package/dist/features/account/components/BuyerAccountGuideView.js +6 -1
- package/dist/features/account/components/BuyerAuctionsGuideView.js +5 -1
- package/dist/features/account/components/BuyerOrdersGuideView.js +5 -1
- package/dist/features/account/components/BuyerShoppingGuideView.js +5 -1
- package/dist/features/account/components/LinkedAccountsSection.js +5 -1
- package/dist/features/account/components/NotificationBell.js +8 -1
- package/dist/features/account/components/NotificationPreferencesPanel.js +6 -1
- package/dist/features/account/components/OrderDetailView.d.ts +1 -1
- package/dist/features/account/components/OrderDetailView.js +1 -1
- package/dist/features/account/components/ProfileView.d.ts +1 -1
- package/dist/features/account/components/ProfileView.js +1 -1
- package/dist/features/account/components/UserAccountHubView.d.ts +1 -1
- package/dist/features/account/components/UserAccountHubView.js +1 -1
- package/dist/features/account/components/UserBidsView.js +5 -1
- package/dist/features/account/components/UserOffersPanel.js +9 -1
- package/dist/features/account/components/UserOrderTrackView.d.ts +1 -1
- package/dist/features/account/components/UserOrderTrackView.js +1 -1
- package/dist/features/account/components/UserOrdersView.js +6 -1
- package/dist/features/account/components/UserReturnsView.js +3 -1
- package/dist/features/account/components/UserSidebar.js +8 -1
- package/dist/features/account/schemas/index.d.ts +10 -10
- package/dist/features/addresses/repository/addresses.repository.js +1 -1
- package/dist/features/addresses/schemas/address-form.d.ts +16 -16
- package/dist/features/addresses/schemas/index.d.ts +2 -2
- package/dist/features/admin/actions/admin-actions.d.ts +3 -3
- package/dist/features/admin/actions/admin-coupon-actions.d.ts +1 -1
- package/dist/features/admin/actions/admin-read-actions.d.ts +3 -3
- package/dist/features/admin/api/bids/route.js +1 -5
- package/dist/features/admin/api/coupons/route.js +1 -5
- package/dist/features/admin/api/products/route.js +1 -5
- package/dist/features/admin/api/reviews/route.js +1 -5
- package/dist/features/admin/components/AdminActionIndexView.d.ts +1 -1
- package/dist/features/admin/components/AdminActionIndexView.js +7 -1
- package/dist/features/admin/components/AdminAdEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminAdEditorView.js +8 -1
- package/dist/features/admin/components/AdminAddressBookView.js +8 -1
- package/dist/features/admin/components/AdminAddressClustersView.js +7 -1
- package/dist/features/admin/components/AdminAddressEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminAddressEditorView.js +4 -1
- package/dist/features/admin/components/AdminAddressesView.js +6 -1
- package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +1 -1
- package/dist/features/admin/components/AdminAllEventEntriesView.js +5 -1
- package/dist/features/admin/components/AdminAnalyticsGuideView.js +5 -1
- package/dist/features/admin/components/AdminAnalyticsView.js +4 -2
- package/dist/features/admin/components/AdminArtView.d.ts +1 -1
- package/dist/features/admin/components/AdminArtView.js +1 -1
- package/dist/features/admin/components/AdminAuditLogView.d.ts +1 -1
- package/dist/features/admin/components/AdminAuditLogView.js +5 -1
- package/dist/features/admin/components/AdminBeysView.d.ts +1 -1
- package/dist/features/admin/components/AdminBeysView.js +3 -1
- package/dist/features/admin/components/AdminBidsView.d.ts +1 -1
- package/dist/features/admin/components/AdminBidsView.js +7 -2
- package/dist/features/admin/components/AdminBlogEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminBlogEditorView.js +14 -2
- package/dist/features/admin/components/AdminBlogView.d.ts +1 -1
- package/dist/features/admin/components/AdminBlogView.js +2 -1
- package/dist/features/admin/components/AdminBrandEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminBrandEditorView.js +7 -2
- package/dist/features/admin/components/AdminBrandsView.d.ts +1 -1
- package/dist/features/admin/components/AdminBrandsView.js +4 -2
- package/dist/features/admin/components/AdminBundleEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminBundleEditorView.js +3 -1
- package/dist/features/admin/components/AdminBundlesView.js +7 -1
- package/dist/features/admin/components/AdminCarouselEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminCarouselEditorView.js +12 -3
- package/dist/features/admin/components/AdminCarouselGroupEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminCarouselView.d.ts +1 -1
- package/dist/features/admin/components/AdminCarouselView.js +16 -2
- package/dist/features/admin/components/AdminCartsView.d.ts +1 -1
- package/dist/features/admin/components/AdminCartsView.js +3 -1
- package/dist/features/admin/components/AdminCatalogGuideView.js +5 -1
- package/dist/features/admin/components/AdminCategoriesView.d.ts +1 -1
- package/dist/features/admin/components/AdminCategoriesView.js +3 -1
- package/dist/features/admin/components/AdminCategoryEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +2 -2
- package/dist/features/admin/components/AdminClassifiedView.d.ts +1 -1
- package/dist/features/admin/components/AdminClassifiedView.js +1 -1
- package/dist/features/admin/components/AdminContactView.d.ts +1 -1
- package/dist/features/admin/components/AdminContactView.js +5 -1
- package/dist/features/admin/components/AdminContentGuideView.js +5 -1
- package/dist/features/admin/components/AdminCouponEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminCouponEditorView.js +5 -1
- package/dist/features/admin/components/AdminCouponsView.d.ts +1 -1
- package/dist/features/admin/components/AdminCouponsView.js +6 -1
- package/dist/features/admin/components/AdminDashboardView.d.ts +1 -1
- package/dist/features/admin/components/AdminDashboardView.js +2 -2
- package/dist/features/admin/components/AdminDigitalCodesView.d.ts +1 -1
- package/dist/features/admin/components/AdminDigitalCodesView.js +1 -1
- package/dist/features/admin/components/AdminFaqEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminFaqEditorView.js +12 -2
- package/dist/features/admin/components/AdminFaqsView.d.ts +1 -1
- package/dist/features/admin/components/AdminFaqsView.js +3 -1
- package/dist/features/admin/components/AdminFeatureEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminFeatureEditorView.js +6 -2
- package/dist/features/admin/components/AdminFeaturesView.d.ts +1 -1
- package/dist/features/admin/components/AdminFeaturesView.js +2 -1
- package/dist/features/admin/components/AdminFulfillmentView.js +2 -1
- package/dist/features/admin/components/AdminGatewayEventsView.d.ts +1 -1
- package/dist/features/admin/components/AdminGatewayEventsView.js +8 -1
- package/dist/features/admin/components/AdminGroupedListingsView.d.ts +1 -1
- package/dist/features/admin/components/AdminGroupedListingsView.js +7 -2
- package/dist/features/admin/components/AdminGuideHubView.js +7 -2
- package/dist/features/admin/components/AdminHistoryView.d.ts +1 -1
- package/dist/features/admin/components/AdminHistoryView.js +1 -1
- package/dist/features/admin/components/AdminIntegrationsView.js +6 -1
- package/dist/features/admin/components/AdminInvoicingView.js +6 -1
- package/dist/features/admin/components/AdminLiveView.d.ts +1 -1
- package/dist/features/admin/components/AdminLiveView.js +1 -1
- package/dist/features/admin/components/AdminMediaView.d.ts +1 -1
- package/dist/features/admin/components/AdminMediaView.js +11 -1
- package/dist/features/admin/components/AdminMoneyCasesView.d.ts +1 -1
- package/dist/features/admin/components/AdminMoneyCasesView.js +7 -1
- package/dist/features/admin/components/AdminNavEditorView.js +3 -1
- package/dist/features/admin/components/AdminNavigationView.d.ts +1 -1
- package/dist/features/admin/components/AdminNavigationView.js +10 -1
- package/dist/features/admin/components/AdminNewsletterView.d.ts +1 -1
- package/dist/features/admin/components/AdminNewsletterView.js +7 -1
- package/dist/features/admin/components/AdminNotificationsView.d.ts +1 -1
- package/dist/features/admin/components/AdminNotificationsView.js +5 -1
- package/dist/features/admin/components/AdminOffersView.d.ts +1 -1
- package/dist/features/admin/components/AdminOffersView.js +5 -1
- package/dist/features/admin/components/AdminOrderEditorView.js +8 -2
- package/dist/features/admin/components/AdminOrdersGuideView.js +4 -1
- package/dist/features/admin/components/AdminOrdersView.d.ts +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +3 -1
- package/dist/features/admin/components/AdminPartsView.d.ts +1 -1
- package/dist/features/admin/components/AdminPartsView.js +3 -1
- package/dist/features/admin/components/AdminPaymentClustersView.js +7 -1
- package/dist/features/admin/components/AdminPaymentMethodsView.js +7 -1
- package/dist/features/admin/components/AdminPaymentsGuideView.js +4 -1
- package/dist/features/admin/components/AdminPayoutsView.d.ts +1 -1
- package/dist/features/admin/components/AdminPayoutsView.js +5 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.d.ts +1 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +7 -1
- package/dist/features/admin/components/AdminProductEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminProductEditorView.js +5 -2
- package/dist/features/admin/components/AdminProductsView.d.ts +1 -1
- package/dist/features/admin/components/AdminProductsView.js +5 -2
- package/dist/features/admin/components/AdminReturnRequestsView.js +3 -1
- package/dist/features/admin/components/AdminReviewsView.d.ts +1 -1
- package/dist/features/admin/components/AdminReviewsView.js +8 -1
- package/dist/features/admin/components/AdminScammersView.d.ts +1 -1
- package/dist/features/admin/components/AdminScammersView.js +5 -1
- package/dist/features/admin/components/AdminSectionsView.js +1 -1
- package/dist/features/admin/components/AdminSessionsManager.js +1 -1
- package/dist/features/admin/components/AdminSessionsView.d.ts +1 -1
- package/dist/features/admin/components/AdminSessionsView.js +6 -1
- package/dist/features/admin/components/AdminSidebar.js +7 -1
- package/dist/features/admin/components/AdminSiteConfigGuideView.js +5 -1
- package/dist/features/admin/components/AdminSiteSettingsView.d.ts +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +21 -5
- package/dist/features/admin/components/AdminSparesView.d.ts +1 -1
- package/dist/features/admin/components/AdminSparesView.js +1 -1
- package/dist/features/admin/components/AdminStickersView.d.ts +1 -1
- package/dist/features/admin/components/AdminStickersView.js +1 -1
- package/dist/features/admin/components/AdminStoreAddressesView.js +1 -1
- package/dist/features/admin/components/AdminStoreEditorView.js +7 -1
- package/dist/features/admin/components/AdminStoresGuideView.js +5 -1
- package/dist/features/admin/components/AdminStoresView.d.ts +1 -1
- package/dist/features/admin/components/AdminStoresView.js +4 -1
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +8 -3
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +12 -1
- package/dist/features/admin/components/AdminSupportTicketsView.d.ts +1 -1
- package/dist/features/admin/components/AdminSupportTicketsView.js +4 -1
- package/dist/features/admin/components/AdminTaxCodeEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminTaxCodeEditorView.js +4 -1
- package/dist/features/admin/components/AdminTaxCodesView.d.ts +1 -1
- package/dist/features/admin/components/AdminTaxCodesView.js +1 -1
- package/dist/features/admin/components/AdminTeamGuideView.js +5 -1
- package/dist/features/admin/components/AdminTeamView.d.ts +1 -1
- package/dist/features/admin/components/AdminTeamView.js +4 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +4 -1
- package/dist/features/admin/components/AdminTesterChecklistView.d.ts +1 -1
- package/dist/features/admin/components/AdminTesterChecklistView.js +4 -1
- package/dist/features/admin/components/AdminTopBar.js +1 -1
- package/dist/features/admin/components/AdminTrustGuideView.js +5 -1
- package/dist/features/admin/components/AdminUserEditorView.js +12 -1
- package/dist/features/admin/components/AdminUsersGuideView.js +5 -1
- package/dist/features/admin/components/AdminUsersView.d.ts +1 -1
- package/dist/features/admin/components/AdminViewCards.js +4 -1
- package/dist/features/admin/components/AdminWishlistsView.d.ts +1 -1
- package/dist/features/admin/components/AdminWishlistsView.js +1 -1
- package/dist/features/admin/components/DashboardStats.js +3 -1
- package/dist/features/admin/components/DataListingView.d.ts +1 -1
- package/dist/features/admin/components/DataListingView.js +14 -2
- package/dist/features/admin/components/DataTable.js +7 -1
- package/dist/features/admin/components/OwnerQuickActions.d.ts +7 -1
- package/dist/features/admin/components/OwnerQuickActions.js +3 -2
- package/dist/features/admin/components/QuickEditMenu.js +2 -1
- package/dist/features/admin/components/ViewAuditLogEntryModal.js +6 -1
- package/dist/features/admin/components/ViewNotificationModal.js +6 -1
- package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +2 -1
- package/dist/features/admin/components/analytics/AdminStatCard.js +3 -1
- package/dist/features/admin/components/analytics/AdminTopProductsTable.js +3 -1
- package/dist/features/admin/components/sections/adminSectionsTypes.js +1 -0
- package/dist/features/admin/constants/site-settings-tabs.d.ts +1 -1
- package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
- package/dist/features/admin/hooks/useOptimisticRowFlag.js +1 -1
- package/dist/features/admin/schemas/action-index-form.d.ts +2 -2
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +12 -12
- package/dist/features/admin/schemas/admin-editor-forms.js +0 -1
- package/dist/features/admin/schemas/admin-ops-forms.d.ts +8 -8
- package/dist/features/admin/schemas/admin-user-form.d.ts +8 -8
- package/dist/features/admin/schemas/firestore.d.ts +52 -0
- package/dist/features/admin/schemas/firestore.js +20 -0
- package/dist/features/admin/schemas/nav-item-form.d.ts +8 -8
- package/dist/features/auctions/actions/bid-actions.js +1 -1
- package/dist/features/auctions/api/route.js +1 -8
- package/dist/features/auctions/components/AuctionBidsTable.js +6 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +1 -1
- package/dist/features/auctions/components/AuctionDetailPageView.js +12 -9
- package/dist/features/auctions/components/AuctionFilters.js +1 -1
- package/dist/features/auctions/components/AuctionLiveStatusBadge.js +1 -1
- package/dist/features/auctions/components/AuctionsListView.js +3 -1
- package/dist/features/auctions/components/CollapsibleBidHistory.js +4 -1
- package/dist/features/auctions/components/LiveBidPrice.js +3 -1
- package/dist/features/auctions/components/LiveMinIncrement.js +1 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +1 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +9 -3
- package/dist/features/auctions/components/MarketplaceAuctionGrid.d.ts +1 -1
- package/dist/features/auctions/components/MarketplaceAuctionGrid.js +3 -1
- package/dist/features/auctions/components/PlaceBidFormClient.js +8 -1
- package/dist/features/auctions/schemas/index.d.ts +34 -34
- package/dist/features/auth/components/ForgotPasswordView.js +6 -1
- package/dist/features/auth/components/Guards.js +4 -1
- package/dist/features/auth/components/LoginForm.js +7 -1
- package/dist/features/auth/components/OAuthLoadingView.js +3 -1
- package/dist/features/auth/components/RegisterForm.js +5 -1
- package/dist/features/auth/components/ResetPasswordView.js +6 -1
- package/dist/features/auth/components/SocialAuthButtons.js +4 -1
- package/dist/features/auth/components/VerifyEmailView.js +4 -1
- package/dist/features/auth/hooks/useAuth.js +1 -1
- package/dist/features/auth/schemas/index.d.ts +2 -2
- package/dist/features/before-after/api/route.js +1 -5
- package/dist/features/before-after/components/BeforeAfterGallery.js +3 -1
- package/dist/features/before-after/components/BeforeAfterSlider.js +3 -1
- package/dist/features/before-after/schemas/index.d.ts +4 -4
- package/dist/features/beys/components/BeyDetailPageView.js +7 -1
- package/dist/features/blog/actions/blog-actions.d.ts +39 -39
- package/dist/features/blog/api/route.js +1 -8
- package/dist/features/blog/components/BlogFeaturedCard.js +6 -1
- package/dist/features/blog/components/BlogFilters.js +1 -1
- package/dist/features/blog/components/BlogIndexListing.js +7 -1
- package/dist/features/blog/components/BlogIndexPageView.d.ts +2 -3
- package/dist/features/blog/components/BlogIndexPageView.js +9 -10
- package/dist/features/blog/components/BlogListView.js +6 -1
- package/dist/features/blog/components/BlogPostForm.js +9 -2
- package/dist/features/blog/components/BlogPostView.js +5 -1
- package/dist/features/blog/schemas/blog-form.d.ts +10 -10
- package/dist/features/blog/schemas/index.d.ts +80 -80
- package/dist/features/cart/actions/cart-actions.js +1 -1
- package/dist/features/cart/api/route.js +1 -5
- package/dist/features/cart/components/CartDrawer.js +6 -1
- package/dist/features/cart/components/CartGroupLineRow.js +5 -1
- package/dist/features/cart/components/CartPriceBreakdown.js +4 -1
- package/dist/features/cart/components/CartSummary.js +2 -1
- package/dist/features/cart/components/CartView.js +3 -1
- package/dist/features/cart/components/CheckoutAddressStep.js +3 -1
- package/dist/features/cart/components/CheckoutSuccessView.d.ts +1 -1
- package/dist/features/cart/components/CheckoutSuccessView.js +1 -1
- package/dist/features/cart/components/CheckoutView.js +3 -1
- package/dist/features/cart/components/PointsTenderPicker.js +3 -1
- package/dist/features/cart/components/ShippingPicker.js +4 -1
- package/dist/features/cart/components/StoreAddonsPicker.js +3 -1
- package/dist/features/cart/schemas/index.d.ts +30 -30
- package/dist/features/cart/utils/guest-cart.js +1 -5
- package/dist/features/catalogue/actions/approve-catalogue-listing.js +1 -1
- package/dist/features/catalogue/actions/list-from-catalogue.js +2 -1
- package/dist/features/catalogue/actions/submit-for-approval.js +1 -1
- package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +6 -1
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +1 -1
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +6 -1
- package/dist/features/catalogue/components/PublicCatalogueView.js +5 -1
- package/dist/features/catalogue/components/UserCatalogueView.js +7 -1
- package/dist/features/catalogue/repository/catalogue.repository.js +1 -1
- package/dist/features/catalogue/schemas/validation.d.ts +12 -12
- package/dist/features/catalogue/utils/product-from-item.js +1 -1
- package/dist/features/categories/api/route.js +5 -23
- package/dist/features/categories/components/BrandDetailPageView.js +6 -2
- package/dist/features/categories/components/BrandDetailTabs.js +2 -1
- package/dist/features/categories/components/BreadcrumbTrail.js +4 -2
- package/dist/features/categories/components/BundleBuyNowCta.js +5 -2
- package/dist/features/categories/components/BundleCollage.js +5 -1
- package/dist/features/categories/components/BundleDetailView.js +6 -1
- package/dist/features/categories/components/BundleDynamicRuleEditor.js +6 -1
- package/dist/features/categories/components/BundleItemsPicker.js +7 -1
- package/dist/features/categories/components/BundlesListView.d.ts +2 -3
- package/dist/features/categories/components/BundlesListView.js +6 -7
- package/dist/features/categories/components/CategoriesIndexListing.js +55 -6
- package/dist/features/categories/components/CategoriesIndexPageView.d.ts +2 -3
- package/dist/features/categories/components/CategoriesIndexPageView.js +3 -33
- package/dist/features/categories/components/CategoryBundlesListing.js +8 -2
- package/dist/features/categories/components/CategoryDetailPageView.js +7 -2
- package/dist/features/categories/components/CategoryDetailTabs.js +2 -1
- package/dist/features/categories/components/CategoryFilters.js +1 -1
- package/dist/features/categories/components/CategoryForm.js +3 -1
- package/dist/features/categories/components/CategoryGrid.js +3 -1
- package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +3 -1
- package/dist/features/categories/components/CategoryProductsListing.js +8 -1
- package/dist/features/categories/components/CategorySelectorCreate.js +6 -1
- package/dist/features/categories/components/CategorySortSelect.js +4 -1
- package/dist/features/categories/components/CategoryStoresListing.js +2 -1
- package/dist/features/categories/components/CategoryTableColumns.js +6 -2
- package/dist/features/categories/components/CategoryTemplatePicker.js +4 -1
- package/dist/features/categories/components/CategoryTree.js +2 -1
- package/dist/features/categories/components/ConcernCard.js +3 -1
- package/dist/features/categories/components/ConcernGrid.js +1 -1
- package/dist/features/categories/components/PriceGuidanceHint.js +3 -1
- package/dist/features/categories/components/SubcategoryCardRow.js +4 -1
- package/dist/features/categories/constants/category-tabs.d.ts +1 -1
- package/dist/features/categories/constants/category-tabs.js +7 -0
- package/dist/features/categories/hooks/useCategories.d.ts +6 -0
- package/dist/features/categories/hooks/useCategories.js +73 -2
- package/dist/features/categories/schemas/bundle-form.d.ts +22 -22
- package/dist/features/categories/schemas/index.d.ts +100 -100
- package/dist/features/categories/types/index.d.ts +1 -1
- package/dist/features/checkout/components/CheckoutStepper.js +3 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +9 -9
- package/dist/features/classified/components/ClassifiedFilters.js +3 -1
- package/dist/features/collections/api/route.js +1 -5
- package/dist/features/collections/components/CollectionCard.js +4 -1
- package/dist/features/collections/schemas/index.d.ts +9 -9
- package/dist/features/consultation/api/route.js +1 -5
- package/dist/features/consultation/components/ConsultationForm.js +3 -1
- package/dist/features/consultation/schemas/index.d.ts +8 -8
- package/dist/features/contact/components/ContactForm.js +5 -2
- package/dist/features/contact/components/ContactInfoSidebar.js +4 -1
- package/dist/features/contact/components/ContactPageView.js +6 -1
- package/dist/features/contact/email.js +2 -5
- package/dist/features/corporate/api/route.js +1 -5
- package/dist/features/corporate/components/CorporateInquiryForm.js +3 -1
- package/dist/features/dashboard/components/DashboardHubView.js +7 -1
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +8 -8
- package/dist/features/digital-codes/components/DigitalCodeFilters.js +1 -1
- package/dist/features/dispute-reasons/components/AdminDisputeReasonsView.js +4 -1
- package/dist/features/events/components/AdminEventEditorView.d.ts +1 -1
- package/dist/features/events/components/AdminEventEditorView.js +14 -3
- package/dist/features/events/components/AdminEventEntriesView.js +10 -2
- package/dist/features/events/components/AdminEventsView.d.ts +1 -1
- package/dist/features/events/components/AdminEventsView.js +2 -1
- package/dist/features/events/components/EventBanner.js +3 -1
- package/dist/features/events/components/EventCard.js +7 -1
- package/dist/features/events/components/EventDetailView.d.ts +1 -1
- package/dist/features/events/components/EventDetailView.js +1 -1
- package/dist/features/events/components/EventFilters.js +1 -1
- package/dist/features/events/components/EventFormDrawer.js +1 -1
- package/dist/features/events/components/EventInsights.js +3 -1
- package/dist/features/events/components/EventLeaderboard.js +3 -1
- package/dist/features/events/components/EventLikeButton.js +4 -1
- package/dist/features/events/components/EventLikersRail.js +5 -1
- package/dist/features/events/components/EventOfferCard.js +3 -1
- package/dist/features/events/components/EventParticipateView.js +1 -1
- package/dist/features/events/components/EventPollWidget.js +8 -1
- package/dist/features/events/components/EventRaffleEntryForm.js +3 -1
- package/dist/features/events/components/EventRaffleWinnerView.js +6 -1
- package/dist/features/events/components/EventRafflesSection.js +3 -1
- package/dist/features/events/components/EventSaleBanner.js +4 -1
- package/dist/features/events/components/EventStatusBadge.js +1 -1
- package/dist/features/events/components/EventTypeBadge.js +1 -1
- package/dist/features/events/components/EventsIndexListing.js +7 -1
- package/dist/features/events/components/EventsListPageView.d.ts +2 -3
- package/dist/features/events/components/EventsListPageView.js +11 -12
- package/dist/features/events/components/EventsListView.js +4 -1
- package/dist/features/events/components/RelatedEventsCarousel.js +3 -1
- package/dist/features/events/components/SpinWheel.js +1 -1
- package/dist/features/events/components/SpinWheelView.js +7 -1
- package/dist/features/events/schemas/event-form.d.ts +5 -0
- package/dist/features/events/schemas/event-form.js +17 -0
- package/dist/features/events/schemas/firestore.d.ts +49 -1
- package/dist/features/events/schemas/index.d.ts +184 -184
- package/dist/features/events/utils/carousel-slide.d.ts +0 -9
- package/dist/features/events/utils/carousel-slide.js +38 -1
- package/dist/features/faq/actions/faq-actions.d.ts +12 -12
- package/dist/features/faq/components/ContactCTA.js +5 -1
- package/dist/features/faq/components/FAQAccordion.js +6 -1
- package/dist/features/faq/components/FAQCategorySidebar.js +5 -1
- package/dist/features/faq/components/FAQHelpfulButtons.js +3 -1
- package/dist/features/faq/components/FAQPageContent.js +8 -1
- package/dist/features/faq/components/FAQSearchableList.js +2 -1
- package/dist/features/faq/components/FAQSortDropdown.js +4 -1
- package/dist/features/faq/components/RelatedFAQs.js +4 -1
- package/dist/features/faq/constants/help-guides.d.ts +8 -5
- package/dist/features/faq/constants/help-guides.js +9 -5
- package/dist/features/faq/schemas/index.d.ts +14 -14
- package/dist/features/filters/AsyncFacetSection.js +8 -3
- package/dist/features/filters/FilterFacetSection.js +11 -6
- package/dist/features/filters/FilterPanel.js +1 -1
- package/dist/features/filters/RangeFilter.js +8 -3
- package/dist/features/filters/SwitchFilter.js +7 -3
- package/dist/features/filters/filterUtils.d.ts +0 -2
- package/dist/features/filters/filterUtils.js +0 -4
- package/dist/features/filters/index.d.ts +1 -1
- package/dist/features/filters/index.js +1 -1
- package/dist/features/forms/Checkbox.js +7 -4
- package/dist/features/forms/Input.js +7 -5
- package/dist/features/forms/Radio.js +9 -6
- package/dist/features/forms/Select.js +5 -3
- package/dist/features/forms/Slider.js +6 -3
- package/dist/features/forms/Textarea.js +6 -3
- package/dist/features/forms/Toggle.js +6 -4
- package/dist/features/forms/index.d.ts +1 -1
- package/dist/features/forms/index.js +1 -1
- package/dist/features/forms/utils.d.ts +0 -2
- package/dist/features/forms/utils.js +0 -4
- package/dist/features/gateway-events/schemas/index.d.ts +10 -10
- package/dist/features/grouped/components/GroupedListingDetailView.js +4 -1
- package/dist/features/grouped/components/GroupedListingEditorView.js +5 -2
- package/dist/features/grouped/components/GroupedListingsCarousel.js +1 -1
- package/dist/features/grouped/schemas/grouped-listing-form.d.ts +8 -8
- package/dist/features/grouped/schemas/index.d.ts +8 -8
- package/dist/features/history/hooks/useHistory.js +1 -1
- package/dist/features/history/utils/guest-history.js +1 -5
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +4 -4
- package/dist/features/homepage/components/AdSlot.js +3 -1
- package/dist/features/homepage/components/BrandsSection.js +6 -1
- package/dist/features/homepage/components/CTABannerSection.js +6 -1
- package/dist/features/homepage/components/CharacterHotspot.js +5 -1
- package/dist/features/homepage/components/CharacterHotspotForm.js +8 -1
- package/dist/features/homepage/components/CollectionCardsSection.js +4 -1
- package/dist/features/homepage/components/CustomCardsSection.js +13 -2
- package/dist/features/homepage/components/CustomerReviewsSection.js +5 -1
- package/dist/features/homepage/components/FAQSection.js +8 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +6 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +4 -2
- package/dist/features/homepage/components/GoogleReviewsSection.js +6 -1
- package/dist/features/homepage/components/HeroCarousel.js +6 -1
- package/dist/features/homepage/components/HomepageCouponsSection.d.ts +25 -0
- package/dist/features/homepage/components/HomepageCouponsSection.js +42 -0
- package/dist/features/homepage/components/HowItWorksSection.d.ts +1 -1
- package/dist/features/homepage/components/HowItWorksSection.js +7 -1
- package/dist/features/homepage/components/MarketplaceHomepageView.js +52 -4
- package/dist/features/homepage/components/NewsletterSection.js +4 -1
- package/dist/features/homepage/components/PromoGrid.js +4 -1
- package/dist/features/homepage/components/SectionCarousel.d.ts +1 -1
- package/dist/features/homepage/components/SectionCarousel.js +6 -1
- package/dist/features/homepage/components/SecurityHighlightsSection.js +6 -1
- package/dist/features/homepage/components/ShopByCategorySection.js +7 -1
- package/dist/features/homepage/components/SocialFeedSection.js +6 -1
- package/dist/features/homepage/components/SocialPostCard.js +4 -1
- package/dist/features/homepage/components/StatsCounterSection.js +5 -1
- package/dist/features/homepage/components/TestimonialsCarousel.js +4 -1
- package/dist/features/homepage/components/TrustFeaturesSection.js +5 -1
- package/dist/features/homepage/components/WelcomeSection.js +10 -1
- package/dist/features/homepage/components/WhatsAppCommunitySection.js +8 -1
- package/dist/features/homepage/lib/section-renderer.d.ts +2 -0
- package/dist/features/homepage/lib/section-renderer.js +8 -0
- package/dist/features/homepage/schemas/firestore.d.ts +23 -2
- package/dist/features/homepage/schemas/firestore.js +2 -0
- package/dist/features/homepage/schemas/index.d.ts +133 -133
- package/dist/features/inventory/components/ReceiveStationView.js +9 -1
- package/dist/features/jobs/actions/enqueue-job.js +1 -1
- package/dist/features/layout/AppLayoutShell.d.ts +23 -1
- package/dist/features/layout/AppLayoutShell.js +13 -12
- package/dist/features/layout/AutoBreadcrumbs.js +3 -1
- package/dist/features/layout/BackToTop.js +2 -1
- package/dist/features/layout/BottomActions.js +5 -1
- package/dist/features/layout/BottomActionsContext.d.ts +1 -1
- package/dist/features/layout/BottomChrome.js +1 -1
- package/dist/features/layout/BottomNavItem.d.ts +9 -1
- package/dist/features/layout/BottomNavItem.js +20 -5
- package/dist/features/layout/BottomNavLayout.js +1 -1
- package/dist/features/layout/BottomSheet.js +4 -1
- package/dist/features/layout/Breadcrumbs.js +2 -1
- package/dist/features/layout/FooterLayout.js +5 -1
- package/dist/features/layout/LocaleSwitcher.js +1 -1
- package/dist/features/layout/NavItem.js +2 -1
- package/dist/features/layout/NavbarLayout.js +5 -1
- package/dist/features/layout/PageTabs.js +1 -1
- package/dist/features/layout/SideActionDock.js +7 -1
- package/dist/features/layout/SidebarLayout.d.ts +1 -1
- package/dist/features/layout/SidebarLayout.js +2 -1
- package/dist/features/layout/TitleBarLayout.js +9 -1
- package/dist/features/layout/index.d.ts +1 -1
- package/dist/features/live/components/LiveItemDetailPageView.js +8 -8
- package/dist/features/live/components/LiveItemFilters.js +3 -1
- package/dist/features/lottery/schemas/config-write.d.ts +10 -10
- package/dist/features/lottery/schemas/zod.d.ts +6 -6
- package/dist/features/media/MediaLightbox.js +3 -5
- package/dist/features/media/modals/ImageCropModal.js +6 -1
- package/dist/features/media/modals/ImageEditor.js +6 -1
- package/dist/features/media/modals/VideoTrimModal.js +6 -1
- package/dist/features/media/types/index.d.ts +4 -4
- package/dist/features/media/upload/MediaUploadList.js +7 -1
- package/dist/features/orders/components/OrderAddonBadges.js +2 -1
- package/dist/features/orders/components/OrderCompletionPanel.d.ts +1 -1
- package/dist/features/orders/components/OrderCompletionPanel.js +1 -1
- package/dist/features/orders/components/OrderFilters.js +1 -1
- package/dist/features/orders/components/OrderPaymentSummary.js +4 -1
- package/dist/features/orders/components/OrderProvenanceCard.js +5 -1
- package/dist/features/orders/components/OrderScopeTabs.js +1 -1
- package/dist/features/orders/components/OrderSiblingPayments.js +3 -1
- package/dist/features/orders/components/OrderStatusTimeline.js +4 -1
- package/dist/features/orders/components/OrdersList.js +4 -1
- package/dist/features/orders/components/RaiseDisputeForm.js +1 -1
- package/dist/features/orders/components/RefundHistoryTable.js +4 -1
- package/dist/features/orders/components/RefundRequestView.js +2 -2
- package/dist/features/orders/components/YourPurchaseStrip.js +5 -1
- package/dist/features/orders/schemas/index.d.ts +86 -86
- package/dist/features/parts/components/AssemblyDrawer.js +8 -1
- package/dist/features/parts/components/ModelCompositionPanel.js +5 -1
- package/dist/features/parts/components/PartDetailPageView.js +7 -1
- package/dist/features/parts/components/PartsIndexPageView.js +6 -1
- package/dist/features/parts/components/PartsSearchBox.js +5 -1
- package/dist/features/parts/schemas/firestore.d.ts +274 -0
- package/dist/features/parts/schemas/firestore.js +19 -0
- package/dist/features/payments/repository/saved-payment-methods.repository.js +1 -1
- package/dist/features/payments/schemas/index.d.ts +10 -10
- package/dist/features/points/schemas/adjust-form.d.ts +2 -2
- package/dist/features/pre-orders/api/admin/route.js +1 -5
- package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +1 -1
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +10 -3
- package/dist/features/pre-orders/components/PreOrderActionsClient.js +6 -1
- package/dist/features/pre-orders/components/PreOrderBadge.js +2 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +10 -9
- package/dist/features/pre-orders/components/PreOrderFilters.js +1 -1
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +11 -2
- package/dist/features/pre-orders/components/PreOrdersListView.js +3 -1
- package/dist/features/pre-orders/components/PreorderCard.js +1 -1
- package/dist/features/pre-orders/schemas/index.d.ts +15 -15
- package/dist/features/price-index/components/PriceIndexToolView.js +4 -1
- package/dist/features/pricing/components/AdminPricingView.js +4 -1
- package/dist/features/print/components/BoxLabelPrintView.js +5 -1
- package/dist/features/print/components/LabelProfilePicker.js +3 -1
- package/dist/features/print/components/labels.js +3 -1
- package/dist/features/products/api/route.js +1 -3
- package/dist/features/products/columns/productTableColumns.js +5 -1
- package/dist/features/products/components/ArtStickersListView.js +3 -1
- package/dist/features/products/components/AuctionDetailView.d.ts +1 -1
- package/dist/features/products/components/AuctionDetailView.js +2 -1
- package/dist/features/products/components/AuctionsIndexListing.js +10 -2
- package/dist/features/products/components/AvailabilityScopeHint.js +3 -1
- package/dist/features/products/components/AvailabilityTabs.js +1 -1
- package/dist/features/products/components/BidHistory.js +4 -1
- package/dist/features/products/components/CityCollectiblesView.js +6 -1
- package/dist/features/products/components/CompareOverlay.js +6 -1
- package/dist/features/products/components/CustomFieldsEditor.js +6 -1
- package/dist/features/products/components/CustomSectionTabContent.js +4 -6
- package/dist/features/products/components/CustomSectionsEditor.js +6 -1
- package/dist/features/products/components/FeatureBadge.js +2 -1
- package/dist/features/products/components/GroupMemberPicker.js +9 -2
- package/dist/features/products/components/GroupSettingsPanel.js +13 -2
- package/dist/features/products/components/MakeOfferButton.js +6 -1
- package/dist/features/products/components/MarketplaceBundleCard.js +6 -1
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +7 -1
- package/dist/features/products/components/NonRefundableConsentModal.js +6 -1
- package/dist/features/products/components/PreOrderDetailView.d.ts +1 -1
- package/dist/features/products/components/PreOrderDetailView.js +1 -1
- package/dist/features/products/components/PrizeDrawCollage.js +6 -1
- package/dist/features/products/components/PrizeDrawDetailPageView.js +7 -8
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.js +8 -2
- package/dist/features/products/components/PrizeDrawWinnerMappingView.js +7 -1
- package/dist/features/products/components/PrizeDrawsIndexListing.js +8 -1
- package/dist/features/products/components/PrizeDrawsListingView.js +3 -1
- package/dist/features/products/components/PrizeDrawsSection.js +3 -1
- package/dist/features/products/components/PrizeRevealModal.js +6 -1
- package/dist/features/products/components/ProductCardMetadataSection.js +3 -1
- package/dist/features/products/components/ProductDetailActions.js +4 -1
- package/dist/features/products/components/ProductDetailPageView.js +11 -9
- package/dist/features/products/components/ProductDetailView.d.ts +1 -1
- package/dist/features/products/components/ProductDetailView.js +1 -1
- package/dist/features/products/components/ProductFeatureBadges.js +4 -1
- package/dist/features/products/components/ProductFeaturesSelector.js +3 -1
- package/dist/features/products/components/ProductFilters.js +2 -1
- package/dist/features/products/components/ProductForm.js +1 -1
- package/dist/features/products/components/ProductGalleryClient.js +4 -1
- package/dist/features/products/components/ProductGradingTab.js +4 -1
- package/dist/features/products/components/ProductGrid.d.ts +1 -1
- package/dist/features/products/components/ProductGrid.js +7 -1
- package/dist/features/products/components/ProductsIndexListing.js +11 -3
- package/dist/features/products/components/ProductsIndexPageView.js +6 -2
- package/dist/features/products/components/RelatedItemsSection.js +1 -1
- package/dist/features/products/components/RelatedProducts.js +3 -1
- package/dist/features/products/components/ShowGroupSection.js +7 -1
- package/dist/features/products/components/SparesListView.js +4 -1
- package/dist/features/products/components/SublistingCarouselSection.js +4 -1
- package/dist/features/products/components/SublistingCategorySelect.js +2 -1
- package/dist/features/products/hooks/useProducts.js +1 -1
- package/dist/features/products/repository/products.repository.js +0 -1
- package/dist/features/products/schemas/index.d.ts +70 -70
- package/dist/features/products/schemas/product-features.validators.d.ts +52 -52
- package/dist/features/promotions/actions/promotions-actions.js +22 -6
- package/dist/features/promotions/api/route.js +1 -8
- package/dist/features/promotions/components/AttachedCouponsSection.js +5 -2
- package/dist/features/promotions/components/CouponCard.js +8 -1
- package/dist/features/promotions/components/CouponCodeCopyRow.js +2 -1
- package/dist/features/promotions/components/CouponHelpDetails.js +4 -1
- package/dist/features/promotions/components/CouponsIndexListing.js +12 -1
- package/dist/features/promotions/components/PromotionsView.js +4 -1
- package/dist/features/promotions/constants/attached-coupons.d.ts +14 -0
- package/dist/features/promotions/repository/coupons.repository.js +32 -2
- package/dist/features/promotions/schemas/firestore.d.ts +33 -0
- package/dist/features/promotions/schemas/firestore.js +44 -0
- package/dist/features/promotions/schemas/index.d.ts +108 -108
- package/dist/features/reviews/components/ReviewDetailPageView.js +4 -1
- package/dist/features/reviews/components/ReviewDetailShell.js +8 -1
- package/dist/features/reviews/components/ReviewFilters.js +1 -1
- package/dist/features/reviews/components/ReviewModal.js +7 -2
- package/dist/features/reviews/components/ReviewSummary.js +4 -2
- package/dist/features/reviews/components/ReviewsIndexPageView.d.ts +2 -3
- package/dist/features/reviews/components/ReviewsIndexPageView.js +12 -13
- package/dist/features/reviews/components/ReviewsList.js +7 -2
- package/dist/features/reviews/components/ReviewsListingPanel.js +7 -1
- package/dist/features/reviews/schemas/index.d.ts +40 -40
- package/dist/features/scams/components/ScamAwarenessModal.js +7 -1
- package/dist/features/scams/components/ScamProfileView.js +11 -1
- package/dist/features/scams/constants/scammer-status-display.d.ts +1 -1
- package/dist/features/scams/schemas/index.d.ts +22 -22
- package/dist/features/scams/schemas/report-form.d.ts +4 -4
- package/dist/features/search/components/EntityTypeahead.js +5 -1
- package/dist/features/search/components/Search.js +7 -1
- package/dist/features/search/components/SearchFacetRail.js +4 -1
- package/dist/features/search/components/SearchResultsClient.js +1 -1
- package/dist/features/search/components/SearchResultsPageView.js +5 -1
- package/dist/features/seller/api/coupons/route.js +1 -5
- package/dist/features/seller/api/products/route.js +1 -5
- package/dist/features/seller/components/BulkStockModal.js +2 -1
- package/dist/features/seller/components/CategoryChipPicker.js +3 -1
- package/dist/features/seller/components/FulfillmentView.js +2 -1
- package/dist/features/seller/components/GroupInlineSelect.js +1 -1
- package/dist/features/seller/components/SellerAddressesView.js +11 -2
- package/dist/features/seller/components/SellerAnalyticsAlertsView.js +9 -1
- package/dist/features/seller/components/SellerAnalyticsView.d.ts +1 -1
- package/dist/features/seller/components/SellerAnalyticsView.js +4 -1
- package/dist/features/seller/components/SellerBidsView.js +8 -2
- package/dist/features/seller/components/SellerBundlesView.js +7 -1
- package/dist/features/seller/components/SellerCouponEditorView.js +5 -1
- package/dist/features/seller/components/SellerCouponsView.d.ts +1 -1
- package/dist/features/seller/components/SellerCouponsView.js +5 -1
- package/dist/features/seller/components/SellerDashboardView.d.ts +1 -1
- package/dist/features/seller/components/SellerDashboardView.js +4 -1
- package/dist/features/seller/components/SellerFeaturesView.js +8 -1
- package/dist/features/seller/components/SellerGoogleReviewsView.js +7 -1
- package/dist/features/seller/components/SellerGroupedListingsView.js +4 -1
- package/dist/features/seller/components/SellerGuideView.d.ts +1 -1
- package/dist/features/seller/components/SellerGuideView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +4 -1
- package/dist/features/seller/components/SellerOffersView.d.ts +1 -1
- package/dist/features/seller/components/SellerOffersView.js +4 -1
- package/dist/features/seller/components/SellerOrdersView.js +8 -1
- package/dist/features/seller/components/SellerPayoutHistoryTable.js +2 -1
- package/dist/features/seller/components/SellerPayoutMethodsView.js +7 -1
- package/dist/features/seller/components/SellerPayoutRequestView.js +8 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +3 -2
- package/dist/features/seller/components/SellerPayoutStats.js +1 -1
- package/dist/features/seller/components/SellerPayoutsView.d.ts +1 -1
- package/dist/features/seller/components/SellerPayoutsView.js +10 -1
- package/dist/features/seller/components/SellerProductShell.js +1 -2
- package/dist/features/seller/components/SellerProductsCards.js +7 -1
- package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -1
- package/dist/features/seller/components/SellerProductsView.js +7 -1
- package/dist/features/seller/components/SellerReviewsView.js +11 -1
- package/dist/features/seller/components/SellerShippingConfigsView.js +6 -1
- package/dist/features/seller/components/SellerShippingView.js +2 -2
- package/dist/features/seller/components/SellerSidebar.js +7 -1
- package/dist/features/seller/components/SellerStoreCategoriesView.js +5 -1
- package/dist/features/seller/components/SellerStoreSetupView.js +2 -1
- package/dist/features/seller/components/SellerStorefrontView.js +1 -1
- package/dist/features/seller/components/SellerSupportView.d.ts +1 -1
- package/dist/features/seller/components/SellerSupportView.js +4 -1
- package/dist/features/seller/components/SellersListView.d.ts +1 -1
- package/dist/features/seller/components/SellersListView.js +1 -1
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +1 -1
- package/dist/features/seller/components/analytics/SellerRevenueChart.js +2 -1
- package/dist/features/seller/components/analytics/SellerTopProducts.js +3 -1
- package/dist/features/seller/hooks/useSellerListingData.js +0 -30
- package/dist/features/seller/schemas/coupon-form.d.ts +50 -50
- package/dist/features/seller/schemas/index.d.ts +22 -22
- package/dist/features/seller/schemas/order-forms.d.ts +12 -12
- package/dist/features/server-errors/schemas/index.d.ts +4 -4
- package/dist/features/shell/CommandPalette.js +7 -1
- package/dist/features/shell/FormShell.js +5 -1
- package/dist/features/shell/SectionForm.js +4 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +9 -1
- package/dist/features/shipments/components/AdminShipmentLotItemsView.js +11 -1
- package/dist/features/shipments/components/AdminShipmentProjectionsView.js +10 -1
- package/dist/features/shipments/components/AdminShipmentsView.d.ts +1 -1
- package/dist/features/shipments/components/AdminShipmentsView.js +3 -1
- package/dist/features/shipments/components/ShipmentItemLinkModal.js +7 -1
- package/dist/features/shipments/schemas/validation.d.ts +44 -44
- package/dist/features/site-settings/components/ActionPermissionsManager.js +7 -2
- package/dist/features/site-settings/components/NavPermissionsManager.js +6 -2
- package/dist/features/site-settings/components/ThemeManagerView.js +9 -1
- package/dist/features/status-history/components/StatusTimeline.js +4 -1
- package/dist/features/sticker-trace/components/StickerPrintPanel.js +6 -1
- package/dist/features/sticker-trace/components/StickerRetryPanel.js +4 -1
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +5 -1
- package/dist/features/sticker-trace/components/StickerTraceStudio.js +5 -1
- package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +5 -5
- package/dist/features/store-extensions/schemas/custom-role-form.d.ts +12 -12
- package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +2 -2
- package/dist/features/store-extensions/schemas/listing-template-form.d.ts +13 -13
- package/dist/features/store-extensions/schemas/payout-method-form.d.ts +10 -10
- package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +12 -12
- package/dist/features/store-extensions/schemas/store-category-form.d.ts +10 -10
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +1 -10
- package/dist/features/stores/api/[storeSlug]/products/route.js +1 -10
- package/dist/features/stores/components/InteractiveStoreCard.js +15 -2
- package/dist/features/stores/components/SellerStandingPanel.js +3 -1
- package/dist/features/stores/components/SellerTierBadge.js +2 -1
- package/dist/features/stores/components/StoreAboutView.js +5 -1
- package/dist/features/stores/components/StoreAddressSelectorCreate.js +2 -1
- package/dist/features/stores/components/StoreAuctionsListing.js +8 -1
- package/dist/features/stores/components/StoreAuctionsView.d.ts +1 -1
- package/dist/features/stores/components/StoreAuctionsView.js +1 -1
- package/dist/features/stores/components/StoreBundlesPageView.js +1 -1
- package/dist/features/stores/components/StoreCapabilitiesGuideView.js +6 -1
- package/dist/features/stores/components/StoreClassifiedsListing.js +7 -1
- package/dist/features/stores/components/StoreCreateForm.js +3 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +5 -2
- package/dist/features/stores/components/StoreDigitalCodesListing.js +7 -1
- package/dist/features/stores/components/StoreFilters.js +1 -1
- package/dist/features/stores/components/StoreFinanceGuideView.js +6 -1
- package/dist/features/stores/components/StoreGuideHubView.js +7 -2
- package/dist/features/stores/components/StoreHeader.js +6 -1
- package/dist/features/stores/components/StoreListingsGuideView.js +6 -1
- package/dist/features/stores/components/StoreLiveItemsListing.js +7 -1
- package/dist/features/stores/components/StoreNavTabs.js +3 -1
- package/dist/features/stores/components/StoreOrdersGuideView.js +7 -1
- package/dist/features/stores/components/StorePreOrdersListing.js +7 -1
- package/dist/features/stores/components/StoreProductsListing.js +8 -1
- package/dist/features/stores/components/StoreProductsView.js +5 -1
- package/dist/features/stores/components/StoreReviewsView.d.ts +1 -1
- package/dist/features/stores/components/StoreReviewsView.js +1 -1
- package/dist/features/stores/components/StoreSettingsGuideView.js +6 -1
- package/dist/features/stores/components/StoresIndexListing.js +9 -2
- package/dist/features/stores/components/StoresIndexPageView.d.ts +2 -3
- package/dist/features/stores/components/StoresIndexPageView.js +10 -11
- package/dist/features/stores/hooks/useStoreAddressSelector.d.ts +1 -1
- package/dist/features/stores/schemas/firestore.d.ts +27 -0
- package/dist/features/stores/schemas/firestore.js +2 -0
- package/dist/features/stores/schemas/index.d.ts +28 -28
- package/dist/features/support/schemas/index.d.ts +14 -14
- package/dist/features/support/schemas/ticket-create-form.d.ts +4 -4
- package/dist/features/tax-codes/schemas/tax-code-form.d.ts +4 -4
- package/dist/features/tax-codes/schemas/tax-codes.validators.d.ts +10 -10
- package/dist/features/tester/actions/checklist-item-actions.d.ts +3 -3
- package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +7 -1
- package/dist/features/tester/components/AdminTesterFeedbackListView.js +5 -1
- package/dist/features/tester/components/AdminTesterFeedbackReportView.js +2 -1
- package/dist/features/tester/components/AdminTesterFeedbackView.js +5 -1
- package/dist/features/tester/components/TesterChecklistStepRow.js +8 -1
- package/dist/features/tester/components/TesterFeedbackChart.js +3 -1
- package/dist/features/tester/schemas/checklist-item-form.d.ts +2 -2
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +8 -1
- package/dist/features/wishlist/components/WishlistCapWatcher.js +1 -1
- package/dist/features/wishlist/components/WishlistHeartButton.js +2 -1
- package/dist/features/wishlist/components/WishlistPage.js +5 -1
- package/dist/features/wishlist/components/WishlistView.js +3 -1
- package/dist/features/wishlist/hooks/useWishlistToggle.js +1 -1
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/features/wishlist/schemas/index.d.ts +2 -2
- package/dist/features/wishlist/utils/guest-wishlist.js +1 -5
- package/dist/index.d.ts +2496 -2452
- package/dist/index.js +1549 -1500
- package/dist/next/api/routeHandler.js +1 -1
- package/dist/providers/db-firebase/admin-app-lite.js +14 -2
- package/dist/providers/db-firebase/admin.js +8 -2
- package/dist/react/hooks/use-action-dispatch.d.ts +1 -1
- package/dist/react/hooks/use-action-dispatch.js +1 -1
- package/dist/react/hooks/useBrowsePageFlags.d.ts +26 -0
- package/dist/react/hooks/useBrowsePageFlags.js +18 -0
- package/dist/schemas/registry.d.ts +492 -487
- package/dist/schemas/sieve.d.ts +5 -5
- package/dist/schemas/webhooks/google-oauth.d.ts +4 -4
- package/dist/security/csp.d.ts +32 -2
- package/dist/security/csp.js +32 -2
- package/dist/server.d.ts +369 -362
- package/dist/server.js +355 -351
- package/dist/styles.css +1 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Button.js +1 -1
- package/dist/ui/components/Chart.js +0 -1
- package/dist/ui/components/HorizontalScroller.js +27 -2
- package/dist/ui/components/Repeater.js +4 -1
- package/dist/ui/rich-text/RichText.js +1 -3
- package/dist/ui/rich-text/RichTextRenderer.js +1 -3
- package/dist/utils/browser-storage.d.ts +14 -0
- package/dist/utils/browser-storage.js +18 -0
- package/dist/utils/classnames.d.ts +19 -0
- package/dist/utils/classnames.js +21 -0
- package/dist/utils/search-params.d.ts +44 -0
- package/dist/utils/search-params.js +46 -0
- package/dist/utils/sieve-builder.d.ts +13 -0
- package/dist/utils/sieve-builder.js +22 -0
- package/dist/utils/string.formatter.d.ts +12 -0
- package/dist/utils/string.formatter.js +17 -0
- package/dist/validation/schemas.d.ts +26 -26
- package/package.json +90 -2
|
@@ -15,13 +15,34 @@ export declare const getCouponByCode: (code: string) => Promise<import("../../..
|
|
|
15
15
|
* 🛑 EXPIRED AND INACTIVE COUPONS ARE DROPPED HERE, not in the renderer.
|
|
16
16
|
* A blog post from March that still advertises a code which now errors at
|
|
17
17
|
* checkout is worse than one that advertises nothing: the reader does the
|
|
18
|
-
* work of copying it and is refused at the till.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* work of copying it and is refused at the till.
|
|
19
|
+
*
|
|
20
|
+
* 🛑 BUT A NOT-YET-OPEN CODE IS KEPT — `isCouponDisplayable`, not
|
|
21
|
+
* `isCouponValid`. This used to be the checkout predicate, which also requires
|
|
22
|
+
* `startDate <= now`, and that single clause is why the Diwali event rendered
|
|
23
|
+
* ONE coupon where it carries five: all four attached codes open on Dhanteras.
|
|
24
|
+
* Publishing a code ahead of time is deliberate ("save it ahead of time," says
|
|
25
|
+
* the event's own copy); hiding it breaks the page's own promise.
|
|
21
26
|
*
|
|
22
27
|
* It does NOT check `perUserLimit` — that is per-reader and unknowable on a
|
|
23
28
|
* cached public page. A reader who has personally exhausted a still-valid
|
|
24
29
|
* coupon is refused at checkout with a message that can explain why; that is
|
|
25
30
|
* the correct place for it.
|
|
26
31
|
*/
|
|
32
|
+
/**
|
|
33
|
+
* Every live coupon, for the homepage `coupons` rail.
|
|
34
|
+
*
|
|
35
|
+
* 🛑 SAME DISPLAY PREDICATE AS `/promotions` AND THE EVENT PAGE, deliberately.
|
|
36
|
+
* These are the same claim made in three places; a code visible on one and
|
|
37
|
+
* absent from another reads as a broken link. One `isCouponDisplayable` call
|
|
38
|
+
* is what keeps them from drifting — this codebase has paid for hand-written
|
|
39
|
+
* copies of a money predicate before (Root Cause #75), and these three had in
|
|
40
|
+
* fact already drifted from `/api/coupons`, which never applied the
|
|
41
|
+
* start-date clause and so rendered codes the server surfaces swore did not
|
|
42
|
+
* exist.
|
|
43
|
+
*
|
|
44
|
+
* `limit` is applied LAST, after filtering, so an expired code can never
|
|
45
|
+
* occupy one of the rail's slots and silently push a live one off the end.
|
|
46
|
+
*/
|
|
47
|
+
export declare const getHomepageCoupons: (limit: number) => Promise<AttachedCoupon[]>;
|
|
27
48
|
export declare const getAttachedCoupons: (couponIds: readonly string[] | undefined) => Promise<AttachedCoupon[]>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cache } from "react";
|
|
2
|
-
import { couponsRepository } from "../../../../
|
|
3
|
-
import {
|
|
2
|
+
import { couponsRepository } from "../../../../features/promotions/repository/coupons.repository.js";
|
|
3
|
+
import { isCouponDisplayable } from "../../../../features/promotions/schemas/index.js";
|
|
4
4
|
import { toAttachedCoupon } from "./adapters.js";
|
|
5
5
|
import { safeRead } from "../../../../errors/safe-read.js";
|
|
6
6
|
export const getCouponByCode = cache(async (code) => {
|
|
@@ -21,15 +21,50 @@ export const getCouponByCode = cache(async (code) => {
|
|
|
21
21
|
* 🛑 EXPIRED AND INACTIVE COUPONS ARE DROPPED HERE, not in the renderer.
|
|
22
22
|
* A blog post from March that still advertises a code which now errors at
|
|
23
23
|
* checkout is worse than one that advertises nothing: the reader does the
|
|
24
|
-
* work of copying it and is refused at the till.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
24
|
+
* work of copying it and is refused at the till.
|
|
25
|
+
*
|
|
26
|
+
* 🛑 BUT A NOT-YET-OPEN CODE IS KEPT — `isCouponDisplayable`, not
|
|
27
|
+
* `isCouponValid`. This used to be the checkout predicate, which also requires
|
|
28
|
+
* `startDate <= now`, and that single clause is why the Diwali event rendered
|
|
29
|
+
* ONE coupon where it carries five: all four attached codes open on Dhanteras.
|
|
30
|
+
* Publishing a code ahead of time is deliberate ("save it ahead of time," says
|
|
31
|
+
* the event's own copy); hiding it breaks the page's own promise.
|
|
27
32
|
*
|
|
28
33
|
* It does NOT check `perUserLimit` — that is per-reader and unknowable on a
|
|
29
34
|
* cached public page. A reader who has personally exhausted a still-valid
|
|
30
35
|
* coupon is refused at checkout with a message that can explain why; that is
|
|
31
36
|
* the correct place for it.
|
|
32
37
|
*/
|
|
38
|
+
/**
|
|
39
|
+
* Every live coupon, for the homepage `coupons` rail.
|
|
40
|
+
*
|
|
41
|
+
* 🛑 SAME DISPLAY PREDICATE AS `/promotions` AND THE EVENT PAGE, deliberately.
|
|
42
|
+
* These are the same claim made in three places; a code visible on one and
|
|
43
|
+
* absent from another reads as a broken link. One `isCouponDisplayable` call
|
|
44
|
+
* is what keeps them from drifting — this codebase has paid for hand-written
|
|
45
|
+
* copies of a money predicate before (Root Cause #75), and these three had in
|
|
46
|
+
* fact already drifted from `/api/coupons`, which never applied the
|
|
47
|
+
* start-date clause and so rendered codes the server surfaces swore did not
|
|
48
|
+
* exist.
|
|
49
|
+
*
|
|
50
|
+
* `limit` is applied LAST, after filtering, so an expired code can never
|
|
51
|
+
* occupy one of the rail's slots and silently push a live one off the end.
|
|
52
|
+
*/
|
|
53
|
+
export const getHomepageCoupons = cache(async (limit) => {
|
|
54
|
+
/*
|
|
55
|
+
* `safeRead`, for the reason given on `getAttachedCoupons` below: the
|
|
56
|
+
* homepage is prerendered and an unguarded throw during the prerender
|
|
57
|
+
* ATTEMPT is fatal to the production build. A failed read costs the page
|
|
58
|
+
* its coupon rail and records a DEGRADED_READ — it does not cost the
|
|
59
|
+
* homepage.
|
|
60
|
+
*/
|
|
61
|
+
const docs = await safeRead(() => couponsRepository.getActiveCoupons(), {
|
|
62
|
+
route: "/",
|
|
63
|
+
key: "promotions.getActiveCoupons",
|
|
64
|
+
fallback: [],
|
|
65
|
+
});
|
|
66
|
+
return docs.filter(isCouponDisplayable).map(toAttachedCoupon).slice(0, limit);
|
|
67
|
+
});
|
|
33
68
|
export const getAttachedCoupons = cache(async (couponIds) => {
|
|
34
69
|
if (!couponIds || couponIds.length === 0)
|
|
35
70
|
return [];
|
|
@@ -46,5 +81,5 @@ export const getAttachedCoupons = cache(async (couponIds) => {
|
|
|
46
81
|
key: "promotions.findByIds",
|
|
47
82
|
fallback: [],
|
|
48
83
|
});
|
|
49
|
-
return docs.filter(
|
|
84
|
+
return docs.filter(isCouponDisplayable).map(toAttachedCoupon);
|
|
50
85
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { getCouponByCode, getAttachedCoupons } from "./data";
|
|
1
|
+
export { getCouponByCode, getAttachedCoupons, getHomepageCoupons } from "./data";
|
|
2
2
|
export { toAttachedCoupon } from "./adapters";
|
|
3
3
|
export { validateCoupon, computeDiscount } from "./service";
|
|
4
4
|
export { applyCouponAction, createCouponAction, updateCouponAction, deactivateCouponAction } from "./actions";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { getCouponByCode, getAttachedCoupons } from "./data.js";
|
|
1
|
+
export { getCouponByCode, getAttachedCoupons, getHomepageCoupons } from "./data.js";
|
|
2
2
|
export { toAttachedCoupon } from "./adapters.js";
|
|
3
3
|
export { validateCoupon, computeDiscount } from "./service.js";
|
|
4
4
|
export { applyCouponAction, createCouponAction, updateCouponAction, deactivateCouponAction } from "./actions.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { couponsRepository } from "../../../../
|
|
1
|
+
import { couponsRepository } from "../../../../features/promotions/repository/coupons.repository.js";
|
|
2
2
|
import { roundRupees } from "../../../../utils/number.formatter.js";
|
|
3
3
|
import { CouponNotFoundError, CouponExpiredError, CouponUsageLimitError, CouponPerUserLimitError, CouponMinPurchaseError, CouponScopeError, } from "../../../shared/features/promotions/errors.js";
|
|
4
4
|
export async function validateCoupon(input, userId) {
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
* @tag sideEffects:none
|
|
40
40
|
*/
|
|
41
41
|
import { pluginFor } from "../../../../shared/listing-types/_registry.js";
|
|
42
|
+
import { ROUTES } from "../../../../../next/routing/route-map.js";
|
|
42
43
|
// Defined here, not in `_registry` — imported from the DEFINING module
|
|
43
44
|
// (Root Cause #18).
|
|
44
45
|
import { ALL_LISTING_TYPES } from "../../../../shared/listing-types/feature-flags.js";
|
|
@@ -82,23 +83,37 @@ export const INDEX_TYPES = [
|
|
|
82
83
|
weight: t === "standard" ? 1.0 : 0.98,
|
|
83
84
|
};
|
|
84
85
|
}),
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
86
|
+
/*
|
|
87
|
+
* 🛑 Built from ROUTES, exactly as the listing-type entries above are built
|
|
88
|
+
* from `pluginFor`. These ten were hand-written path literals until
|
|
89
|
+
* 2026-10-24 — sitting directly beside a block whose own comment says "One
|
|
90
|
+
* source of truth, no second mapping" and cites Root Cause #48 for the
|
|
91
|
+
* version of this bug that shipped. A renamed segment would have moved every
|
|
92
|
+
* real page and left the search index pointing at the old one, with each
|
|
93
|
+
* result rendering correctly and navigating to a 404.
|
|
94
|
+
*
|
|
95
|
+
* `{s}` is the placeholder the template engine substitutes, so the builder
|
|
96
|
+
* functions are handed it directly — the same trick `detailRoute("{s}")` uses
|
|
97
|
+
* above rather than re-deriving the shape.
|
|
98
|
+
*/
|
|
99
|
+
{ key: "category", hrefTemplate: ROUTES.PUBLIC.CATEGORY_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.CATEGORIES), weight: 0.95 },
|
|
100
|
+
{ key: "brand", hrefTemplate: ROUTES.PUBLIC.BRAND_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.BRANDS), weight: 0.9 },
|
|
101
|
+
{ key: "part", hrefTemplate: ROUTES.PUBLIC.PART_CLASSIFICATION("{s}"), moreHref: String(ROUTES.PUBLIC.PARTS), weight: 0.9 },
|
|
102
|
+
/* A model IS a category row, which is why it shares the category route. */
|
|
103
|
+
{ key: "model", hrefTemplate: ROUTES.PUBLIC.CATEGORY_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.CATEGORIES), weight: 0.85 },
|
|
104
|
+
{ key: "store", hrefTemplate: ROUTES.PUBLIC.STORE_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.STORES), weight: 0.8 },
|
|
105
|
+
{ key: "blog", hrefTemplate: ROUTES.BLOG.ARTICLE("{s}"), moreHref: String(ROUTES.BLOG.LIST), weight: 0.7 },
|
|
106
|
+
{ key: "event", hrefTemplate: ROUTES.PUBLIC.EVENT_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.EVENTS), weight: 0.7 },
|
|
107
|
+
{ key: "faq", hrefTemplate: ROUTES.PUBLIC.FAQ_CATEGORY("{s}"), moreHref: String(ROUTES.PUBLIC.FAQS), weight: 0.6 },
|
|
108
|
+
{ key: "review", hrefTemplate: ROUTES.PUBLIC.REVIEW_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.REVIEWS), weight: 0.5 },
|
|
109
|
+
{ key: "group", hrefTemplate: ROUTES.PUBLIC.GROUP_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.PRODUCTS), weight: 0.5 },
|
|
110
|
+
{ key: "scammer", hrefTemplate: ROUTES.PUBLIC.SCAM_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.SCAMS), weight: 0.5 },
|
|
96
111
|
/* `/promotions` has no per-coupon page, so `{s}` is absent on purpose and
|
|
97
112
|
* `hrefFor`'s replace is a no-op. Eleven rows all landing on one page would
|
|
98
113
|
* be noise in the federated GROUP (which is why `search-sources.ts` omits
|
|
99
114
|
* coupons), but in the index it is the difference between a code being
|
|
100
115
|
* findable and not. */
|
|
101
|
-
{ key: "coupon", hrefTemplate:
|
|
116
|
+
{ key: "coupon", hrefTemplate: String(ROUTES.PUBLIC.PROMOTIONS), moreHref: String(ROUTES.PUBLIC.PROMOTIONS), weight: 0.4 },
|
|
102
117
|
];
|
|
103
118
|
const facet = (pairs) => {
|
|
104
119
|
const parts = pairs
|
|
@@ -2,7 +2,7 @@ import { normalizeError } from "../../../../errors/normalize.js";
|
|
|
2
2
|
import { getAdminDb } from "../../../../providers/db-firebase/index.js";
|
|
3
3
|
import { ROUTES } from "../../../../next/routing/route-map.js";
|
|
4
4
|
import { PRODUCT_COLLECTION } from "../../../../features/products/schemas/firestore.js";
|
|
5
|
-
import { EVENTS_COLLECTION, EVENT_FIELDS } from "../../../../features/events/
|
|
5
|
+
import { EVENTS_COLLECTION, EVENT_FIELDS } from "../../../../features/events/schemas/firestore.js";
|
|
6
6
|
import { BLOG_POSTS_COLLECTION, BLOG_POST_FIELDS } from "../../../../features/blog/schemas/firestore.js";
|
|
7
7
|
import { CATEGORIES_COLLECTION, CATEGORY_FIELDS } from "../../../../features/categories/schemas/firestore.js";
|
|
8
8
|
// Imported from the DEFINING module, not the feature barrel (Root Cause #18).
|
|
@@ -14,6 +14,9 @@ import { PART_GLOSSARY_COLLECTION, ALL_PART_SLOTS } from "../../../../features/p
|
|
|
14
14
|
import { serverLogger } from "../../../../monitoring/server-logger.js";
|
|
15
15
|
import { PRODUCT_FIELDS } from "../../../../constants/field-names.js";
|
|
16
16
|
import { PRODUCT_DETAIL_LISTING_TYPES } from "./product-detail-types.js";
|
|
17
|
+
import { safeRead } from "../../../../errors/safe-read.js";
|
|
18
|
+
import { siteSettingsRepository } from "../../../../features/admin/repository/site-settings.repository.js";
|
|
19
|
+
import { ALL_BROWSE_PAGES, browsePageForPath, isBrowsePageEnabled, } from "../../../shared/listing-types/feature-flags.js";
|
|
17
20
|
// Product field strings — matches consumer field-names.ts
|
|
18
21
|
const PRODUCT_STATUS = "status";
|
|
19
22
|
const PRODUCT_STATUS_PUBLISHED = "published";
|
|
@@ -618,17 +621,43 @@ export async function buildSitemap({ baseUrl }) {
|
|
|
618
621
|
bey: beyUrls.length,
|
|
619
622
|
part: partUrls.length,
|
|
620
623
|
};
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
624
|
+
/*
|
|
625
|
+
* Drop every URL belonging to a CLOSED browse section.
|
|
626
|
+
*
|
|
627
|
+
* 🛑 A single filter over the assembled list, not a condition threaded
|
|
628
|
+
* through the eighteen fetchers above. Section URLs are emitted from several
|
|
629
|
+
* of them plus `staticPages`, so gating from the inside is five edits and
|
|
630
|
+
* five chances to miss the sixth — and `browsePageForPath` is the same rule
|
|
631
|
+
* the navbar and the footer use, so the sitemap cannot end up disagreeing
|
|
632
|
+
* with the chrome about which sections exist.
|
|
633
|
+
*
|
|
634
|
+
* Advertising a URL that answers 404 is worse than omitting it: it is Root
|
|
635
|
+
* Cause #81's host/sitemap disagreement in miniature, and it spends crawl
|
|
636
|
+
* budget on pages we have deliberately withdrawn.
|
|
637
|
+
*
|
|
638
|
+
* 🛑 Applied BEFORE the per-section digest below. The digest is what
|
|
639
|
+
* `scripts/deploy.mjs` asserts against, so counting pre-filter would log
|
|
640
|
+
* URLs the response does not carry.
|
|
641
|
+
*/
|
|
642
|
+
const settings = await safeRead(() => siteSettingsRepository.findById("global"), {
|
|
643
|
+
route: "sitemap.xml",
|
|
644
|
+
key: "sitemap.siteSettings",
|
|
645
|
+
// Fails OPEN: an unreadable settings document is not evidence that a
|
|
646
|
+
// section was closed, and silently dropping the catalogue from the sitemap
|
|
647
|
+
// on a transient Firestore error is the expensive direction of this guess.
|
|
648
|
+
fallback: null,
|
|
649
|
+
});
|
|
650
|
+
const closed = new Set(ALL_BROWSE_PAGES.filter((p) => !isBrowsePageEnabled(p, settings)));
|
|
651
|
+
const keep = (entry) => {
|
|
652
|
+
if (closed.size === 0)
|
|
653
|
+
return true;
|
|
654
|
+
const path = entry.url.startsWith("http")
|
|
655
|
+
? new URL(entry.url).pathname
|
|
656
|
+
: entry.url;
|
|
657
|
+
const page = browsePageForPath(path);
|
|
658
|
+
return page === null || !closed.has(page);
|
|
659
|
+
};
|
|
660
|
+
const all = [
|
|
632
661
|
...staticUrls,
|
|
633
662
|
...categoryUrls,
|
|
634
663
|
...brandUrls,
|
|
@@ -648,5 +677,42 @@ export async function buildSitemap({ baseUrl }) {
|
|
|
648
677
|
...scammerUrls,
|
|
649
678
|
...beyUrls,
|
|
650
679
|
...partUrls,
|
|
651
|
-
];
|
|
680
|
+
].filter(keep);
|
|
681
|
+
/*
|
|
682
|
+
* Recount AFTER the filter, and exclude a deliberately-closed section from
|
|
683
|
+
* the "produced 0 URLs" alarm.
|
|
684
|
+
*
|
|
685
|
+
* 🛑 Without this the feature would make its own monitoring cry wolf: the
|
|
686
|
+
* warning exists because `category: 0` once survived unnoticed for months,
|
|
687
|
+
* and a warning that fires every build for a reason everyone knows about is
|
|
688
|
+
* how the next real zero gets ignored. "Closed on purpose" and "broken" must
|
|
689
|
+
* not look the same in the log.
|
|
690
|
+
*/
|
|
691
|
+
const sectionPage = {
|
|
692
|
+
category: "categories",
|
|
693
|
+
brand: "brands",
|
|
694
|
+
franchise: "franchise",
|
|
695
|
+
store: "stores",
|
|
696
|
+
};
|
|
697
|
+
for (const name of Object.keys(sections)) {
|
|
698
|
+
const page = sectionPage[name];
|
|
699
|
+
if (page && closed.has(page))
|
|
700
|
+
sections[name] = 0;
|
|
701
|
+
}
|
|
702
|
+
const empty = Object.entries(sections)
|
|
703
|
+
.filter(([name, n]) => n === 0 && !closed.has(sectionPage[name]))
|
|
704
|
+
.map(([name]) => name);
|
|
705
|
+
const total = all.length;
|
|
706
|
+
if (closed.size > 0) {
|
|
707
|
+
serverLogger.info("sitemap: browse section(s) closed, URLs withheld", {
|
|
708
|
+
closed: [...closed],
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
if (empty.length > 0) {
|
|
712
|
+
serverLogger.warn(`sitemap: ${empty.length} section(s) produced 0 URLs`, { empty, sections, total });
|
|
713
|
+
}
|
|
714
|
+
else {
|
|
715
|
+
serverLogger.info("sitemap: built", { sections, total });
|
|
716
|
+
}
|
|
717
|
+
return all;
|
|
652
718
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cache } from "react";
|
|
2
|
-
import { productRepository } from "../../../../
|
|
2
|
+
import { productRepository } from "../../../../features/products/repository/products.repository.js";
|
|
3
3
|
import { safeRead } from "../../../../errors/safe-read.js";
|
|
4
4
|
import { loadProductFeaturesForStore } from "../../../../features/products/repository/loadProductFeatures.js";
|
|
5
5
|
import { isPubliclyVisible } from "../../../shared/listing-types/availability.js";
|
|
@@ -28,7 +28,7 @@ import { EmailContainer, EmailDoc, EmailRow, } from "../../../../features/email/
|
|
|
28
28
|
import { paymentCasesRepository } from "../../../../features/payment-cases/repository/payment-cases.repository.js";
|
|
29
29
|
// `adminNotificationsRepository` lives behind the repositories barrel — the
|
|
30
30
|
// same import the two existing staff-signal call sites use.
|
|
31
|
-
import { adminNotificationsRepository } from "../../../../
|
|
31
|
+
import { adminNotificationsRepository } from "../../../../features/store-extensions/repository/rbac.repositories.js";
|
|
32
32
|
import { siteSettingsRepository } from "../../../../features/admin/repository/site-settings.repository.js";
|
|
33
33
|
import { normalizeError } from "../../../../errors/normalize.js";
|
|
34
34
|
import { serverLogger } from "../../../../monitoring/server-logger.js";
|
|
@@ -39,7 +39,7 @@ import type { PublicSiteSettings } from "../../../shared/features/site-settings/
|
|
|
39
39
|
*/
|
|
40
40
|
export declare const PUBLIC_SITE_SETTINGS_FIELDS: readonly ["contact", "payment", "listings", "notificationChannels", "announcementBar", "support", "navConfig", "actionConfig", "background", "watermark", "disabledRoutes", "chat", "search"];
|
|
41
41
|
/** Everything else, with the reason it stays server-side. */
|
|
42
|
-
export declare const PRIVATE_SITE_SETTINGS_FIELDS: readonly ["rateChanges", "id", "createdAt", "updatedAt", "credentials", "emailSettings", "legalPages", "commissions", "emi", "gst", "laborRate", "adSettings", "integrations", "platformLimits", "auctionConfig", "siteName", "tagline", "motto", "logo", "favicon", "seo", "socialLinks", "features", "shipping", "returns", "faq", "aboutContent", "navbarConfig", "footerConfig", "theme", "featuredResults", "messaging"];
|
|
42
|
+
export declare const PRIVATE_SITE_SETTINGS_FIELDS: readonly ["rateChanges", "id", "createdAt", "updatedAt", "credentials", "emailSettings", "legalPages", "commissions", "emi", "gst", "laborRate", "adSettings", "integrations", "platformLimits", "auctionConfig", "siteName", "tagline", "motto", "logo", "favicon", "seo", "socialLinks", "features", "shipping", "returns", "faq", "aboutContent", "navbarConfig", "footerConfig", "theme", "featuredResults", "messaging", "whatsappFeed"];
|
|
43
43
|
export interface ToPublicSiteSettingsOptions {
|
|
44
44
|
/**
|
|
45
45
|
* The resolved marker → wordmark → text watermark chain. Injected because
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
export const PUBLIC_SITE_SETTINGS_FIELDS = [
|
|
7
7
|
"contact", // user/orders/[id]/payment — contact.whatsappNumber (narrowed: no address/upiVpa)
|
|
8
8
|
"payment", // CheckoutRouteClient — payment.otpCheckoutThreshold (narrowed)
|
|
9
|
-
"listings", // useListingTypeFlags — narrowed to listings.listingTypes; categoryTypes has no client reader
|
|
9
|
+
"listings", // useListingTypeFlags + LayoutShellClient nav filter — narrowed to listings.{listingTypes,browsePages}; categoryTypes has no client reader
|
|
10
10
|
"notificationChannels", // NARROWED: only {email,whatsapp,sms}.enabled — see the projection below
|
|
11
11
|
"announcementBar", // the homepage banner (AdminSiteSettingsView edits it)
|
|
12
12
|
/*
|
|
@@ -118,6 +118,18 @@ export const PRIVATE_SITE_SETTINGS_FIELDS = [
|
|
|
118
118
|
// checkbox, which disables itself when email is off — is behind the admin
|
|
119
119
|
// API, which returns the full document.
|
|
120
120
|
"messaging",
|
|
121
|
+
/*
|
|
122
|
+
* The WhatsApp catalogue feed kill switch. Read ONLY by
|
|
123
|
+
* `/whatsapp/{storeSlug}/feed.csv`, which is a server route doing its own
|
|
124
|
+
* settings read — the same shape as `auctionConfig` above.
|
|
125
|
+
*
|
|
126
|
+
* 🛑 Deliberately NOT public, unlike its sibling `search`. That one is public
|
|
127
|
+
* because its reader is a GUEST's search box, so a server-only flag could not
|
|
128
|
+
* reach the visitor it governs. This flag's only reader is Meta's crawler
|
|
129
|
+
* fetching a CSV; no browser consults it, and publishing "catalogue feeds are
|
|
130
|
+
* currently off platform-wide" is operational detail with no client to serve.
|
|
131
|
+
*/
|
|
132
|
+
"whatsappFeed",
|
|
121
133
|
];
|
|
122
134
|
export function toPublicSiteSettings(doc, opts) {
|
|
123
135
|
return {
|
|
@@ -137,6 +149,9 @@ export function toPublicSiteSettings(doc, opts) {
|
|
|
137
149
|
},
|
|
138
150
|
listings: {
|
|
139
151
|
listingTypes: doc.listings?.listingTypes,
|
|
152
|
+
// Read by LayoutShellClient to drop nav/footer links into a closed
|
|
153
|
+
// section. `categoryTypes` is still withheld — it has no client reader.
|
|
154
|
+
browsePages: doc.listings?.browsePages,
|
|
140
155
|
},
|
|
141
156
|
/*
|
|
142
157
|
* 🛑 Narrowed to the three booleans a client reads, not the group by
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
import { ValidationError } from "../../../../errors/validation-error.js";
|
|
35
35
|
import { serverLogger } from "../../../../monitoring/server-logger.js";
|
|
36
36
|
import { normalizeError } from "../../../../errors/normalize.js";
|
|
37
|
-
import { productRepository } from "../../../../
|
|
37
|
+
import { productRepository } from "../../../../features/products/repository/products.repository.js";
|
|
38
38
|
import { mediaAssetsRepository } from "../../../../features/media/repository/media-assets.repository.js";
|
|
39
39
|
import { stickerSheetsRepository } from "../../../../features/sticker-trace/repository/sticker-sheets.repository.js";
|
|
40
40
|
/** A part that becomes its own listing: unique, and actually rendered. */
|
|
@@ -27,7 +27,7 @@ import type { StoreDetail, StoreListItem } from "../../../../features/stores/typ
|
|
|
27
27
|
*/
|
|
28
28
|
export declare const PUBLIC_STORE_FIELDS: readonly ["id", "storeSlug", "ownerId", "storeName", "storeDescription", "storeCategory", "storeLogoURL", "storeBannerURL", "status", "isPublic", "stats", "bio", "location", "website", "socialLinks", "returnPolicy", "shippingPolicy", "isVacationMode", "vacationMessage", "supportsShippingProtection", "supportsSaleProtection", "allowSharedPurchase", "sharedPurchaseHandlingFee", "sharedPurchaseExtraShippingPerDestination", "isVerified", "sellerTier", "standing", "createdAt"];
|
|
29
29
|
/** Everything else, with the reason it stays server-side. */
|
|
30
|
-
export declare const PRIVATE_STORE_FIELDS: readonly ["whatsappNotifySubscribed", "trustedSeller", "acceptsPoints", "searchTxt", "whatsappNotifySubscribed", "updatedAt", "whatsappConfig", "adminNotes", "statusHistory", "statusHistoryTruncated", "tierLockedByAdmin", "suspensionReason", "capabilities", "customCommissionRate", "googleReviews", "shippingConfig", "emiEnabled", "pricesIncludeGst", "shippingPricing", "returnsDirectToSeller", "isFeatured", "vacationReturnDate", "isTestData", "testDataExpiresAt", "gstin", "legalName", "registeredAddress"];
|
|
30
|
+
export declare const PRIVATE_STORE_FIELDS: readonly ["whatsappNotifySubscribed", "whatsappFeedEnabled", "trustedSeller", "acceptsPoints", "searchTxt", "whatsappNotifySubscribed", "updatedAt", "whatsappConfig", "adminNotes", "statusHistory", "statusHistoryTruncated", "tierLockedByAdmin", "suspensionReason", "capabilities", "customCommissionRate", "googleReviews", "shippingConfig", "emiEnabled", "pricesIncludeGst", "shippingPricing", "returnsDirectToSeller", "isFeatured", "vacationReturnDate", "isTestData", "testDataExpiresAt", "gstin", "legalName", "registeredAddress"];
|
|
31
31
|
/**
|
|
32
32
|
* Accepted input: a `StoreDocument` (the common case) or a loosely-typed
|
|
33
33
|
* Firestore row. The legacy top-level counters below predate `stats` and are
|
|
@@ -104,6 +104,20 @@ export const PRIVATE_STORE_FIELDS = [
|
|
|
104
104
|
* someone can name the client that reads it.
|
|
105
105
|
*/
|
|
106
106
|
"whatsappNotifySubscribed",
|
|
107
|
+
/*
|
|
108
|
+
* 🛑 `whatsappFeedEnabled` — a seller's own DISTRIBUTION PLUMBING.
|
|
109
|
+
*
|
|
110
|
+
* Whether this store currently publishes `/whatsapp/{slug}/feed.csv` with
|
|
111
|
+
* rows in it. Absent means enabled, so the field is only ever present when a
|
|
112
|
+
* seller (or an admin) has switched the feed off.
|
|
113
|
+
*
|
|
114
|
+
* No public reader, which is this file's bar on its own. Beyond that, a buyer
|
|
115
|
+
* learns nothing from it — it says nothing about the goods, the price or the
|
|
116
|
+
* dispatch record — while publishing it would advertise which stores are
|
|
117
|
+
* reachable on WhatsApp at all, which is the same disclosure
|
|
118
|
+
* `whatsappNotifySubscribed` directly above is private to avoid.
|
|
119
|
+
*/
|
|
120
|
+
"whatsappFeedEnabled",
|
|
107
121
|
/*
|
|
108
122
|
* 🛑 `trustedSeller` — OUR RISK POSTURE, not a badge.
|
|
109
123
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use server";
|
|
2
2
|
import { cache } from "react";
|
|
3
|
-
import { storeRepository } from "../../../../
|
|
3
|
+
import { storeRepository } from "../../../../features/stores/repository/store.repository.js";
|
|
4
4
|
import { STORES_PRODUCTS_PAGE_SIZE, STORES_SITEMAP_LIMIT, } from "../../../shared/features/stores/config.js";
|
|
5
5
|
import { makeGetStoreListingsInitial } from "../shared/listing-data-factory.js";
|
|
6
6
|
import { safeRead } from "../../../../errors/safe-read.js";
|
|
@@ -24,22 +24,26 @@ export declare function resolveStoreTabs(storeSlug: string, storeId: string | un
|
|
|
24
24
|
/**
|
|
25
25
|
* Where the bare `/stores/[slug]` route should land.
|
|
26
26
|
*
|
|
27
|
-
* Order:
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* Order: the first listing-type tab holding anything, else Coupons, else
|
|
28
|
+
* Reviews, else About. `about` is always present in `tabs`, so this never
|
|
29
|
+
* falls through to nothing.
|
|
30
30
|
*
|
|
31
|
-
* 🛑 About was promoted to
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
31
|
+
* 🛑 About was promoted to FIRST on 2026-10-21 and REVERTED on 2026-10-24.
|
|
32
|
+
* The argument for it was that a stocked storefront opening on a filtered
|
|
33
|
+
* product grid "reads as a search result". What it actually produced is worse
|
|
34
|
+
* and was reported as a bug: `store-letitrip-official` carries a
|
|
35
|
+
* `storeDescription`, so every visit to `/stores/store-letitrip-official`
|
|
36
|
+
* 307'd to `/about` — a page with no merchandise on it — and the shop read as
|
|
37
|
+
* having **no products at all**. Measured the day of the revert: the store
|
|
38
|
+
* holds 22 published listings, its `/products` tab renders 12 of them and its
|
|
39
|
+
* WhatsApp feed emits all 22, while the landing page showed none of it.
|
|
36
40
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* a
|
|
41
|
+
* A storefront's job is to show stock. An introduction is a tab, and the tab
|
|
42
|
+
* is right there in the nav bar.
|
|
43
|
+
*
|
|
44
|
+
* 🛑 Do NOT re-add a `hasAboutContent` parameter to re-litigate this. It was
|
|
45
|
+
* the mechanism of the regression, not a safeguard against it: having written
|
|
46
|
+
* a description is not evidence that a shopper wants to read one.
|
|
43
47
|
*/
|
|
44
|
-
export declare function getDefaultStoreTabPath(storeSlug: string, storeId: string | undefined, settings: SiteSettingsSnapshot
|
|
48
|
+
export declare function getDefaultStoreTabPath(storeSlug: string, storeId: string | undefined, settings: SiteSettingsSnapshot): Promise<string>;
|
|
45
49
|
export {};
|
|
@@ -27,7 +27,7 @@ import { ROUTES } from "../../../../next/routing/route-map.js";
|
|
|
27
27
|
import { STORE_PAGE_TABS } from "../../../../features/products/constants/listing-tabs.js";
|
|
28
28
|
import { isListingTypeEnabled, isCategoryTypeEnabled } from "../../../shared/listing-types/feature-flags.js";
|
|
29
29
|
import { pluginFor } from "../../../shared/listing-types/_registry.js";
|
|
30
|
-
import { listingTabCounts
|
|
30
|
+
import { listingTabCounts } from "../products/listing-tab-counts.js";
|
|
31
31
|
function tabLabel(base, count) {
|
|
32
32
|
if (!count)
|
|
33
33
|
return base;
|
|
@@ -116,29 +116,28 @@ export async function resolveStoreTabs(storeSlug, storeId, settings) {
|
|
|
116
116
|
/**
|
|
117
117
|
* Where the bare `/stores/[slug]` route should land.
|
|
118
118
|
*
|
|
119
|
-
* Order:
|
|
120
|
-
*
|
|
121
|
-
*
|
|
119
|
+
* Order: the first listing-type tab holding anything, else Coupons, else
|
|
120
|
+
* Reviews, else About. `about` is always present in `tabs`, so this never
|
|
121
|
+
* falls through to nothing.
|
|
122
122
|
*
|
|
123
|
-
* 🛑 About was promoted to
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
123
|
+
* 🛑 About was promoted to FIRST on 2026-10-21 and REVERTED on 2026-10-24.
|
|
124
|
+
* The argument for it was that a stocked storefront opening on a filtered
|
|
125
|
+
* product grid "reads as a search result". What it actually produced is worse
|
|
126
|
+
* and was reported as a bug: `store-letitrip-official` carries a
|
|
127
|
+
* `storeDescription`, so every visit to `/stores/store-letitrip-official`
|
|
128
|
+
* 307'd to `/about` — a page with no merchandise on it — and the shop read as
|
|
129
|
+
* having **no products at all**. Measured the day of the revert: the store
|
|
130
|
+
* holds 22 published listings, its `/products` tab renders 12 of them and its
|
|
131
|
+
* WhatsApp feed emits all 22, while the landing page showed none of it.
|
|
128
132
|
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* a
|
|
133
|
+
* A storefront's job is to show stock. An introduction is a tab, and the tab
|
|
134
|
+
* is right there in the nav bar.
|
|
135
|
+
*
|
|
136
|
+
* 🛑 Do NOT re-add a `hasAboutContent` parameter to re-litigate this. It was
|
|
137
|
+
* the mechanism of the regression, not a safeguard against it: having written
|
|
138
|
+
* a description is not evidence that a shopper wants to read one.
|
|
135
139
|
*/
|
|
136
|
-
export async function getDefaultStoreTabPath(storeSlug, storeId, settings
|
|
140
|
+
export async function getDefaultStoreTabPath(storeSlug, storeId, settings) {
|
|
137
141
|
const { dropdownTabs, tabs } = await resolveStoreTabs(storeSlug, storeId, settings);
|
|
138
|
-
if (hasAboutContent) {
|
|
139
|
-
const about = tabs.find((t) => t.value === "about");
|
|
140
|
-
if (about)
|
|
141
|
-
return about.href;
|
|
142
|
-
}
|
|
143
142
|
return (dropdownTabs[0] ?? tabs[0]).href;
|
|
144
143
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cache } from "react";
|
|
2
|
-
import { categoriesRepository } from "../../../../
|
|
2
|
+
import { categoriesRepository } from "../../../../features/categories/repository/categories.repository.js";
|
|
3
3
|
export const getSublistingCategoryForDetail = cache(async (slug) => {
|
|
4
4
|
return categoriesRepository.findBySlugAndType(slug, "sublisting");
|
|
5
5
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ActionResult } from "../../../shared/types/action-result";
|
|
2
|
-
import {
|
|
2
|
+
import type { UserWishlistItem as WishlistItem } from "../../../../features/wishlist/repository/user-wishlist.repository";
|
|
3
3
|
export declare function addToWishlistAction(productId: string, extras?: {
|
|
4
4
|
productType?: WishlistItem["productType"];
|
|
5
5
|
priceAtAdd?: number;
|
|
@@ -13,7 +13,7 @@ import { normalizeError } from "../../../../errors/normalize.js";
|
|
|
13
13
|
*/
|
|
14
14
|
import { wrapAction } from "../../../shared/types/action-result.js";
|
|
15
15
|
import { requireRoleUser } from "../../../../providers/auth-firebase/helpers.js";
|
|
16
|
-
import { wishlistRepository, WishlistFullError
|
|
16
|
+
import { wishlistRepository, WishlistFullError } from "../../../../features/wishlist/repository/user-wishlist.repository.js";
|
|
17
17
|
import { WISHLIST_MAX } from "../../../shared/features/wishlist/config.js";
|
|
18
18
|
import { WishlistCapError } from "../../../shared/features/wishlist/errors.js";
|
|
19
19
|
export async function addToWishlistAction(productId, extras) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { UserWishlistItem as WishlistItem } from "../../../../features/wishlist/repository/user-wishlist.repository";
|
|
2
2
|
export declare const getWishlistForUser: (userId: string) => Promise<{
|
|
3
3
|
items: WishlistItem[];
|
|
4
4
|
meta: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cache } from "react";
|
|
2
|
-
import { wishlistRepository } from "../../../../
|
|
2
|
+
import { wishlistRepository } from "../../../../features/wishlist/repository/user-wishlist.repository.js";
|
|
3
3
|
export const getWishlistForUser = cache(async (userId) => {
|
|
4
4
|
const items = await wishlistRepository.getWishlistItems(userId).catch(() => []);
|
|
5
5
|
return { items, meta: { total: items.length } };
|