@mohasinac/appkit 4.44.0 → 4.46.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 +8 -0
- package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +3 -3
- package/dist/_internal/client/features/digital-code/DigitalContentPoolManager.js +5 -5
- package/dist/_internal/client/features/filters/filter-load-options.js +3 -3
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +16 -16
- package/dist/_internal/client/features/layout/RoleGuard.js +4 -4
- package/dist/_internal/client/features/layout/SidebarCollapseToggle.js +1 -1
- package/dist/_internal/client/features/layout/index.js +3 -3
- package/dist/_internal/client/features/layout/useSidebarSearch.js +1 -1
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +8 -8
- package/dist/_internal/client/features/lottery/LotteryAdminSlotView.js +1 -1
- package/dist/_internal/client/features/lottery/LotteryDetailView.js +8 -8
- package/dist/_internal/client/features/lottery/LotteryEntriesView.js +3 -3
- package/dist/_internal/client/features/lottery/LotteryListView.js +3 -3
- package/dist/_internal/client/features/lottery/LotteryPullForm.js +9 -9
- package/dist/_internal/client/features/lottery/LotterySlotGrid.js +1 -1
- package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +7 -7
- package/dist/_internal/client/features/maintenance/index.js +5 -5
- package/dist/_internal/client/features/maintenance/views/AnalysisRunnerView.js +3 -3
- package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +3 -3
- package/dist/_internal/client/features/products/index.js +1 -1
- package/dist/_internal/client/hand-mode/HandModeProvider.js +1 -1
- package/dist/_internal/client/hand-mode/index.js +1 -1
- package/dist/_internal/client/scaffolds/AppShell.js +1 -1
- package/dist/_internal/client/scaffolds/index.js +1 -1
- package/dist/_internal/client/theme/ThemeProvider.js +2 -2
- package/dist/_internal/client/theme/buildRegistry.js +1 -1
- package/dist/_internal/client/theme/index.js +2 -2
- package/dist/_internal/server/features/account/actions.js +1 -1
- package/dist/_internal/server/features/account/data.js +1 -1
- package/dist/_internal/server/features/account/index.js +2 -2
- package/dist/_internal/server/features/admin/daily-digest-actions.js +3 -3
- package/dist/_internal/server/features/auctions/actions.js +6 -6
- package/dist/_internal/server/features/auctions/data.js +1 -1
- package/dist/_internal/server/features/auctions/index.js +5 -5
- package/dist/_internal/server/features/auctions/og.js +2 -2
- package/dist/_internal/server/features/auctions/service.js +4 -4
- package/dist/_internal/server/features/audit-log/actions.js +3 -3
- package/dist/_internal/server/features/auth/actions.js +1 -1
- package/dist/_internal/server/features/auth/capabilities.js +2 -2
- package/dist/_internal/server/features/auth/firebase-identity.js +1 -1
- package/dist/_internal/server/features/auth/index.js +3 -3
- package/dist/_internal/server/features/auth/permissions.js +4 -4
- package/dist/_internal/server/features/blog/actions.js +5 -5
- package/dist/_internal/server/features/blog/data.js +1 -1
- package/dist/_internal/server/features/blog/index.js +5 -5
- package/dist/_internal/server/features/blog/og.js +2 -2
- package/dist/_internal/server/features/blog/service.js +2 -2
- package/dist/_internal/server/features/brands/actions.js +5 -5
- package/dist/_internal/server/features/brands/data.js +1 -1
- package/dist/_internal/server/features/brands/index.js +5 -5
- package/dist/_internal/server/features/brands/og.js +1 -1
- package/dist/_internal/server/features/brands/service.js +2 -2
- package/dist/_internal/server/features/bundles/actions.js +8 -8
- package/dist/_internal/server/features/bundles/data.js +4 -4
- package/dist/_internal/server/features/bundles/index.js +4 -4
- package/dist/_internal/server/features/bundles/og.js +1 -1
- package/dist/_internal/server/features/cart/actions.js +5 -5
- package/dist/_internal/server/features/cart/data.js +1 -1
- package/dist/_internal/server/features/cart/index.js +4 -4
- package/dist/_internal/server/features/cart/service.js +5 -5
- package/dist/_internal/server/features/catalogue/og.js +2 -2
- package/dist/_internal/server/features/categories/data.js +4 -4
- package/dist/_internal/server/features/categories/index.js +2 -2
- package/dist/_internal/server/features/categories/live-counts.d.ts +41 -0
- package/dist/_internal/server/features/categories/live-counts.js +72 -0
- package/dist/_internal/server/features/categories/og.js +1 -1
- package/dist/_internal/server/features/checkout/actions.d.ts +50 -0
- package/dist/_internal/server/features/checkout/actions.js +186 -52
- package/dist/_internal/server/features/checkout/bundle-expansion.js +3 -3
- package/dist/_internal/server/features/checkout/expand-order-items.js +23 -2
- package/dist/_internal/server/features/checkout/index.js +3 -3
- package/dist/_internal/server/features/checkout/locked-lines.js +14 -14
- package/dist/_internal/server/features/checkout/prize-bundle-gates.js +2 -2
- package/dist/_internal/server/features/checkout/source-context.js +4 -4
- package/dist/_internal/server/features/checkout/stock-restore.js +4 -4
- package/dist/_internal/server/features/checkout/upi-resolution.js +2 -2
- package/dist/_internal/server/features/classified/adapters.js +1 -1
- package/dist/_internal/server/features/classified/data.js +1 -1
- package/dist/_internal/server/features/classified/index.js +4 -4
- package/dist/_internal/server/features/classified/og.js +2 -2
- package/dist/_internal/server/features/digital-code/adapters.js +1 -1
- package/dist/_internal/server/features/digital-code/data.js +1 -1
- package/dist/_internal/server/features/digital-code/download.js +5 -5
- package/dist/_internal/server/features/digital-code/index.js +4 -4
- package/dist/_internal/server/features/digital-code/og.js +2 -2
- package/dist/_internal/server/features/digital-code/pool.js +7 -7
- package/dist/_internal/server/features/digital-code/upload.js +6 -6
- package/dist/_internal/server/features/events/actions.js +8 -8
- package/dist/_internal/server/features/events/adapters.js +1 -1
- package/dist/_internal/server/features/events/data.js +1 -1
- package/dist/_internal/server/features/events/index.js +5 -5
- package/dist/_internal/server/features/events/og.js +2 -2
- package/dist/_internal/server/features/events/service.js +2 -2
- package/dist/_internal/server/features/faqs/index.js +1 -1
- package/dist/_internal/server/features/faqs/og.js +1 -1
- package/dist/_internal/server/features/grouped/data.js +8 -8
- package/dist/_internal/server/features/grouped/index.js +4 -4
- package/dist/_internal/server/features/grouped/og.js +2 -2
- package/dist/_internal/server/features/history/actions.js +2 -2
- package/dist/_internal/server/features/history/data.js +1 -1
- package/dist/_internal/server/features/history/index.js +3 -3
- package/dist/_internal/server/features/homepage/index.js +1 -1
- package/dist/_internal/server/features/item-requests/data.js +1 -1
- package/dist/_internal/server/features/item-requests/index.js +2 -2
- package/dist/_internal/server/features/item-requests/og.js +1 -1
- package/dist/_internal/server/features/live/adapters.js +1 -1
- package/dist/_internal/server/features/live/data.js +1 -1
- package/dist/_internal/server/features/live/index.js +4 -4
- package/dist/_internal/server/features/live/og.js +2 -2
- package/dist/_internal/server/features/lottery/actions.js +8 -8
- package/dist/_internal/server/features/lottery/data.js +3 -3
- package/dist/_internal/server/features/maintenance/analyze.js +3 -3
- package/dist/_internal/server/features/maintenance/cloud-logs-data.js +1 -1
- package/dist/_internal/server/features/maintenance/data.js +2 -2
- package/dist/_internal/server/features/media/contextGuards.js +3 -3
- package/dist/_internal/server/features/offers/adapters.js +1 -1
- package/dist/_internal/server/features/offers/index.js +1 -1
- package/dist/_internal/server/features/orders/actions.js +17 -17
- package/dist/_internal/server/features/orders/adapters.js +31 -0
- package/dist/_internal/server/features/orders/data.js +2 -2
- package/dist/_internal/server/features/orders/index.js +5 -5
- package/dist/_internal/server/features/orders/service.js +3 -3
- package/dist/_internal/server/features/parts/assembly.d.ts +126 -0
- package/dist/_internal/server/features/parts/assembly.js +246 -0
- package/dist/_internal/server/features/parts/data.d.ts +65 -0
- package/dist/_internal/server/features/parts/data.js +170 -0
- package/dist/_internal/server/features/parts/og.d.ts +34 -0
- package/dist/_internal/server/features/parts/og.js +66 -0
- package/dist/_internal/server/features/payouts/actions.js +3 -3
- package/dist/_internal/server/features/pre-orders/actions.js +5 -5
- package/dist/_internal/server/features/pre-orders/data.js +1 -1
- package/dist/_internal/server/features/pre-orders/index.js +5 -5
- package/dist/_internal/server/features/pre-orders/og.js +2 -2
- package/dist/_internal/server/features/pre-orders/service.js +4 -4
- package/dist/_internal/server/features/price-index/search.d.ts +119 -0
- package/dist/_internal/server/features/price-index/search.js +188 -0
- package/dist/_internal/server/features/prize-draws/actions.js +3 -3
- package/dist/_internal/server/features/prize-draws/data.js +1 -1
- package/dist/_internal/server/features/prize-draws/index.js +4 -4
- package/dist/_internal/server/features/prize-draws/og.js +2 -2
- package/dist/_internal/server/features/prize-draws/service.js +1 -1
- package/dist/_internal/server/features/products/actions.js +8 -8
- package/dist/_internal/server/features/products/data.js +15 -15
- package/dist/_internal/server/features/products/group-members.js +1 -1
- package/dist/_internal/server/features/products/index.js +6 -6
- package/dist/_internal/server/features/products/list-public.js +11 -11
- package/dist/_internal/server/features/products/listing-tab-counts.js +3 -3
- package/dist/_internal/server/features/products/og.js +2 -2
- package/dist/_internal/server/features/products/service.js +4 -4
- package/dist/_internal/server/features/profile/index.js +1 -1
- package/dist/_internal/server/features/promotions/actions.js +6 -6
- package/dist/_internal/server/features/promotions/data.js +1 -1
- package/dist/_internal/server/features/promotions/index.js +4 -4
- package/dist/_internal/server/features/promotions/service.js +3 -3
- package/dist/_internal/server/features/raffle/actions.js +3 -3
- package/dist/_internal/server/features/refunds/actions.js +12 -12
- package/dist/_internal/server/features/reviews/actions.js +6 -6
- package/dist/_internal/server/features/reviews/data.js +3 -3
- package/dist/_internal/server/features/reviews/index.js +5 -5
- package/dist/_internal/server/features/reviews/og-data.js +1 -1
- package/dist/_internal/server/features/reviews/og.js +1 -1
- package/dist/_internal/server/features/reviews/service.js +2 -2
- package/dist/_internal/server/features/scams/data.js +1 -1
- package/dist/_internal/server/features/scams/index.js +2 -2
- package/dist/_internal/server/features/search/actions.js +1 -1
- package/dist/_internal/server/features/search/data.js +1 -1
- package/dist/_internal/server/features/search/index.js +2 -2
- package/dist/_internal/server/features/search/search-everything.d.ts +75 -0
- package/dist/_internal/server/features/search/search-everything.js +120 -0
- package/dist/_internal/server/features/search/search-sources.d.ts +17 -0
- package/dist/_internal/server/features/search/search-sources.js +138 -0
- package/dist/_internal/server/features/seo/index.js +4 -4
- package/dist/_internal/server/features/seo/manifest.js +2 -2
- package/dist/_internal/server/features/seo/og.js +2 -2
- package/dist/_internal/server/features/seo/sitemap.js +13 -13
- package/dist/_internal/server/features/shared/listing-data-factory.js +4 -4
- package/dist/_internal/server/features/site-settings/actions.js +1 -1
- package/dist/_internal/server/features/site-settings/index.js +1 -1
- package/dist/_internal/server/features/site-settings/safe-settings.js +3 -3
- package/dist/_internal/server/features/stores/adapters.d.ts +2 -2
- package/dist/_internal/server/features/stores/adapters.js +44 -0
- package/dist/_internal/server/features/stores/data.js +5 -5
- package/dist/_internal/server/features/stores/denormalize.js +2 -2
- package/dist/_internal/server/features/stores/index.js +5 -5
- package/dist/_internal/server/features/stores/og.js +2 -2
- package/dist/_internal/server/features/sublisting-categories/data.js +1 -1
- package/dist/_internal/server/features/sublisting-categories/index.js +2 -2
- package/dist/_internal/server/features/sublisting-categories/og.js +2 -2
- package/dist/_internal/server/features/tester/visibility.js +1 -1
- package/dist/_internal/server/features/wishlist/actions.js +5 -5
- package/dist/_internal/server/features/wishlist/data.js +1 -1
- package/dist/_internal/server/features/wishlist/index.js +4 -4
- package/dist/_internal/server/functions/bind-all.d.ts +25 -0
- package/dist/_internal/server/functions/bind-all.js +41 -6
- package/dist/_internal/server/functions/firestore.js +2 -2
- package/dist/_internal/server/functions/https.js +2 -2
- package/dist/_internal/server/functions/index.js +4 -4
- package/dist/_internal/server/functions/manifest.js +3 -3
- package/dist/_internal/server/functions/scheduled.js +2 -2
- package/dist/_internal/server/jobs/core/adminAnalytics.js +3 -3
- package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.js +6 -6
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +2 -2
- package/dist/_internal/server/jobs/core/auctionSettlement.js +7 -7
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +5 -5
- package/dist/_internal/server/jobs/core/bundleStockSync.js +1 -1
- package/dist/_internal/server/jobs/core/cartPrune.js +3 -3
- package/dist/_internal/server/jobs/core/catalogueImageStalenessReminder.js +4 -4
- package/dist/_internal/server/jobs/core/categoryTaxonomyBackfill.d.ts +70 -0
- package/dist/_internal/server/jobs/core/categoryTaxonomyBackfill.js +302 -0
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +5 -5
- package/dist/_internal/server/jobs/core/countersReconcile.js +135 -26
- package/dist/_internal/server/jobs/core/couponExpiry.js +1 -1
- package/dist/_internal/server/jobs/core/dailyDataCleanup.js +2 -2
- package/dist/_internal/server/jobs/core/dailyStatusDigest.js +14 -14
- package/dist/_internal/server/jobs/core/draftPrune.js +2 -2
- package/dist/_internal/server/jobs/core/emiInstallmentReminder.js +3 -3
- package/dist/_internal/server/jobs/core/hardBanCascade.js +7 -7
- package/dist/_internal/server/jobs/core/hardBanReinstatement.js +4 -4
- package/dist/_internal/server/jobs/core/index.js +37 -37
- package/dist/_internal/server/jobs/core/jobRunners.js +19 -7
- package/dist/_internal/server/jobs/core/listingProcessor.js +2 -2
- package/dist/_internal/server/jobs/core/mediaTmpCleanup.js +2 -2
- package/dist/_internal/server/jobs/core/newsletterExport.js +3 -3
- package/dist/_internal/server/jobs/core/notificationPrune.js +3 -3
- package/dist/_internal/server/jobs/core/offerExpiry.js +4 -4
- package/dist/_internal/server/jobs/core/onCategoryWrite.js +76 -6
- package/dist/_internal/server/jobs/core/onJobCreated.js +5 -5
- package/dist/_internal/server/jobs/core/onOrderCreate.js +6 -6
- package/dist/_internal/server/jobs/core/onOrderStatusChange.js +3 -3
- package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.js +2 -2
- package/dist/_internal/server/jobs/core/onProductStockChange.js +2 -2
- package/dist/_internal/server/jobs/core/onProductWrite.js +99 -49
- package/dist/_internal/server/jobs/core/onReviewWrite.js +4 -4
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +4 -4
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +3 -3
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +3 -3
- package/dist/_internal/server/jobs/core/onStoreWrite.js +1 -1
- package/dist/_internal/server/jobs/core/onSupportTicketCreate.js +2 -2
- package/dist/_internal/server/jobs/core/onSupportTicketUpdate.js +2 -2
- package/dist/_internal/server/jobs/core/onUserBanChange.js +1 -1
- package/dist/_internal/server/jobs/core/pageViewPrune.js +2 -2
- package/dist/_internal/server/jobs/core/pageViewRollup.js +2 -2
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +4 -4
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +7 -7
- package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +6 -6
- package/dist/_internal/server/jobs/core/positionsReconcile.js +1 -1
- package/dist/_internal/server/jobs/core/priceIndexRollup.js +74 -4
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +2 -2
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +3 -3
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +3 -3
- package/dist/_internal/server/jobs/core/productStatsSync.js +1 -1
- package/dist/_internal/server/jobs/core/productViewWindows.d.ts +2 -0
- package/dist/_internal/server/jobs/core/productViewWindows.js +173 -0
- package/dist/_internal/server/jobs/core/promotions.js +2 -2
- package/dist/_internal/server/jobs/core/resetOtpVerification.js +3 -3
- package/dist/_internal/server/jobs/core/revalidateNotify.js +1 -1
- package/dist/_internal/server/jobs/core/revenueRollup.js +2 -2
- package/dist/_internal/server/jobs/core/storeAnalytics.js +3 -3
- package/dist/_internal/server/jobs/core/storeNameBackfill.js +3 -3
- package/dist/_internal/server/jobs/core/testDataCleanup.d.ts +1 -1
- package/dist/_internal/server/jobs/core/testDataCleanup.js +29 -3
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +1 -1
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +5 -5
- package/dist/_internal/server/jobs/core/whatsappCatalogImport.js +3 -3
- package/dist/_internal/server/jobs/core/whatsappNotify.js +5 -5
- package/dist/_internal/server/jobs/core/wrapJobHandler.js +3 -3
- package/dist/_internal/server/jobs/handlers/_helpers.js +3 -3
- package/dist/_internal/server/jobs/handlers/adminAnalytics.js +1 -1
- package/dist/_internal/server/jobs/handlers/analyticsAlertEvaluate.js +1 -1
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +1 -1
- package/dist/_internal/server/jobs/handlers/auctionSettlement.js +1 -1
- package/dist/_internal/server/jobs/handlers/autoPayoutEligibility.js +1 -1
- package/dist/_internal/server/jobs/handlers/bundleStockSync.js +1 -1
- package/dist/_internal/server/jobs/handlers/cartPrune.js +1 -1
- package/dist/_internal/server/jobs/handlers/catalogueImageStalenessReminder.js +1 -1
- package/dist/_internal/server/jobs/handlers/cleanupRtdbEvents.js +1 -1
- package/dist/_internal/server/jobs/handlers/countersReconcile.js +1 -1
- package/dist/_internal/server/jobs/handlers/couponExpiry.js +1 -1
- package/dist/_internal/server/jobs/handlers/dailyDataCleanup.js +1 -1
- package/dist/_internal/server/jobs/handlers/dailyStatusDigest.js +1 -1
- package/dist/_internal/server/jobs/handlers/draftPrune.js +1 -1
- package/dist/_internal/server/jobs/handlers/emiInstallmentReminder.js +1 -1
- package/dist/_internal/server/jobs/handlers/hardBanReinstatement.js +1 -1
- package/dist/_internal/server/jobs/handlers/index.js +54 -54
- package/dist/_internal/server/jobs/handlers/listingProcessor.js +1 -1
- package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.js +1 -1
- package/dist/_internal/server/jobs/handlers/messages.js +1 -1
- package/dist/_internal/server/jobs/handlers/notificationPrune.js +1 -1
- package/dist/_internal/server/jobs/handlers/offerExpiry.js +1 -1
- package/dist/_internal/server/jobs/handlers/onCatalogueSubmittedForApproval.js +1 -1
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +1 -1
- package/dist/_internal/server/jobs/handlers/onJobCreated.js +1 -1
- package/dist/_internal/server/jobs/handlers/onOrderCreate.js +1 -1
- package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +1 -1
- package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.js +1 -1
- package/dist/_internal/server/jobs/handlers/onProductStockChange.js +1 -1
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +1 -1
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +1 -1
- package/dist/_internal/server/jobs/handlers/onScamReportCreate.js +1 -1
- package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +2 -2
- package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +1 -1
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +1 -1
- package/dist/_internal/server/jobs/handlers/onSupportTicketCreate.js +1 -1
- package/dist/_internal/server/jobs/handlers/onSupportTicketUpdate.js +1 -1
- package/dist/_internal/server/jobs/handlers/onUserBanChange.js +1 -1
- package/dist/_internal/server/jobs/handlers/pageViewPrune.js +1 -1
- package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +20 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.js +26 -2
- package/dist/_internal/server/jobs/handlers/paymentReviewAutoApprove.js +1 -1
- package/dist/_internal/server/jobs/handlers/paymentWindowTimeout.js +1 -1
- package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.js +1 -1
- package/dist/_internal/server/jobs/handlers/positionsReconcile.js +1 -1
- package/dist/_internal/server/jobs/handlers/priceIndexRollup.js +1 -1
- package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.js +1 -1
- package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.js +1 -1
- package/dist/_internal/server/jobs/handlers/productStatsSync.js +1 -1
- package/dist/_internal/server/jobs/handlers/promotions.js +1 -1
- package/dist/_internal/server/jobs/handlers/revenueRollup.js +1 -1
- package/dist/_internal/server/jobs/handlers/storeAnalytics.js +1 -1
- package/dist/_internal/server/jobs/handlers/testDataCleanup.js +1 -1
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +1 -1
- package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +1 -1
- package/dist/_internal/server/jobs/index.js +4 -4
- package/dist/_internal/server/jobs/runtime/adapters/firebase.js +3 -3
- package/dist/_internal/server/notifications/channel-health.js +3 -3
- package/dist/_internal/server/notifications/send-guard.js +5 -5
- package/dist/_internal/server/notifications/send-recorder.js +5 -5
- package/dist/_internal/shared/actions/action-registry.js +45 -0
- package/dist/_internal/shared/checkout/lanes.js +1 -1
- package/dist/_internal/shared/checkout/order-math.js +2 -2
- package/dist/_internal/shared/checkout/rules/_defaults.js +1 -1
- package/dist/_internal/shared/checkout/rules/_limits.js +1 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +12 -12
- package/dist/_internal/shared/checkout/rules/art.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/auction.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/classified.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/digital-code.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/index.js +13 -13
- package/dist/_internal/shared/checkout/rules/live.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/offer.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/preorder.rule.js +2 -2
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +3 -3
- package/dist/_internal/shared/checkout/rules/standard.rule.js +1 -1
- package/dist/_internal/shared/checkout/rules/stickers.rule.js +1 -1
- package/dist/_internal/shared/features/auctions/errors.js +1 -1
- package/dist/_internal/shared/features/blog/errors.js +1 -1
- package/dist/_internal/shared/features/blog/schema.js +2 -2
- package/dist/_internal/shared/features/brands/errors.js +1 -1
- package/dist/_internal/shared/features/brands/schema.js +2 -2
- package/dist/_internal/shared/features/cart/config.js +1 -1
- package/dist/_internal/shared/features/cart/errors.js +1 -1
- package/dist/_internal/shared/features/categories/bundle-schemas.js +2 -2
- package/dist/_internal/shared/features/categories/price-guidance.js +1 -1
- package/dist/_internal/shared/features/checkout/config.d.ts +3 -0
- package/dist/_internal/shared/features/checkout/config.js +4 -1
- package/dist/_internal/shared/features/emi/schedule.js +1 -1
- package/dist/_internal/shared/features/events/errors.js +1 -1
- package/dist/_internal/shared/features/events/schema.js +2 -2
- package/dist/_internal/shared/features/layout/index.js +1 -1
- package/dist/_internal/shared/features/notifications/action-url.js +1 -1
- package/dist/_internal/shared/features/offers/config.js +1 -1
- package/dist/_internal/shared/features/orders/errors.js +1 -1
- package/dist/_internal/shared/features/orders/schema.js +3 -3
- package/dist/_internal/shared/features/pre-orders/errors.js +1 -1
- package/dist/_internal/shared/features/products/errors.js +1 -1
- package/dist/_internal/shared/features/products/schema.js +3 -3
- package/dist/_internal/shared/features/promotions/errors.js +1 -1
- package/dist/_internal/shared/features/promotions/schema.d.ts +6 -6
- package/dist/_internal/shared/features/promotions/schema.js +1 -1
- package/dist/_internal/shared/features/returns/custody.d.ts +99 -0
- package/dist/_internal/shared/features/returns/custody.js +172 -0
- package/dist/_internal/shared/features/returns/destination.d.ts +172 -0
- package/dist/_internal/shared/features/returns/destination.js +158 -0
- package/dist/_internal/shared/features/reviews/errors.js +1 -1
- package/dist/_internal/shared/features/reviews/schema.js +2 -2
- package/dist/_internal/shared/features/shipping/courier-rating.d.ts +145 -0
- package/dist/_internal/shared/features/shipping/courier-rating.js +114 -0
- package/dist/_internal/shared/features/shipping/mode.d.ts +112 -0
- package/dist/_internal/shared/features/shipping/mode.js +108 -0
- package/dist/_internal/shared/features/shipping/parcel.d.ts +115 -0
- package/dist/_internal/shared/features/shipping/parcel.js +120 -0
- package/dist/_internal/shared/features/shipping/protections.d.ts +313 -0
- package/dist/_internal/shared/features/shipping/protections.js +340 -0
- package/dist/_internal/shared/features/site-settings/fees.d.ts +3 -0
- package/dist/_internal/shared/features/site-settings/fees.js +3 -0
- package/dist/_internal/shared/features/wishlist/errors.js +1 -1
- package/dist/_internal/shared/fees/calculator.d.ts +24 -0
- package/dist/_internal/shared/fees/calculator.js +12 -1
- package/dist/_internal/shared/history/history.js +2 -2
- package/dist/_internal/shared/history/index.js +2 -2
- package/dist/_internal/shared/index.js +2 -2
- package/dist/_internal/shared/listing-types/_registry.js +12 -12
- package/dist/_internal/shared/listing-types/action-tracker.js +1 -1
- package/dist/_internal/shared/listing-types/art/config.js +4 -4
- package/dist/_internal/shared/listing-types/auction/config.js +6 -6
- package/dist/_internal/shared/listing-types/availability.js +1 -1
- package/dist/_internal/shared/listing-types/cart-shipping.js +1 -1
- package/dist/_internal/shared/listing-types/classified/config.js +5 -5
- package/dist/_internal/shared/listing-types/digital-code/config.js +6 -6
- package/dist/_internal/shared/listing-types/live/config.js +5 -5
- package/dist/_internal/shared/listing-types/pre-order/config.js +6 -6
- package/dist/_internal/shared/listing-types/prize-draw/config.js +5 -5
- package/dist/_internal/shared/listing-types/standard/config.js +4 -4
- package/dist/_internal/shared/listing-types/stickers/config.js +4 -4
- package/dist/_internal/shared/search/alias-variants.d.ts +58 -0
- package/dist/_internal/shared/search/alias-variants.js +141 -0
- package/dist/_internal/shared/search/part-aliases.d.ts +44 -0
- package/dist/_internal/shared/search/part-aliases.js +104 -0
- package/dist/_internal/shared/tokens/index.js +2 -2
- package/dist/_internal/shared/types/action-error-reporter.js +1 -1
- package/dist/_internal/shared/types/action-result.js +4 -4
- package/dist/_internal/shared/types/base-document.d.ts +19 -0
- package/dist/cli/index.js +1 -1
- package/dist/client/api/surface-error.js +7 -7
- package/dist/client/api/useApiMutation.js +2 -2
- package/dist/client/api/useApiQuery.js +4 -4
- package/dist/client/observability/installClientErrorReporter.js +1 -1
- package/dist/client/observability/reportClientError.js +2 -2
- package/dist/client-entry.js +5 -5
- package/dist/client.d.ts +4 -0
- package/dist/client.js +336 -332
- package/dist/constants/api-endpoints.d.ts +34 -12
- package/dist/constants/api-endpoints.js +23 -8
- package/dist/constants/cache-invalidation.js +1 -1
- package/dist/constants/field-names.d.ts +2 -2
- package/dist/constants/field-names.js +10 -2
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +10 -10
- package/dist/constants/notification-types.js +1 -1
- package/dist/contracts/index.js +12 -12
- package/dist/contracts/realtime-session.js +2 -2
- package/dist/core/EventBus.js +2 -2
- package/dist/core/Logger.js +2 -2
- package/dist/core/Queue.js +1 -1
- package/dist/core/StorageManager.js +2 -2
- package/dist/core/browser.js +9 -9
- package/dist/core/components/SyncManagerMount.js +2 -2
- package/dist/core/contact-submissions.repository.js +1 -1
- package/dist/core/hooks/useSiteSettings.js +2 -2
- package/dist/core/hooks/useSyncManager.js +3 -3
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.js +15 -17
- package/dist/core/integration-keys.js +2 -2
- package/dist/core/mutation-events.js +1 -1
- package/dist/core/newsletter-actions.js +2 -2
- package/dist/core/newsletter.repository.js +2 -2
- package/dist/core/server-action.js +5 -5
- package/dist/core/site-config.js +1 -1
- package/dist/core/unit-of-work.js +20 -20
- package/dist/errors/api-error.js +1 -1
- package/dist/errors/authentication-error.js +1 -1
- package/dist/errors/authorization-error.js +1 -1
- package/dist/errors/conflict-error.js +1 -1
- package/dist/errors/database-error.js +2 -2
- package/dist/errors/describe-cause.js +1 -1
- package/dist/errors/error-display-map.js +3 -3
- package/dist/errors/error-envelope.js +1 -1
- package/dist/errors/error-handler.js +3 -3
- package/dist/errors/error-mapping.js +7 -7
- package/dist/errors/index.js +18 -18
- package/dist/errors/messages.d.ts +0 -7
- package/dist/errors/messages.js +0 -8
- package/dist/errors/normalize.js +2 -2
- package/dist/errors/not-found-error.js +1 -1
- package/dist/errors/payment-provider-unreachable.js +1 -1
- package/dist/errors/safe-read.js +2 -2
- package/dist/errors/validation-error.js +1 -1
- package/dist/features/about/components/AboutView.js +2 -2
- package/dist/features/about/components/DeveloperView.js +6 -6
- package/dist/features/about/components/FAQPageView.js +5 -5
- package/dist/features/about/components/FeesView.js +4 -4
- package/dist/features/about/components/HelpPageView.js +5 -5
- package/dist/features/about/components/HowAuctionsWorkView.js +4 -4
- package/dist/features/about/components/HowCheckoutWorksView.js +4 -4
- package/dist/features/about/components/HowEmiWorksView.js +5 -5
- package/dist/features/about/components/HowOffersWorkView.js +4 -4
- package/dist/features/about/components/HowOrdersWorkView.js +4 -4
- package/dist/features/about/components/HowPayoutsWorkView.js +4 -4
- package/dist/features/about/components/HowPreOrdersWorkView.js +4 -4
- package/dist/features/about/components/HowReviewsWorkView.js +4 -4
- package/dist/features/about/components/PolicyPageView.js +7 -7
- package/dist/features/about/components/PublicProfileView.js +15 -15
- package/dist/features/about/components/SecurityPrivacyView.js +4 -4
- package/dist/features/about/components/ShippingPolicyView.js +4 -4
- package/dist/features/about/components/TrackOrderView.js +5 -5
- package/dist/features/about/components/UnauthorizedView.js +4 -4
- package/dist/features/about/index.js +19 -19
- package/dist/features/about/schemas/index.js +1 -1
- package/dist/features/account/actions/address-actions.js +2 -2
- package/dist/features/account/actions/index.js +1 -1
- package/dist/features/account/api/[userId]/addresses/route.js +2 -2
- package/dist/features/account/api/[userId]/route.js +2 -2
- package/dist/features/account/columns/index.js +1 -1
- package/dist/features/account/components/AddressBook.js +1 -1
- package/dist/features/account/components/AddressFilters.js +3 -3
- package/dist/features/account/components/AddressForm.js +9 -9
- package/dist/features/account/components/AddressInlineSelect.js +4 -4
- package/dist/features/account/components/AddressSelectorCreate.js +2 -2
- package/dist/features/account/components/AddressesIndexListing.js +6 -6
- package/dist/features/account/components/BecomeSellerView.js +1 -1
- package/dist/features/account/components/BuyerAccountGuideView.js +3 -3
- package/dist/features/account/components/BuyerAuctionsGuideView.js +2 -2
- package/dist/features/account/components/BuyerOrdersGuideView.js +2 -2
- package/dist/features/account/components/BuyerShoppingGuideView.js +2 -2
- package/dist/features/account/components/LinkedAccountsSection.js +1 -1
- package/dist/features/account/components/NotificationBell.js +6 -6
- package/dist/features/account/components/NotificationPreferencesPanel.js +4 -4
- package/dist/features/account/components/OrderDetailView.js +1 -1
- package/dist/features/account/components/ProfileView.js +1 -1
- package/dist/features/account/components/UserAccountHubView.js +1 -1
- package/dist/features/account/components/UserAddressesView.js +1 -1
- package/dist/features/account/components/UserBidsView.js +8 -8
- package/dist/features/account/components/UserNotificationsView.js +1 -1
- package/dist/features/account/components/UserOffersPanel.js +5 -5
- package/dist/features/account/components/UserOrderTrackView.js +1 -1
- package/dist/features/account/components/UserOrdersView.js +10 -10
- package/dist/features/account/components/UserReturnsView.js +7 -7
- package/dist/features/account/components/UserSettingsView.js +1 -1
- package/dist/features/account/components/UserSidebar.js +9 -9
- package/dist/features/account/components/UserSupportView.js +11 -11
- package/dist/features/account/components/index.js +20 -20
- package/dist/features/account/hooks/useAccount.js +2 -2
- package/dist/features/account/hooks/useAddressSelector.js +2 -2
- package/dist/features/account/hooks/useAddresses.js +2 -2
- package/dist/features/account/hooks/useCollapsedSections.js +2 -2
- package/dist/features/account/hooks/useDataViewMode.js +1 -1
- package/dist/features/account/hooks/useNotifications.js +2 -2
- package/dist/features/account/hooks/useProfile.js +3 -3
- package/dist/features/account/hooks/useProfileStats.js +2 -2
- package/dist/features/account/hooks/usePublicProfile.d.ts +1 -1
- package/dist/features/account/hooks/usePublicProfile.js +3 -3
- package/dist/features/account/index.js +13 -13
- package/dist/features/account/schemas/firestore.js +1 -1
- package/dist/features/account/schemas/index.js +2 -2
- package/dist/features/account/server.js +3 -3
- package/dist/features/addresses/components/AddressLocationFields.js +5 -5
- package/dist/features/addresses/hooks/usePostalLookup.js +2 -2
- package/dist/features/addresses/index.js +2 -2
- package/dist/features/addresses/repository/addresses.repository.js +6 -6
- package/dist/features/addresses/schemas/address-form.js +2 -2
- package/dist/features/addresses/schemas/index.js +3 -3
- package/dist/features/addresses/server.js +2 -2
- package/dist/features/admin/actions/admin-actions.d.ts +1 -1
- package/dist/features/admin/actions/admin-actions.js +17 -17
- package/dist/features/admin/actions/admin-coupon-actions.js +5 -5
- package/dist/features/admin/actions/admin-read-actions.d.ts +4 -4
- package/dist/features/admin/actions/admin-read-actions.js +12 -12
- package/dist/features/admin/actions/index.js +5 -5
- package/dist/features/admin/actions/notification-actions.js +13 -13
- package/dist/features/admin/actions/site-settings-actions.js +2 -2
- package/dist/features/admin/api/bids/route.js +2 -2
- package/dist/features/admin/api/coupons/route.js +2 -2
- package/dist/features/admin/api/products/route.js +2 -2
- package/dist/features/admin/api/reviews/route.js +2 -2
- package/dist/features/admin/components/AdminActionIndexView.js +4 -4
- package/dist/features/admin/components/AdminAdEditorView.js +9 -9
- package/dist/features/admin/components/AdminAddressBookView.js +4 -4
- package/dist/features/admin/components/AdminAddressClustersView.js +3 -3
- package/dist/features/admin/components/AdminAddressEditorView.js +13 -13
- package/dist/features/admin/components/AdminAddressesView.js +9 -9
- package/dist/features/admin/components/AdminAdsView.js +8 -8
- package/dist/features/admin/components/AdminAllEventEntriesView.js +7 -7
- package/dist/features/admin/components/AdminAnalyticsGuideView.js +2 -2
- package/dist/features/admin/components/AdminAnalyticsView.js +7 -7
- package/dist/features/admin/components/AdminArtView.js +4 -4
- package/dist/features/admin/components/AdminAuditLogView.js +6 -6
- package/dist/features/admin/components/AdminBidsView.js +12 -12
- package/dist/features/admin/components/AdminBlogEditorView.js +8 -8
- package/dist/features/admin/components/AdminBlogView.js +7 -7
- package/dist/features/admin/components/AdminBrandEditorView.js +11 -11
- package/dist/features/admin/components/AdminBrandsView.js +7 -7
- package/dist/features/admin/components/AdminBundleEditorView.js +13 -13
- package/dist/features/admin/components/AdminBundlesView.js +8 -8
- package/dist/features/admin/components/AdminCarouselEditorView.js +8 -8
- package/dist/features/admin/components/AdminCarouselGroupEditorView.js +6 -6
- package/dist/features/admin/components/AdminCarouselView.js +11 -11
- package/dist/features/admin/components/AdminCartsView.js +5 -5
- package/dist/features/admin/components/AdminCatalogGuideView.js +2 -2
- package/dist/features/admin/components/AdminCategoriesView.js +6 -6
- package/dist/features/admin/components/AdminCategoryEditorView.js +7 -7
- package/dist/features/admin/components/AdminClassifiedView.js +4 -4
- package/dist/features/admin/components/AdminContactEditorView.js +3 -3
- package/dist/features/admin/components/AdminContactView.js +10 -10
- package/dist/features/admin/components/AdminContentGuideView.js +2 -2
- package/dist/features/admin/components/AdminCouponEditorView.js +12 -12
- package/dist/features/admin/components/AdminCouponsView.js +10 -10
- package/dist/features/admin/components/AdminDashboardView.js +5 -5
- package/dist/features/admin/components/AdminDigitalCodesView.js +4 -4
- package/dist/features/admin/components/AdminEmployeeEditorView.js +10 -10
- package/dist/features/admin/components/AdminFaqEditorView.js +6 -6
- package/dist/features/admin/components/AdminFaqsView.js +6 -6
- package/dist/features/admin/components/AdminFeatureEditorView.js +9 -9
- package/dist/features/admin/components/AdminFeaturesView.js +8 -8
- package/dist/features/admin/components/AdminFulfillmentView.js +9 -9
- package/dist/features/admin/components/AdminGroupedListingsView.js +9 -9
- package/dist/features/admin/components/AdminGuideHubView.js +2 -2
- package/dist/features/admin/components/AdminHistoryView.js +6 -6
- package/dist/features/admin/components/AdminLiveView.js +4 -4
- package/dist/features/admin/components/AdminMediaView.js +5 -5
- package/dist/features/admin/components/AdminNavEditorView.js +7 -7
- package/dist/features/admin/components/AdminNavigationView.js +5 -5
- package/dist/features/admin/components/AdminNewsletterView.js +9 -9
- package/dist/features/admin/components/AdminNotificationsView.js +10 -10
- package/dist/features/admin/components/AdminOffersView.js +13 -13
- package/dist/features/admin/components/AdminOrderEditorView.js +15 -15
- package/dist/features/admin/components/AdminOrdersGuideView.js +2 -2
- package/dist/features/admin/components/AdminOrdersView.js +13 -13
- package/dist/features/admin/components/AdminPaymentClustersView.js +3 -3
- package/dist/features/admin/components/AdminPaymentMethodsView.js +8 -8
- package/dist/features/admin/components/AdminPaymentsGuideView.js +2 -2
- package/dist/features/admin/components/AdminPayoutMarkPaidModal.js +7 -7
- package/dist/features/admin/components/AdminPayoutsView.js +12 -12
- package/dist/features/admin/components/AdminPrizeDrawsView.js +9 -9
- package/dist/features/admin/components/AdminProductEditorView.js +13 -13
- package/dist/features/admin/components/AdminProductsView.js +15 -15
- package/dist/features/admin/components/AdminReturnRequestsView.js +7 -7
- package/dist/features/admin/components/AdminReviewsView.js +9 -9
- package/dist/features/admin/components/AdminScammerEditorView.js +6 -6
- package/dist/features/admin/components/AdminScammersView.js +10 -10
- package/dist/features/admin/components/AdminSectionsView.js +98 -47
- package/dist/features/admin/components/AdminSessionsManager.js +1 -1
- package/dist/features/admin/components/AdminSessionsView.js +6 -6
- package/dist/features/admin/components/AdminSidebar.js +8 -8
- package/dist/features/admin/components/AdminSiteConfigGuideView.js +2 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +23 -19
- package/dist/features/admin/components/AdminStickersView.js +4 -4
- package/dist/features/admin/components/AdminStoreAddressesView.js +4 -4
- package/dist/features/admin/components/AdminStoreEditorView.js +7 -7
- package/dist/features/admin/components/AdminStoresGuideView.js +2 -2
- package/dist/features/admin/components/AdminStoresView.js +11 -11
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +6 -6
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +7 -7
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +9 -9
- package/dist/features/admin/components/AdminSupportTicketsView.js +9 -9
- package/dist/features/admin/components/AdminTaxCodeEditorView.js +8 -8
- package/dist/features/admin/components/AdminTaxCodesView.js +5 -5
- package/dist/features/admin/components/AdminTeamGuideView.js +1 -1
- package/dist/features/admin/components/AdminTeamView.js +8 -8
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +10 -10
- package/dist/features/admin/components/AdminTesterChecklistView.js +9 -9
- package/dist/features/admin/components/AdminTopBar.js +1 -1
- package/dist/features/admin/components/AdminTrustGuideView.js +2 -2
- package/dist/features/admin/components/AdminUserEditorView.js +8 -8
- package/dist/features/admin/components/AdminUsersGuideView.js +2 -2
- package/dist/features/admin/components/AdminUsersView.js +15 -15
- package/dist/features/admin/components/AdminViewCards.js +3 -3
- package/dist/features/admin/components/AdminWhatsAppGuideView.js +2 -2
- package/dist/features/admin/components/AdminWishlistsView.js +6 -6
- package/dist/features/admin/components/BrandQuickCreateForm.js +8 -8
- package/dist/features/admin/components/CategoryQuickCreateForm.js +8 -8
- package/dist/features/admin/components/DashboardStats.js +4 -4
- package/dist/features/admin/components/DataListingView.js +7 -7
- package/dist/features/admin/components/DataTable.js +5 -5
- package/dist/features/admin/components/DemoSeedView.js +1 -1
- package/dist/features/admin/components/DrawerFormFooter.js +1 -1
- package/dist/features/admin/components/QuickEditMenu.js +4 -4
- package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -1
- package/dist/features/admin/components/ViewNotificationModal.js +2 -2
- package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +2 -2
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +4 -4
- package/dist/features/admin/components/analytics/AdminStatCard.js +2 -2
- package/dist/features/admin/components/analytics/AdminTopProductsTable.js +1 -1
- package/dist/features/admin/components/analytics/index.js +3 -3
- package/dist/features/admin/components/index.js +94 -94
- package/dist/features/admin/components/sections/adminSectionsBuildParse.js +1 -1
- package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +50 -1
- package/dist/features/admin/components/sections/adminSectionsTypes.js +30 -11
- package/dist/features/admin/components/sections/sectionTemplates.d.ts +117 -0
- package/dist/features/admin/components/sections/sectionTemplates.js +213 -0
- package/dist/features/admin/hooks/useAdmin.js +2 -2
- package/dist/features/admin/hooks/useAdminListing.js +5 -5
- package/dist/features/admin/hooks/useAdminListingData.js +2 -2
- package/dist/features/admin/hooks/useAdminSectionsListing.js +2 -2
- package/dist/features/admin/index.js +7 -7
- package/dist/features/admin/repository/analytics-rollup.repository.js +1 -1
- package/dist/features/admin/repository/notification.repository.js +5 -5
- package/dist/features/admin/repository/site-settings.repository.js +7 -7
- package/dist/features/admin/schemas/admin-editor-forms.js +3 -3
- package/dist/features/admin/schemas/admin-ops-forms.js +3 -3
- package/dist/features/admin/schemas/admin-user-form.d.ts +4 -4
- package/dist/features/admin/schemas/admin-user-form.js +1 -1
- package/dist/features/admin/schemas/firestore.d.ts +44 -0
- package/dist/features/admin/schemas/firestore.js +8 -2
- package/dist/features/admin/schemas/homepage-section-form.js +2 -2
- package/dist/features/admin/schemas/index.js +1 -1
- package/dist/features/admin/schemas/nav-item-form.js +1 -1
- package/dist/features/admin/schemas/small-forms.js +1 -1
- package/dist/features/admin/server.js +8 -8
- package/dist/features/admin/types/index.d.ts +0 -1
- package/dist/features/admin/types/index.js +1 -1
- package/dist/features/admin/utils/checkActionAllowed.js +4 -4
- package/dist/features/admin/utils/getDisabledRoutes.js +1 -1
- package/dist/features/admin/utils/getSiteSettingsGlobal.js +1 -1
- package/dist/features/analytics/components/PageViewTracker.js +3 -3
- package/dist/features/analytics/repository/page-views.repository.js +3 -3
- package/dist/features/auctions/actions/bid-actions.js +23 -23
- package/dist/features/auctions/actions/index.js +1 -1
- package/dist/features/auctions/api/route.js +2 -2
- package/dist/features/auctions/columns/index.js +1 -1
- package/dist/features/auctions/components/AuctionBidsTable.js +4 -4
- package/dist/features/auctions/components/AuctionBottomActions.js +9 -9
- package/dist/features/auctions/components/AuctionDetailPageView.js +35 -35
- package/dist/features/auctions/components/AuctionFilters.js +4 -4
- package/dist/features/auctions/components/AuctionLiveStatusBadge.js +2 -2
- package/dist/features/auctions/components/AuctionsListView.js +4 -4
- package/dist/features/auctions/components/CollapsibleBidHistory.js +4 -4
- package/dist/features/auctions/components/LiveBidPrice.js +3 -3
- package/dist/features/auctions/components/LiveMinIncrement.js +5 -5
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +13 -13
- package/dist/features/auctions/components/MarketplaceAuctionGrid.js +2 -2
- package/dist/features/auctions/components/PlaceBidFormClient.js +17 -17
- package/dist/features/auctions/components/index.js +5 -5
- package/dist/features/auctions/hooks/useAuctions.js +3 -3
- package/dist/features/auctions/hooks/useBids.js +2 -2
- package/dist/features/auctions/hooks/useLiveAuctionBid.js +1 -1
- package/dist/features/auctions/hooks/usePlaceBid.js +2 -2
- package/dist/features/auctions/hooks/useRealtimeBids.js +3 -3
- package/dist/features/auctions/index.js +8 -8
- package/dist/features/auctions/repository/bid.repository.js +7 -7
- package/dist/features/auctions/schemas/firestore.js +1 -1
- package/dist/features/auctions/schemas/index.js +2 -2
- package/dist/features/auctions/server.js +3 -3
- package/dist/features/audit-log/repository/audit-log.repository.js +2 -2
- package/dist/features/auth/actions/index.js +1 -1
- package/dist/features/auth/actions/profile-actions.js +8 -8
- package/dist/features/auth/actions/user-slug.js +4 -4
- package/dist/features/auth/api/route.js +2 -2
- package/dist/features/auth/auth-helpers.js +2 -2
- package/dist/features/auth/checkout-value-otp.js +3 -3
- package/dist/features/auth/components/AuthStatusPanel.js +2 -2
- package/dist/features/auth/components/ForgotPasswordView.js +7 -7
- package/dist/features/auth/components/Guards.js +2 -2
- package/dist/features/auth/components/LoginForm.js +8 -8
- package/dist/features/auth/components/OAuthLoadingView.js +1 -1
- package/dist/features/auth/components/RegisterForm.js +9 -9
- package/dist/features/auth/components/ResetPasswordView.js +6 -6
- package/dist/features/auth/components/SocialAuthButtons.js +1 -1
- package/dist/features/auth/components/VerifyEmailView.js +2 -2
- package/dist/features/auth/components/index.js +9 -9
- package/dist/features/auth/hooks/useAuth.js +7 -7
- package/dist/features/auth/hooks/useAuthEvent.js +2 -2
- package/dist/features/auth/hooks/useLogout.js +2 -2
- package/dist/features/auth/hooks/useRBAC.js +3 -3
- package/dist/features/auth/index.js +11 -11
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +0 -2
- package/dist/features/auth/repository/index.js +4 -4
- package/dist/features/auth/repository/session.repository.js +7 -7
- package/dist/features/auth/repository/sms-counter.repository.js +2 -2
- package/dist/features/auth/repository/token.repository.js +6 -6
- package/dist/features/auth/repository/user.repository.js +5 -5
- package/dist/features/auth/schemas/index.js +3 -3
- package/dist/features/auth/server/checkSoftBan.js +1 -1
- package/dist/features/auth/server.js +5 -5
- package/dist/features/auth/token-store.js +3 -3
- package/dist/features/before-after/api/[id]/route.js +2 -2
- package/dist/features/before-after/api/route.js +2 -2
- package/dist/features/before-after/columns/index.js +1 -1
- package/dist/features/before-after/components/BeforeAfterGallery.js +2 -2
- package/dist/features/before-after/components/BeforeAfterSlider.js +1 -1
- package/dist/features/before-after/components/index.js +2 -2
- package/dist/features/before-after/hooks/useBeforeAfter.js +2 -2
- package/dist/features/before-after/index.js +6 -6
- package/dist/features/blog/actions/blog-actions.js +6 -6
- package/dist/features/blog/actions/index.js +1 -1
- package/dist/features/blog/api/[slug]/route.js +3 -3
- package/dist/features/blog/api/route.js +3 -3
- package/dist/features/blog/columns/index.js +1 -1
- package/dist/features/blog/components/BlogFeaturedCard.js +6 -6
- package/dist/features/blog/components/BlogFilters.js +7 -7
- package/dist/features/blog/components/BlogIndexListing.js +9 -9
- package/dist/features/blog/components/BlogIndexPageView.js +6 -6
- package/dist/features/blog/components/BlogListView.js +6 -6
- package/dist/features/blog/components/BlogPostForm.js +6 -6
- package/dist/features/blog/components/BlogPostView.js +10 -10
- package/dist/features/blog/components/index.js +6 -6
- package/dist/features/blog/hooks/useBlog.js +2 -2
- package/dist/features/blog/index.js +6 -6
- package/dist/features/blog/repository/blog.repository.js +8 -8
- package/dist/features/blog/schemas/blog-form.js +2 -2
- package/dist/features/blog/schemas/firestore.js +1 -1
- package/dist/features/blog/schemas/index.js +4 -4
- package/dist/features/blog/server.js +4 -4
- package/dist/features/cart/actions/cart-actions.js +16 -16
- package/dist/features/cart/actions/index.js +1 -1
- package/dist/features/cart/api/[id]/route.js +2 -2
- package/dist/features/cart/api/route.js +2 -2
- package/dist/features/cart/columns/index.js +2 -2
- package/dist/features/cart/components/CartDrawer.js +6 -6
- package/dist/features/cart/components/CartGroupLineRow.js +5 -5
- package/dist/features/cart/components/CartPriceBreakdown.d.ts +6 -0
- package/dist/features/cart/components/CartPriceBreakdown.js +3 -3
- package/dist/features/cart/components/CartSummary.js +1 -1
- package/dist/features/cart/components/CartView.js +2 -2
- package/dist/features/cart/components/CheckoutAddressStep.js +1 -1
- package/dist/features/cart/components/CheckoutSuccessView.js +1 -1
- package/dist/features/cart/components/CheckoutView.js +2 -2
- package/dist/features/cart/components/ShippingPicker.js +3 -3
- package/dist/features/cart/components/StoreAddonsPicker.d.ts +35 -1
- package/dist/features/cart/components/StoreAddonsPicker.js +39 -11
- package/dist/features/cart/components/index.js +10 -10
- package/dist/features/cart/hooks/useAddToCart.js +8 -8
- package/dist/features/cart/hooks/useCart.js +3 -3
- package/dist/features/cart/hooks/useCartCount.js +4 -4
- package/dist/features/cart/hooks/useCartQuery.js +1 -1
- package/dist/features/cart/hooks/useCheckoutReadQueries.js +1 -1
- package/dist/features/cart/hooks/useGuestCart.js +1 -1
- package/dist/features/cart/hooks/useGuestCartMerge.js +4 -4
- package/dist/features/cart/hooks/useOrder.js +2 -2
- package/dist/features/cart/index.js +15 -15
- package/dist/features/cart/repository/cart.repository.js +7 -6
- package/dist/features/cart/schemas/firestore.d.ts +10 -0
- package/dist/features/cart/schemas/index.d.ts +2 -2
- package/dist/features/cart/schemas/index.js +2 -2
- package/dist/features/cart/server.js +2 -2
- package/dist/features/cart/utils/guest-cart.js +2 -2
- package/dist/features/cart/utils/line-total.js +1 -1
- package/dist/features/cart/utils/pending-ops.js +1 -1
- package/dist/features/catalogue/actions/approve-catalogue-listing.js +5 -5
- package/dist/features/catalogue/actions/list-from-catalogue.js +6 -6
- package/dist/features/catalogue/actions/submit-for-approval.js +4 -4
- package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +7 -7
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +12 -12
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +7 -7
- package/dist/features/catalogue/components/PublicCatalogueView.js +6 -6
- package/dist/features/catalogue/components/UserCatalogueView.js +5 -5
- package/dist/features/catalogue/index.js +10 -10
- package/dist/features/catalogue/repository/catalogue.repository.js +4 -4
- package/dist/features/catalogue/schemas/firestore.js +1 -1
- package/dist/features/catalogue/schemas/index.js +2 -2
- package/dist/features/catalogue/schemas/validation.js +1 -1
- package/dist/features/catalogue/utils/freshness.js +2 -2
- package/dist/features/catalogue/utils/product-from-item.js +1 -1
- package/dist/features/categories/actions/category-actions.js +3 -3
- package/dist/features/categories/actions/index.js +1 -1
- package/dist/features/categories/api/[id]/description-template/route.js +44 -5
- package/dist/features/categories/api/[id]/route.js +4 -4
- package/dist/features/categories/api/route.js +8 -8
- package/dist/features/categories/columns/index.js +1 -1
- package/dist/features/categories/components/BrandDetailPageView.js +71 -18
- package/dist/features/categories/components/BrandDetailTabs.js +9 -9
- package/dist/features/categories/components/BreadcrumbTrail.js +2 -2
- package/dist/features/categories/components/BundleBuyNowCta.js +7 -7
- package/dist/features/categories/components/BundleCollage.js +7 -7
- package/dist/features/categories/components/BundleDetailView.js +10 -10
- package/dist/features/categories/components/BundleDynamicRuleEditor.js +5 -5
- package/dist/features/categories/components/BundleItemsPicker.js +4 -4
- package/dist/features/categories/components/BundlesListView.js +6 -6
- package/dist/features/categories/components/CategoriesIndexListing.js +9 -9
- package/dist/features/categories/components/CategoriesIndexPageView.js +3 -3
- package/dist/features/categories/components/CategoryBundlesListing.js +6 -6
- package/dist/features/categories/components/CategoryDetailPageView.js +193 -18
- package/dist/features/categories/components/CategoryDetailTabs.js +10 -10
- package/dist/features/categories/components/CategoryFilters.js +4 -4
- package/dist/features/categories/components/CategoryForm.js +6 -6
- package/dist/features/categories/components/CategoryGrid.js +4 -4
- package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +2 -2
- package/dist/features/categories/components/CategoryProductsListing.js +17 -17
- package/dist/features/categories/components/CategoryProductsView.js +3 -3
- package/dist/features/categories/components/CategorySelectorCreate.js +7 -7
- package/dist/features/categories/components/CategorySortSelect.js +2 -2
- package/dist/features/categories/components/CategoryStoresListing.js +3 -3
- package/dist/features/categories/components/CategoryTableColumns.js +3 -3
- package/dist/features/categories/components/CategoryTemplatePicker.js +14 -6
- package/dist/features/categories/components/CategoryTree.js +1 -1
- package/dist/features/categories/components/ConcernCard.js +2 -2
- package/dist/features/categories/components/ConcernGrid.js +2 -2
- package/dist/features/categories/components/index.js +20 -20
- package/dist/features/categories/hooks/useCategories.js +3 -3
- package/dist/features/categories/hooks/useCategorySelector.js +2 -2
- package/dist/features/categories/hooks/useCategoryTree.js +3 -3
- package/dist/features/categories/index.js +7 -7
- package/dist/features/categories/repository/categories.repository.d.ts +65 -0
- package/dist/features/categories/repository/categories.repository.js +176 -30
- package/dist/features/categories/repository/category-counts.d.ts +143 -0
- package/dist/features/categories/repository/category-counts.js +224 -0
- package/dist/features/categories/repository/price-index.repository.d.ts +69 -0
- package/dist/features/categories/repository/price-index.repository.js +31 -1
- package/dist/features/categories/schemas/bundle-form.js +3 -3
- package/dist/features/categories/schemas/category-counts.d.ts +155 -0
- package/dist/features/categories/schemas/category-counts.js +116 -0
- package/dist/features/categories/schemas/firestore.d.ts +0 -2
- package/dist/features/categories/schemas/firestore.js +2 -3
- package/dist/features/categories/schemas/index.d.ts +60 -60
- package/dist/features/categories/schemas/index.js +2 -2
- package/dist/features/categories/server.js +5 -5
- package/dist/features/categories/utils/breadcrumb-chain.d.ts +194 -0
- package/dist/features/categories/utils/breadcrumb-chain.js +202 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +13 -13
- package/dist/features/checkout/actions/index.js +1 -1
- package/dist/features/checkout/components/CheckoutStepper.js +1 -1
- package/dist/features/checkout/components/index.js +1 -1
- package/dist/features/checkout/index.js +4 -4
- package/dist/features/checkout/repository/failed-checkout.repository.js +2 -2
- package/dist/features/checkout/schemas/index.js +1 -1
- package/dist/features/checkout/server.js +2 -2
- package/dist/features/classified/components/ClassifiedDetailPageView.js +22 -22
- package/dist/features/classified/components/ClassifiedFilters.js +4 -4
- package/dist/features/classified/components/index.js +1 -1
- package/dist/features/collections/api/[slug]/route.js +2 -2
- package/dist/features/collections/api/route.js +2 -2
- package/dist/features/collections/columns/index.js +1 -1
- package/dist/features/collections/components/CollectionCard.js +3 -3
- package/dist/features/collections/components/index.js +1 -1
- package/dist/features/collections/hooks/useCollections.js +2 -2
- package/dist/features/collections/index.js +6 -6
- package/dist/features/consultation/api/[id]/route.js +2 -2
- package/dist/features/consultation/api/route.js +2 -2
- package/dist/features/consultation/columns/index.js +1 -1
- package/dist/features/consultation/components/ConsultationForm.js +6 -6
- package/dist/features/consultation/components/index.js +1 -1
- package/dist/features/consultation/hooks/useBookConsultation.js +2 -2
- package/dist/features/consultation/index.js +6 -6
- package/dist/features/consultation/schemas/index.d.ts +2 -2
- package/dist/features/consultation/schemas/index.js +1 -1
- package/dist/features/consultation/server.js +1 -1
- package/dist/features/contact/components/ContactForm.js +4 -4
- package/dist/features/contact/components/ContactInfoSidebar.js +1 -1
- package/dist/features/contact/components/ContactPageView.js +6 -6
- package/dist/features/contact/components/index.js +3 -3
- package/dist/features/contact/email.js +9 -9
- package/dist/features/contact/index.js +2 -2
- package/dist/features/contact/schemas/inquiry-forms.js +1 -1
- package/dist/features/contact/server.js +1 -1
- package/dist/features/corporate/api/[id]/route.js +2 -2
- package/dist/features/corporate/api/route.js +2 -2
- package/dist/features/corporate/columns/index.js +1 -1
- package/dist/features/corporate/components/CorporateInquiryForm.js +7 -7
- package/dist/features/corporate/components/index.js +1 -1
- package/dist/features/corporate/hooks/useSubmitCorporateInquiry.js +2 -2
- package/dist/features/corporate/index.js +6 -6
- package/dist/features/corporate/schemas/index.d.ts +4 -4
- package/dist/features/corporate/schemas/index.js +1 -1
- package/dist/features/corporate/server.js +1 -1
- package/dist/features/cron/index.js +4 -4
- package/dist/features/cron/jobs/auction-expiry.job.js +3 -3
- package/dist/features/cron/jobs/preorder-reminder.job.js +3 -3
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +20 -20
- package/dist/features/digital-codes/components/DigitalCodeFilters.js +4 -4
- package/dist/features/digital-codes/components/index.js +1 -1
- package/dist/features/email/index.js +1 -1
- package/dist/features/email/notification-templates.js +1 -1
- package/dist/features/events/actions/event-actions.js +10 -10
- package/dist/features/events/actions/index.js +1 -1
- package/dist/features/events/api/[id]/route.js +4 -4
- package/dist/features/events/columns/index.js +1 -1
- package/dist/features/events/components/AdminEventEditorView.js +10 -10
- package/dist/features/events/components/AdminEventEntriesView.js +9 -9
- package/dist/features/events/components/AdminEventsView.js +8 -8
- package/dist/features/events/components/EventBanner.js +4 -4
- package/dist/features/events/components/EventCard.js +8 -8
- package/dist/features/events/components/EventDetailView.js +1 -1
- package/dist/features/events/components/EventFilters.js +8 -8
- package/dist/features/events/components/EventFormDrawer.js +1 -1
- package/dist/features/events/components/EventLeaderboard.js +1 -1
- package/dist/features/events/components/EventOfferCard.js +5 -5
- package/dist/features/events/components/EventParticipateView.js +2 -2
- package/dist/features/events/components/EventPollWidget.js +5 -5
- package/dist/features/events/components/EventRaffleEntryForm.js +7 -7
- package/dist/features/events/components/EventRaffleWinnerView.js +1 -1
- package/dist/features/events/components/EventRafflesSection.js +8 -8
- package/dist/features/events/components/EventSaleBanner.js +4 -4
- package/dist/features/events/components/EventStatusBadge.js +1 -1
- package/dist/features/events/components/EventsIndexListing.js +9 -9
- package/dist/features/events/components/EventsListPageView.js +9 -9
- package/dist/features/events/components/EventsListView.js +2 -2
- package/dist/features/events/components/RelatedEventsCarousel.js +6 -6
- package/dist/features/events/components/SpinWheelView.js +4 -4
- package/dist/features/events/components/index.js +21 -21
- package/dist/features/events/hooks/useBulkEvent.js +1 -1
- package/dist/features/events/hooks/useEvent.js +2 -2
- package/dist/features/events/hooks/useEvents.js +2 -2
- package/dist/features/events/index.js +8 -8
- package/dist/features/events/repository/event-entry.repository.js +6 -6
- package/dist/features/events/repository/events.repository.js +10 -10
- package/dist/features/events/schemas/event-form.js +1 -1
- package/dist/features/events/schemas/index.js +3 -3
- package/dist/features/events/server.js +4 -4
- package/dist/features/faq/actions/faq-actions.js +3 -3
- package/dist/features/faq/actions/index.js +1 -1
- package/dist/features/faq/columns/index.js +1 -1
- package/dist/features/faq/components/ContactCTA.js +1 -1
- package/dist/features/faq/components/FAQAccordion.js +1 -1
- package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
- package/dist/features/faq/components/FAQHelpfulButtons.js +2 -2
- package/dist/features/faq/components/FAQPageContent.js +7 -7
- package/dist/features/faq/components/FAQSearchableList.js +2 -2
- package/dist/features/faq/components/FAQSortDropdown.js +1 -1
- package/dist/features/faq/components/RelatedFAQs.js +1 -1
- package/dist/features/faq/components/index.js +7 -7
- package/dist/features/faq/hooks/useFaqList.js +2 -2
- package/dist/features/faq/hooks/useFaqVote.js +2 -2
- package/dist/features/faq/index.js +7 -7
- package/dist/features/faq/repository/faqs.repository.js +6 -6
- package/dist/features/faq/schemas/firestore.js +3 -2
- package/dist/features/faq/schemas/index.js +2 -2
- package/dist/features/faq/server.js +2 -2
- package/dist/features/faq/types/index.d.ts +9 -1
- package/dist/features/faq/utils/getHomepageFaqsCached.js +1 -1
- package/dist/features/filters/AsyncFacetSection.js +2 -2
- package/dist/features/filters/FilterFacetSection.js +2 -2
- package/dist/features/filters/FilterPanel.js +5 -5
- package/dist/features/filters/RangeFilter.js +2 -2
- package/dist/features/filters/SwitchFilter.js +2 -2
- package/dist/features/filters/index.js +8 -8
- package/dist/features/forms/Checkbox.js +3 -3
- package/dist/features/forms/Input.js +3 -3
- package/dist/features/forms/Radio.js +2 -2
- package/dist/features/forms/Select.js +3 -3
- package/dist/features/forms/Slider.js +3 -3
- package/dist/features/forms/Textarea.js +3 -3
- package/dist/features/forms/Toggle.js +2 -2
- package/dist/features/forms/index.js +8 -8
- package/dist/features/grouped/components/GroupedListingDetailView.js +3 -3
- package/dist/features/grouped/components/GroupedListingEditorView.js +12 -12
- package/dist/features/grouped/components/GroupedListingsCarousel.js +7 -7
- package/dist/features/grouped/repository/grouped-listings.repository.js +3 -3
- package/dist/features/grouped/schemas/grouped-listing-form.js +1 -1
- package/dist/features/grouped/schemas/index.d.ts +2 -2
- package/dist/features/grouped/schemas/index.js +2 -2
- package/dist/features/history/actions/history-actions.js +2 -2
- package/dist/features/history/actions/index.js +1 -1
- package/dist/features/history/components/HistoryTracker.js +2 -2
- package/dist/features/history/hooks/useHistory.js +4 -4
- package/dist/features/history/hooks/useHistoryMergeOnLogin.js +2 -2
- package/dist/features/history/index.js +4 -4
- package/dist/features/history/repository/user-history.repository.js +3 -3
- package/dist/features/history/server.js +2 -2
- package/dist/features/history/utils/guest-history.js +2 -2
- package/dist/features/homepage/actions/carousel-actions.js +3 -3
- package/dist/features/homepage/actions/homepage-section-actions.js +5 -5
- package/dist/features/homepage/actions/index.js +2 -2
- package/dist/features/homepage/api/[id]/route.js +3 -3
- package/dist/features/homepage/api/carousel/[id]/route.js +4 -4
- package/dist/features/homepage/api/carousel/route.js +4 -4
- package/dist/features/homepage/api/route.js +4 -4
- package/dist/features/homepage/api/sections/[id]/route.js +2 -2
- package/dist/features/homepage/api/sections/route.js +2 -2
- package/dist/features/homepage/components/AdSlot.js +5 -5
- package/dist/features/homepage/components/AdvertisementBanner.js +4 -4
- package/dist/features/homepage/components/AnnouncementBar.js +3 -3
- package/dist/features/homepage/components/BeforeAfterCard.js +3 -3
- package/dist/features/homepage/components/BlogArticlesSection.js +6 -6
- package/dist/features/homepage/components/BrandsSection.js +8 -8
- package/dist/features/homepage/components/CTABannerSection.js +5 -5
- package/dist/features/homepage/components/CharacterHotspot.js +7 -7
- package/dist/features/homepage/components/CharacterHotspotForm.js +7 -7
- package/dist/features/homepage/components/CollectionCardsSection.js +2 -2
- package/dist/features/homepage/components/CustomCardsSection.js +5 -5
- package/dist/features/homepage/components/CustomerReviewsSection.js +4 -4
- package/dist/features/homepage/components/EventsSection.js +4 -4
- package/dist/features/homepage/components/FAQSection.js +3 -3
- package/dist/features/homepage/components/FeaturedAuctionsSection.js +5 -5
- package/dist/features/homepage/components/FeaturedBundlesSection.js +9 -9
- package/dist/features/homepage/components/FeaturedPreOrdersSection.js +5 -5
- package/dist/features/homepage/components/FeaturedProductsSection.js +6 -6
- package/dist/features/homepage/components/FeaturedResultsSection.js +3 -3
- package/dist/features/homepage/components/FeaturedStoresSection.js +5 -5
- package/dist/features/homepage/components/GoogleReviewsSection.js +6 -6
- package/dist/features/homepage/components/HeroBanner.js +4 -4
- package/dist/features/homepage/components/HeroCarousel.js +7 -7
- package/dist/features/homepage/components/HeroSection.js +1 -1
- package/dist/features/homepage/components/HomepageCustomerReviewsSection.js +4 -4
- package/dist/features/homepage/components/HomepageSectionBoundary.js +1 -1
- package/dist/features/homepage/components/HomepageSkeleton.js +3 -3
- package/dist/features/homepage/components/HomepageView.js +1 -1
- package/dist/features/homepage/components/HowItWorksInfoView.js +3 -3
- package/dist/features/homepage/components/HowItWorksSection.js +2 -2
- package/dist/features/homepage/components/MarketplaceHomepageView.js +17 -17
- package/dist/features/homepage/components/NewsletterBanner.js +7 -7
- package/dist/features/homepage/components/NewsletterSection.js +1 -1
- package/dist/features/homepage/components/PromoGrid.js +4 -4
- package/dist/features/homepage/components/SectionCarousel.js +6 -6
- package/dist/features/homepage/components/SecurityHighlightsSection.js +2 -2
- package/dist/features/homepage/components/ShopByCategorySection.js +8 -8
- package/dist/features/homepage/components/SiteFeaturesSection.js +2 -2
- package/dist/features/homepage/components/SocialFeedSection.js +6 -6
- package/dist/features/homepage/components/SocialPostCard.js +2 -2
- package/dist/features/homepage/components/StatsCounterSection.js +1 -1
- package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
- package/dist/features/homepage/components/TrustBadges.js +1 -1
- package/dist/features/homepage/components/TrustFeaturesSection.js +1 -1
- package/dist/features/homepage/components/TrustIndicatorsSection.js +2 -2
- package/dist/features/homepage/components/WelcomeSection.js +2 -2
- package/dist/features/homepage/components/WhatsAppCommunitySection.js +3 -3
- package/dist/features/homepage/components/index.js +39 -39
- package/dist/features/homepage/constants/faq-category-labels.d.ts +0 -14
- package/dist/features/homepage/constants/faq-category-labels.js +22 -14
- package/dist/features/homepage/hooks/homepage-query.js +1 -1
- package/dist/features/homepage/hooks/useActiveAd.js +2 -2
- package/dist/features/homepage/hooks/useBlogArticles.js +2 -2
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +5 -5
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +5 -5
- package/dist/features/homepage/hooks/useFeaturedProducts.js +5 -5
- package/dist/features/homepage/hooks/useFeaturedStores.js +2 -2
- package/dist/features/homepage/hooks/useHeroCarousel.js +2 -2
- package/dist/features/homepage/hooks/useHomepage.js +2 -2
- package/dist/features/homepage/hooks/useHomepageEvents.js +2 -2
- package/dist/features/homepage/hooks/useHomepageReviews.d.ts +1 -1
- package/dist/features/homepage/hooks/useHomepageReviews.js +2 -2
- package/dist/features/homepage/hooks/useHomepageSections.js +2 -2
- package/dist/features/homepage/hooks/useNewsletter.js +2 -2
- package/dist/features/homepage/hooks/useTopBrands.js +2 -2
- package/dist/features/homepage/hooks/useTopCategories.js +2 -2
- package/dist/features/homepage/index.js +17 -17
- package/dist/features/homepage/lib/live-stats.js +5 -5
- package/dist/features/homepage/lib/section-helpers.js +1 -1
- package/dist/features/homepage/lib/section-renderer.js +32 -32
- package/dist/features/homepage/repository/carousel.repository.js +6 -6
- package/dist/features/homepage/repository/carousels.repository.js +6 -6
- package/dist/features/homepage/repository/homepage-sections.repository.js +5 -5
- package/dist/features/homepage/schemas/firestore.d.ts +26 -1
- package/dist/features/homepage/schemas/firestore.js +1 -1
- package/dist/features/homepage/schemas/index.js +2 -2
- package/dist/features/homepage/server.js +9 -9
- package/dist/features/jobs/actions/enqueue-job.js +6 -6
- package/dist/features/jobs/repository/jobs.repository.js +2 -2
- package/dist/features/layout/AppLayoutShell.js +18 -18
- package/dist/features/layout/AutoBreadcrumbs.js +3 -3
- package/dist/features/layout/BackToTop.js +4 -4
- package/dist/features/layout/BottomActions.js +3 -3
- package/dist/features/layout/BottomChrome.js +2 -2
- package/dist/features/layout/BottomNavItem.js +1 -1
- package/dist/features/layout/BottomNavLayout.js +2 -2
- package/dist/features/layout/BottomNavbar.js +6 -6
- package/dist/features/layout/BottomSheet.js +1 -1
- package/dist/features/layout/Breadcrumbs.js +2 -2
- package/dist/features/layout/FooterLayout.js +2 -2
- package/dist/features/layout/LocaleSwitcher.js +1 -1
- package/dist/features/layout/MainNavbar.d.ts +6 -0
- package/dist/features/layout/MainNavbar.js +3 -2
- package/dist/features/layout/NavItem.js +2 -2
- package/dist/features/layout/NavbarLayout.d.ts +19 -0
- package/dist/features/layout/NavbarLayout.js +24 -5
- package/dist/features/layout/NavbarWithSettings.js +3 -3
- package/dist/features/layout/PageTabs.js +2 -2
- package/dist/features/layout/SidebarLayout.js +2 -2
- package/dist/features/layout/TitleBar.js +6 -6
- package/dist/features/layout/TitleBarLayout.js +2 -2
- package/dist/features/layout/hooks/useBottomActions.js +1 -1
- package/dist/features/layout/hooks/useFormBottomActions.js +4 -4
- package/dist/features/layout/index.js +23 -23
- package/dist/features/live/components/LiveItemDetailPageView.js +20 -20
- package/dist/features/live/components/LiveItemFilters.js +4 -4
- package/dist/features/live/components/index.js +1 -1
- package/dist/features/lottery/repository/lottery-entry.repository.js +6 -6
- package/dist/features/lottery/schemas/config-write.js +1 -1
- package/dist/features/lottery/schemas/zod.d.ts +8 -8
- package/dist/features/loyalty/api/admin/loyalty/grant/route.js +2 -2
- package/dist/features/loyalty/api/balance/route.js +2 -2
- package/dist/features/loyalty/api/earn/route.js +2 -2
- package/dist/features/loyalty/api/history/route.js +2 -2
- package/dist/features/loyalty/api/redeem/route.js +2 -2
- package/dist/features/loyalty/columns/index.js +1 -1
- package/dist/features/loyalty/components/CoinsDisplay.js +1 -1
- package/dist/features/loyalty/components/index.js +1 -1
- package/dist/features/loyalty/hooks/useLoyaltyBalance.js +3 -3
- package/dist/features/loyalty/index.js +6 -6
- package/dist/features/loyalty/server.js +1 -1
- package/dist/features/loyalty/types/index.js +1 -1
- package/dist/features/media/AvatarUpload.js +6 -6
- package/dist/features/media/MediaAudio.js +2 -2
- package/dist/features/media/MediaAvatar.js +2 -2
- package/dist/features/media/MediaImage.js +4 -4
- package/dist/features/media/MediaLightbox.js +2 -2
- package/dist/features/media/MediaPickerModal.js +7 -7
- package/dist/features/media/MediaVideo.js +3 -3
- package/dist/features/media/finalize.js +3 -3
- package/dist/features/media/hooks/useMedia.js +3 -3
- package/dist/features/media/index.js +17 -17
- package/dist/features/media/modals/ImageCropModal.js +2 -2
- package/dist/features/media/modals/ImageEditor.d.ts +0 -1
- package/dist/features/media/modals/ImageEditor.js +18 -3
- package/dist/features/media/modals/VideoThumbnailSelector.js +3 -3
- package/dist/features/media/modals/VideoTrimModal.js +5 -5
- package/dist/features/media/repository/media-assets.repository.js +1 -1
- package/dist/features/media/server.js +1 -1
- package/dist/features/media/types/index.js +1 -1
- package/dist/features/media/upload/CameraCapture.js +2 -2
- package/dist/features/media/upload/ImageUpload.js +9 -9
- package/dist/features/media/upload/MediaUploadField.js +11 -11
- package/dist/features/media/upload/MediaUploadList.js +6 -6
- package/dist/features/media/upload/video-poster.js +1 -1
- package/dist/features/messaging/repository/message-budget.repository.js +2 -2
- package/dist/features/orders/actions/index.js +2 -2
- package/dist/features/orders/actions/order-actions.js +5 -5
- package/dist/features/orders/actions/refund-actions.js +6 -6
- package/dist/features/orders/api/track/[trackingId]/route.js +2 -2
- package/dist/features/orders/columns/index.js +1 -1
- package/dist/features/orders/components/MarketplaceOrderCard.js +4 -4
- package/dist/features/orders/components/OrderAddonBadges.d.ts +4 -2
- package/dist/features/orders/components/OrderAddonBadges.js +5 -4
- package/dist/features/orders/components/OrderFilters.js +6 -6
- package/dist/features/orders/components/OrderPaymentSummary.js +2 -2
- package/dist/features/orders/components/OrderScopeTabs.js +4 -4
- package/dist/features/orders/components/OrderSiblingPayments.js +5 -5
- package/dist/features/orders/components/OrderStatusTimeline.js +2 -2
- package/dist/features/orders/components/OrdersList.js +5 -5
- package/dist/features/orders/components/RefundHistoryTable.js +3 -3
- package/dist/features/orders/components/RefundRequestView.js +8 -8
- package/dist/features/orders/components/index.js +9 -9
- package/dist/features/orders/constants/order-scope.js +1 -1
- package/dist/features/orders/hooks/useOrders.js +2 -2
- package/dist/features/orders/index.js +9 -9
- package/dist/features/orders/repository/orders.repository.d.ts +8 -0
- package/dist/features/orders/repository/orders.repository.js +13 -11
- package/dist/features/orders/schemas/buyer-forms.js +1 -1
- package/dist/features/orders/schemas/firestore.d.ts +108 -1
- package/dist/features/orders/schemas/firestore.js +1 -1
- package/dist/features/orders/schemas/index.d.ts +6 -6
- package/dist/features/orders/schemas/index.js +2 -2
- package/dist/features/orders/server.js +3 -3
- package/dist/features/orders/types/index.d.ts +33 -0
- package/dist/features/orders/utils/order-splitter.js +2 -2
- package/dist/features/parts/components/AssemblyDrawer.d.ts +107 -0
- package/dist/features/parts/components/AssemblyDrawer.js +250 -0
- package/dist/features/parts/components/ModelCompositionPanel.d.ts +37 -0
- package/dist/features/parts/components/ModelCompositionPanel.js +34 -0
- package/dist/features/parts/components/PartDetailPageView.d.ts +48 -0
- package/dist/features/parts/components/PartDetailPageView.js +20 -0
- package/dist/features/parts/components/PartsIndexPageView.d.ts +33 -0
- package/dist/features/parts/components/PartsIndexPageView.js +17 -0
- package/dist/features/parts/schemas/firestore.d.ts +257 -0
- package/dist/features/parts/schemas/firestore.js +181 -0
- package/dist/features/parts/utils/colourway-match.d.ts +62 -0
- package/dist/features/parts/utils/colourway-match.js +98 -0
- package/dist/features/parts/utils/part-breakdown.d.ts +53 -0
- package/dist/features/parts/utils/part-breakdown.js +77 -0
- package/dist/features/payments/columns/index.js +1 -1
- package/dist/features/payments/hooks/usePaymentEvent.js +2 -2
- package/dist/features/payments/hooks/usePayments.js +2 -2
- package/dist/features/payments/index.js +6 -6
- package/dist/features/payments/repository/payout.repository.js +4 -4
- package/dist/features/payments/repository/saved-payment-methods.repository.js +6 -6
- package/dist/features/payments/schemas/firestore.js +1 -1
- package/dist/features/payments/schemas/index.d.ts +6 -6
- package/dist/features/payments/schemas/index.js +3 -3
- package/dist/features/payments/server.js +4 -4
- package/dist/features/pre-orders/api/[id]/route.js +2 -2
- package/dist/features/pre-orders/api/[slug]/route.js +2 -2
- package/dist/features/pre-orders/api/admin/[id]/route.js +2 -2
- package/dist/features/pre-orders/api/admin/route.js +2 -2
- package/dist/features/pre-orders/api/route.js +3 -3
- package/dist/features/pre-orders/columns/index.js +1 -1
- package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +1 -1
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +14 -14
- package/dist/features/pre-orders/components/PreOrderActionsClient.js +4 -4
- package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
- package/dist/features/pre-orders/components/PreOrderBottomActions.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +26 -26
- package/dist/features/pre-orders/components/PreOrderFilters.js +4 -4
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +23 -23
- package/dist/features/pre-orders/components/PreOrdersListView.js +4 -4
- package/dist/features/pre-orders/components/PreorderCard.js +2 -2
- package/dist/features/pre-orders/components/index.js +6 -6
- package/dist/features/pre-orders/hooks/usePreOrders.js +2 -2
- package/dist/features/pre-orders/index.js +6 -6
- package/dist/features/pre-orders/schemas/index.js +1 -1
- package/dist/features/pre-orders/server.js +1 -1
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +87 -0
- package/dist/features/price-index/components/PriceIndexToolView.js +140 -0
- package/dist/features/products/actions/index.js +1 -1
- package/dist/features/products/actions/product-actions.js +6 -6
- package/dist/features/products/api/[id]/route.js +8 -8
- package/dist/features/products/api/route.js +7 -7
- package/dist/features/products/columns/index.js +2 -2
- package/dist/features/products/columns/productTableColumns.js +3 -3
- package/dist/features/products/components/ArtStickersListView.js +7 -7
- package/dist/features/products/components/AuctionDetailView.js +1 -1
- package/dist/features/products/components/AuctionsIndexListing.js +20 -20
- package/dist/features/products/components/AvailabilityTabs.js +5 -5
- package/dist/features/products/components/BidHistory.js +3 -3
- package/dist/features/products/components/CardStoreLine.js +2 -2
- package/dist/features/products/components/CompareOverlay.js +9 -9
- package/dist/features/products/components/CustomFieldsEditor.js +2 -2
- package/dist/features/products/components/CustomSectionTabContent.js +2 -2
- package/dist/features/products/components/CustomSectionsEditor.js +3 -3
- package/dist/features/products/components/FeatureBadge.js +2 -2
- package/dist/features/products/components/GroupMemberPicker.js +9 -9
- package/dist/features/products/components/GroupSettingsPanel.js +12 -12
- package/dist/features/products/components/InteractiveProductCard.js +2 -2
- package/dist/features/products/components/ListingBottomActions.js +4 -4
- package/dist/features/products/components/MakeOfferButton.js +13 -13
- package/dist/features/products/components/MarketplaceBundleCard.js +9 -9
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +9 -9
- package/dist/features/products/components/NonRefundableConsentModal.js +1 -1
- package/dist/features/products/components/PreOrderDetailView.js +1 -1
- package/dist/features/products/components/PrizeDrawBottomActions.js +1 -1
- package/dist/features/products/components/PrizeDrawCollage.js +4 -4
- package/dist/features/products/components/PrizeDrawDetailPageView.js +18 -18
- package/dist/features/products/components/PrizeDrawEntryActions.js +8 -8
- package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
- package/dist/features/products/components/PrizeDrawWinnerMappingView.js +3 -3
- package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -14
- package/dist/features/products/components/PrizeDrawsListingView.js +6 -6
- package/dist/features/products/components/PrizeDrawsSection.js +6 -6
- package/dist/features/products/components/PrizeRevealModal.js +3 -3
- package/dist/features/products/components/ProductCardMetadataSection.js +1 -1
- package/dist/features/products/components/ProductDetailActions.js +14 -14
- package/dist/features/products/components/ProductDetailPageView.d.ts +14 -1
- package/dist/features/products/components/ProductDetailPageView.js +50 -31
- package/dist/features/products/components/ProductDetailView.js +1 -1
- package/dist/features/products/components/ProductFeatureBadges.js +1 -1
- package/dist/features/products/components/ProductFeaturesSelector.js +5 -5
- package/dist/features/products/components/ProductFilters.js +8 -8
- package/dist/features/products/components/ProductForm.js +15 -15
- package/dist/features/products/components/ProductGalleryClient.js +3 -3
- package/dist/features/products/components/ProductGradingTab.js +3 -3
- package/dist/features/products/components/ProductGrid.js +16 -16
- package/dist/features/products/components/ProductTabs.js +1 -1
- package/dist/features/products/components/ProductTabsShell.d.ts +3 -1
- package/dist/features/products/components/ProductTabsShell.js +6 -3
- package/dist/features/products/components/ProductsIndexListing.js +33 -33
- package/dist/features/products/components/ProductsIndexPageView.js +12 -12
- package/dist/features/products/components/ProductsView.js +1 -1
- package/dist/features/products/components/RelatedItemsSection.js +2 -2
- package/dist/features/products/components/RelatedProducts.js +1 -1
- package/dist/features/products/components/RelatedProductsCarousel.js +4 -4
- package/dist/features/products/components/ShareButton.js +2 -2
- package/dist/features/products/components/ShowGroupSection.js +8 -8
- package/dist/features/products/components/SublistingCarouselSection.js +8 -8
- package/dist/features/products/components/SublistingCategorySelect.js +2 -2
- package/dist/features/products/components/index.js +42 -42
- package/dist/features/products/config/listing-type-listing-config.js +7 -7
- package/dist/features/products/constants/action-defs.js +1 -1
- package/dist/features/products/constants/listing-tabs.js +2 -2
- package/dist/features/products/constants/sieve.js +2 -2
- package/dist/features/products/hooks/useAvailabilityScope.js +4 -4
- package/dist/features/products/hooks/useBrands.d.ts +1 -1
- package/dist/features/products/hooks/useBrands.js +2 -2
- package/dist/features/products/hooks/useProductDetail.js +2 -2
- package/dist/features/products/hooks/useProducts.js +5 -5
- package/dist/features/products/hooks/useRelatedProducts.js +4 -4
- package/dist/features/products/index.js +14 -14
- package/dist/features/products/repository/category-assignment.d.ts +132 -0
- package/dist/features/products/repository/category-assignment.js +304 -0
- package/dist/features/products/repository/loadProductFeatures.js +2 -2
- package/dist/features/products/repository/product-features.repository.js +7 -7
- package/dist/features/products/repository/product-templates.repository.js +3 -3
- package/dist/features/products/repository/products.repository.d.ts +120 -38
- package/dist/features/products/repository/products.repository.js +448 -109
- package/dist/features/products/schemas/firestore.d.ts +172 -6
- package/dist/features/products/schemas/firestore.js +67 -1
- package/dist/features/products/schemas/index.d.ts +2 -2
- package/dist/features/products/schemas/index.js +3 -3
- package/dist/features/products/schemas/product-features.validators.js +1 -1
- package/dist/features/products/server.js +4 -4
- package/dist/features/products/utils/listing-badge-variant.js +1 -1
- package/dist/features/products/utils/listing-type.js +1 -1
- package/dist/features/promotions/actions/coupon-actions.js +2 -2
- package/dist/features/promotions/actions/index.js +4 -4
- package/dist/features/promotions/actions/promotions-actions.js +3 -3
- package/dist/features/promotions/actions/seller-coupon-actions.js +5 -5
- package/dist/features/promotions/api/route.js +2 -2
- package/dist/features/promotions/columns/index.js +1 -1
- package/dist/features/promotions/components/CouponCard.js +4 -4
- package/dist/features/promotions/components/CouponHelpDetails.js +2 -2
- package/dist/features/promotions/components/CouponsIndexListing.js +8 -8
- package/dist/features/promotions/components/PromotionsView.js +1 -1
- package/dist/features/promotions/components/index.js +4 -4
- package/dist/features/promotions/hooks/useCouponValidate.js +2 -2
- package/dist/features/promotions/hooks/usePromotions.js +2 -2
- package/dist/features/promotions/index.js +7 -7
- package/dist/features/promotions/repository/claimed-coupons.repository.js +5 -5
- package/dist/features/promotions/repository/coupons.repository.js +9 -9
- package/dist/features/promotions/schemas/firestore.js +1 -1
- package/dist/features/promotions/schemas/index.d.ts +24 -24
- package/dist/features/promotions/schemas/index.js +2 -2
- package/dist/features/promotions/server.js +3 -3
- package/dist/features/reviews/actions/index.js +1 -1
- package/dist/features/reviews/actions/review-actions.js +9 -9
- package/dist/features/reviews/api/[id]/route.js +5 -5
- package/dist/features/reviews/columns/index.js +1 -1
- package/dist/features/reviews/components/ReviewDetailPageView.js +7 -7
- package/dist/features/reviews/components/ReviewDetailShell.js +11 -11
- package/dist/features/reviews/components/ReviewFilters.js +7 -7
- package/dist/features/reviews/components/ReviewModal.js +7 -7
- package/dist/features/reviews/components/ReviewSummary.js +3 -3
- package/dist/features/reviews/components/ReviewsIndexListing.js +1 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +5 -5
- package/dist/features/reviews/components/ReviewsList.js +9 -9
- package/dist/features/reviews/components/ReviewsListingPanel.js +10 -10
- package/dist/features/reviews/components/index.js +6 -6
- package/dist/features/reviews/hooks/useCreateReview.js +3 -3
- package/dist/features/reviews/hooks/useReviews.js +2 -2
- package/dist/features/reviews/index.js +7 -7
- package/dist/features/reviews/repository/reviews.repository.js +7 -7
- package/dist/features/reviews/schemas/firestore.js +1 -1
- package/dist/features/reviews/schemas/index.js +2 -2
- package/dist/features/reviews/server.js +3 -3
- package/dist/features/scams/actions/scam-actions.js +5 -5
- package/dist/features/scams/components/ScamAwarenessModal.js +5 -5
- package/dist/features/scams/components/ScamProfileView.js +8 -8
- package/dist/features/scams/components/ScamRegistryView.js +7 -7
- package/dist/features/scams/components/SellerTrustBadge.js +3 -3
- package/dist/features/scams/components/index.js +4 -4
- package/dist/features/scams/constants/scammer-status-display.js +1 -1
- package/dist/features/scams/repository/scammer.repository.js +10 -10
- package/dist/features/scams/schemas/index.d.ts +10 -10
- package/dist/features/scams/schemas/index.js +2 -2
- package/dist/features/scams/schemas/report-form.js +1 -1
- package/dist/features/search/action-index/repository.js +2 -2
- package/dist/features/search/actions/index.js +1 -1
- package/dist/features/search/actions/search-actions.js +2 -2
- package/dist/features/search/api/route.js +5 -5
- package/dist/features/search/columns/index.js +1 -1
- package/dist/features/search/components/Search.js +2 -2
- package/dist/features/search/components/SearchFiltersRow.js +1 -1
- package/dist/features/search/components/SearchResultsPageView.d.ts +33 -0
- package/dist/features/search/components/SearchResultsPageView.js +21 -0
- package/dist/features/search/components/SearchResultsSection.js +1 -1
- package/dist/features/search/components/SearchView.js +1 -1
- package/dist/features/search/components/index.js +4 -4
- package/dist/features/search/hooks/useNavSuggestions.js +2 -2
- package/dist/features/search/hooks/useSearch.js +2 -2
- package/dist/features/search/index.js +7 -7
- package/dist/features/search/repository/search.repository.js +2 -2
- package/dist/features/search/server.js +4 -4
- package/dist/features/seller/actions/index.js +2 -2
- package/dist/features/seller/actions/offer-actions.js +14 -14
- package/dist/features/seller/actions/seller-actions.js +22 -22
- package/dist/features/seller/api/coupons/route.js +2 -2
- package/dist/features/seller/api/products/route.js +3 -3
- package/dist/features/seller/api/store/route.js +2 -2
- package/dist/features/seller/columns/index.js +1 -1
- package/dist/features/seller/components/BarcodeField.js +3 -3
- package/dist/features/seller/components/BrandInlineSelect.js +4 -4
- package/dist/features/seller/components/BulkStockModal.d.ts +16 -0
- package/dist/features/seller/components/BulkStockModal.js +46 -0
- package/dist/features/seller/components/CategoryChipPicker.js +2 -2
- package/dist/features/seller/components/CategoryInlineSelect.js +4 -4
- package/dist/features/seller/components/CouponInlineSelect.js +3 -3
- package/dist/features/seller/components/FulfillmentView.js +9 -9
- package/dist/features/seller/components/GroupInlineSelect.js +4 -4
- package/dist/features/seller/components/OfferPhaseTimeline.js +1 -1
- package/dist/features/seller/components/PhysicalLocationModal.js +22 -7
- package/dist/features/seller/components/PrintCenterView.js +6 -6
- package/dist/features/seller/components/ProductInlineSelect.js +3 -3
- package/dist/features/seller/components/QuickProductForm.js +2 -2
- package/dist/features/seller/components/SellerAddressesView.js +9 -9
- package/dist/features/seller/components/SellerAnalyticsAlertsView.js +11 -11
- package/dist/features/seller/components/SellerAnalyticsView.js +1 -1
- package/dist/features/seller/components/SellerArtView.js +1 -1
- package/dist/features/seller/components/SellerBidsView.js +14 -14
- package/dist/features/seller/components/SellerBundlesView.js +7 -7
- package/dist/features/seller/components/SellerClassifiedView.js +1 -1
- package/dist/features/seller/components/SellerCouponEditorView.js +10 -10
- package/dist/features/seller/components/SellerCouponsView.js +7 -7
- package/dist/features/seller/components/SellerCreateProductView.js +1 -1
- package/dist/features/seller/components/SellerDashboardView.js +1 -1
- package/dist/features/seller/components/SellerDigitalCodesView.js +1 -1
- package/dist/features/seller/components/SellerEditProductView.js +1 -1
- package/dist/features/seller/components/SellerFeaturesView.js +8 -8
- package/dist/features/seller/components/SellerGoogleReviewsView.js +8 -8
- package/dist/features/seller/components/SellerGroupedListingsView.js +6 -6
- package/dist/features/seller/components/SellerGuideView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +13 -13
- package/dist/features/seller/components/SellerLiveView.js +1 -1
- package/dist/features/seller/components/SellerOffersView.js +9 -9
- package/dist/features/seller/components/SellerOrdersView.js +23 -23
- package/dist/features/seller/components/SellerPayoutHistoryTable.js +1 -1
- package/dist/features/seller/components/SellerPayoutMethodsView.js +7 -7
- package/dist/features/seller/components/SellerPayoutRequestView.js +3 -3
- package/dist/features/seller/components/SellerPayoutSettingsView.js +30 -8
- package/dist/features/seller/components/SellerPayoutStats.js +1 -1
- package/dist/features/seller/components/SellerPayoutsView.js +11 -11
- package/dist/features/seller/components/SellerProductShell.js +14 -14
- package/dist/features/seller/components/SellerProductsCards.js +5 -5
- package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -4
- package/dist/features/seller/components/SellerProductsView.js +234 -34
- package/dist/features/seller/components/SellerReviewsView.js +12 -12
- package/dist/features/seller/components/SellerShippingConfigsView.js +9 -9
- package/dist/features/seller/components/SellerShippingView.js +7 -7
- package/dist/features/seller/components/SellerSidebar.js +9 -9
- package/dist/features/seller/components/SellerStickersView.js +1 -1
- package/dist/features/seller/components/SellerStoreCategoriesView.js +10 -10
- package/dist/features/seller/components/SellerStoreSetupView.js +1 -1
- package/dist/features/seller/components/SellerStoreView.js +1 -1
- package/dist/features/seller/components/SellerStorefrontView.js +5 -5
- package/dist/features/seller/components/SellerSupportView.js +6 -6
- package/dist/features/seller/components/SellersListView.js +1 -1
- package/dist/features/seller/components/SublistingInlineSelect.js +3 -3
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +2 -2
- package/dist/features/seller/components/analytics/SellerRevenueChart.js +2 -2
- package/dist/features/seller/components/analytics/SellerTopProducts.js +1 -1
- package/dist/features/seller/components/analytics/index.js +3 -3
- package/dist/features/seller/components/index.js +67 -67
- package/dist/features/seller/hooks/useBecomeSeller.js +3 -3
- package/dist/features/seller/hooks/useSellerListingData.js +1 -1
- package/dist/features/seller/hooks/useSellerPayouts.js +2 -2
- package/dist/features/seller/hooks/useSellerStore.js +2 -2
- package/dist/features/seller/hooks/useSellerStorefront.js +2 -2
- package/dist/features/seller/index.js +11 -11
- package/dist/features/seller/repository/offer.repository.js +6 -6
- package/dist/features/seller/schemas/coupon-form.d.ts +20 -20
- package/dist/features/seller/schemas/coupon-form.js +1 -1
- package/dist/features/seller/schemas/firestore.js +1 -1
- package/dist/features/seller/schemas/index.js +1 -1
- package/dist/features/seller/schemas/order-forms.js +2 -2
- package/dist/features/seller/schemas/product-form.js +1 -1
- package/dist/features/seller/schemas/review-forms.js +1 -1
- package/dist/features/seller/server.js +5 -5
- package/dist/features/server-errors/repository/server-errors.repository.js +4 -4
- package/dist/features/server-errors/schemas/index.js +1 -1
- package/dist/features/shell/CommandPalette.js +2 -2
- package/dist/features/shell/FormShell.js +5 -5
- package/dist/features/shell/QuickFormDrawer.js +7 -7
- package/dist/features/shell/SectionForm.js +9 -9
- package/dist/features/shell/build-sections.js +11 -11
- package/dist/features/shell/field-groups/ImageFieldGroup.js +1 -1
- package/dist/features/shell/field-groups/SeoFieldGroup.js +3 -3
- package/dist/features/shell/field-groups/StatusFieldGroup.js +2 -2
- package/dist/features/shell/field-groups/TitleDescriptionGroup.js +3 -3
- package/dist/features/shell/field-groups/index.js +4 -4
- package/dist/features/shell/index.js +8 -8
- package/dist/features/shipments/components/AdminShipmentEditorView.js +13 -13
- package/dist/features/shipments/components/AdminShipmentLotItemsView.js +12 -12
- package/dist/features/shipments/components/AdminShipmentProjectionsView.js +5 -5
- package/dist/features/shipments/components/AdminShipmentsView.js +7 -7
- package/dist/features/shipments/components/ShipmentItemLinkModal.js +4 -4
- package/dist/features/shipments/hooks/useShipments.js +2 -2
- package/dist/features/shipments/index.js +7 -7
- package/dist/features/shipments/repository/shipment-items.repository.js +4 -4
- package/dist/features/shipments/repository/shipment-lots.repository.js +2 -2
- package/dist/features/shipments/repository/shipments.repository.js +4 -4
- package/dist/features/shipments/schemas/firestore.js +1 -1
- package/dist/features/shipments/schemas/index.js +2 -2
- package/dist/features/shipments/schemas/validation.d.ts +4 -4
- package/dist/features/shipments/schemas/validation.js +3 -3
- package/dist/features/shipments/utils/cost-allocation.js +1 -1
- package/dist/features/site-settings/components/ActionPermissionsManager.js +4 -4
- package/dist/features/site-settings/components/NavPermissionsManager.js +3 -3
- package/dist/features/site-settings/components/ThemeManagerView.js +2 -2
- package/dist/features/status-history/components/RecordStatusTimeline.js +1 -1
- package/dist/features/status-history/components/StatusTimeline.js +1 -1
- package/dist/features/status-history/index.js +2 -2
- package/dist/features/store-extensions/components/ReviewDecisionModal.js +10 -10
- package/dist/features/store-extensions/index.js +16 -16
- package/dist/features/store-extensions/repository/rbac.repositories.js +2 -2
- package/dist/features/store-extensions/repository/store-extensions.repositories.js +3 -3
- package/dist/features/store-extensions/schemas/admin-notification-form.js +1 -1
- package/dist/features/store-extensions/schemas/analytics-forms.js +2 -2
- package/dist/features/store-extensions/schemas/custom-role-form.js +2 -2
- package/dist/features/store-extensions/schemas/google-config-form.d.ts +6 -6
- package/dist/features/store-extensions/schemas/google-config-form.js +1 -1
- package/dist/features/store-extensions/schemas/item-request-create-form.js +1 -1
- package/dist/features/store-extensions/schemas/listing-template-form.js +3 -3
- package/dist/features/store-extensions/schemas/moderation-review-form.js +1 -1
- package/dist/features/store-extensions/schemas/payout-method-form.js +1 -1
- package/dist/features/store-extensions/schemas/report-create-form.js +2 -2
- package/dist/features/store-extensions/schemas/report-review-form.js +1 -1
- package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +10 -10
- package/dist/features/store-extensions/schemas/shipping-config-form.js +1 -1
- package/dist/features/store-extensions/schemas/store-category-form.js +1 -1
- package/dist/features/store-extensions/schemas/sublisting-category-form.js +1 -1
- package/dist/features/stores/actions/index.js +2 -2
- package/dist/features/stores/actions/store-address-actions.js +4 -4
- package/dist/features/stores/actions/store-query-actions.js +9 -9
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +5 -5
- package/dist/features/stores/api/[storeSlug]/products/route.js +5 -5
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +4 -4
- package/dist/features/stores/api/[storeSlug]/route.js +3 -3
- package/dist/features/stores/columns/index.js +1 -1
- package/dist/features/stores/components/InteractiveStoreCard.js +5 -5
- package/dist/features/stores/components/StoreAboutView.js +3 -3
- package/dist/features/stores/components/StoreAddressSelectorCreate.js +2 -2
- package/dist/features/stores/components/StoreArtStickersPageView.js +6 -6
- package/dist/features/stores/components/StoreAuctionsListing.js +15 -15
- package/dist/features/stores/components/StoreAuctionsPageView.js +5 -5
- package/dist/features/stores/components/StoreAuctionsView.js +1 -1
- package/dist/features/stores/components/StoreBundlesPageView.js +5 -5
- package/dist/features/stores/components/StoreCapabilitiesGuideView.js +2 -2
- package/dist/features/stores/components/StoreClassifiedsListing.js +12 -12
- package/dist/features/stores/components/StoreClassifiedsPageView.js +5 -5
- package/dist/features/stores/components/StoreDetailLayoutView.js +12 -12
- package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -12
- package/dist/features/stores/components/StoreDigitalCodesPageView.js +5 -5
- package/dist/features/stores/components/StoreFilters.js +4 -4
- package/dist/features/stores/components/StoreFinanceGuideView.js +2 -2
- package/dist/features/stores/components/StoreGuideHubView.js +2 -2
- package/dist/features/stores/components/StoreHeader.js +6 -6
- package/dist/features/stores/components/StoreListingsGuideView.js +2 -2
- package/dist/features/stores/components/StoreLiveItemsListing.js +12 -12
- package/dist/features/stores/components/StoreLiveItemsPageView.js +5 -5
- package/dist/features/stores/components/StoreNavTabs.js +2 -2
- package/dist/features/stores/components/StoreOrdersGuideView.js +2 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +11 -11
- package/dist/features/stores/components/StorePreOrdersPageView.js +5 -5
- package/dist/features/stores/components/StorePrizeDrawsPageView.js +5 -5
- package/dist/features/stores/components/StoreProductsListing.js +15 -15
- package/dist/features/stores/components/StoreProductsPageView.js +5 -5
- package/dist/features/stores/components/StoreProductsView.js +1 -1
- package/dist/features/stores/components/StoreReviewsListing.js +1 -1
- package/dist/features/stores/components/StoreReviewsPageView.js +1 -1
- package/dist/features/stores/components/StoreReviewsView.js +1 -1
- package/dist/features/stores/components/StoreScopedSearch.js +3 -3
- package/dist/features/stores/components/StoreSettingsGuideView.js +2 -2
- package/dist/features/stores/components/StoreWhatsAppGuideView.js +2 -2
- package/dist/features/stores/components/StoresIndexListing.js +12 -12
- package/dist/features/stores/components/StoresIndexPageView.js +7 -7
- package/dist/features/stores/components/index.js +23 -23
- package/dist/features/stores/hooks/useStoreAddressSelector.js +2 -2
- package/dist/features/stores/hooks/useStores.js +2 -2
- package/dist/features/stores/index.js +7 -7
- package/dist/features/stores/repository/store.repository.js +9 -9
- package/dist/features/stores/schemas/firestore.d.ts +86 -0
- package/dist/features/stores/schemas/firestore.js +2 -2
- package/dist/features/stores/schemas/index.d.ts +30 -30
- package/dist/features/stores/schemas/index.js +3 -3
- package/dist/features/stores/server.js +6 -6
- package/dist/features/stores/types/index.d.ts +10 -0
- package/dist/features/support/repository/support.repository.js +11 -11
- package/dist/features/support/schemas/index.d.ts +2 -2
- package/dist/features/support/schemas/index.js +2 -2
- package/dist/features/support/schemas/ticket-create-form.js +2 -2
- package/dist/features/tax-codes/repository/tax-codes.repository.js +4 -4
- package/dist/features/tax-codes/schemas/tax-code-form.js +2 -2
- package/dist/features/tax-codes/schemas/tax-codes.validators.js +1 -1
- package/dist/features/tester/actions/checklist-item-actions.d.ts +8 -8
- package/dist/features/tester/actions/checklist-item-actions.js +2 -2
- package/dist/features/tester/actions/index.js +1 -1
- package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +6 -6
- package/dist/features/tester/components/AdminTesterFeedbackListView.js +10 -10
- package/dist/features/tester/components/AdminTesterFeedbackReportView.js +4 -4
- package/dist/features/tester/components/AdminTesterFeedbackView.js +8 -8
- package/dist/features/tester/components/TesterChecklistStepRow.js +4 -4
- package/dist/features/tester/components/TesterFeedbackChart.js +2 -2
- package/dist/features/tester/components/index.js +6 -6
- package/dist/features/tester/index.js +2 -2
- package/dist/features/tester/repository/index.js +2 -2
- package/dist/features/tester/repository/tester-checklist-item.repository.js +4 -4
- package/dist/features/tester/repository/tester-checklist-response.repository.js +3 -3
- package/dist/features/tester/schemas/checklist-item-form.d.ts +4 -4
- package/dist/features/tester/schemas/checklist-item-form.js +1 -1
- package/dist/features/tester/schemas/firestore.js +1 -1
- package/dist/features/tester/schemas/index.js +1 -1
- package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -15
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +166 -0
- package/dist/features/tester/seed-data/authored/index.js +120 -118
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +1 -1
- package/dist/features/tester/seed-data/index.js +2 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +32 -5
- package/dist/features/tester/server.js +3 -3
- package/dist/features/whatsapp-bot/api/send-status/route.js +2 -2
- package/dist/features/whatsapp-bot/api/webhook/route.js +2 -2
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +12 -12
- package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +1 -1
- package/dist/features/whatsapp-bot/components/index.js +2 -2
- package/dist/features/whatsapp-bot/helpers/whatsapp.js +3 -3
- package/dist/features/whatsapp-bot/index.js +3 -3
- package/dist/features/whatsapp-bot/server.js +2 -2
- package/dist/features/wishlist/actions/index.js +1 -1
- package/dist/features/wishlist/actions/wishlist-actions.js +4 -4
- package/dist/features/wishlist/columns/index.js +1 -1
- package/dist/features/wishlist/components/WishlistCapWatcher.js +2 -2
- package/dist/features/wishlist/components/WishlistHeartButton.js +2 -2
- package/dist/features/wishlist/components/WishlistPage.js +3 -3
- package/dist/features/wishlist/components/WishlistView.js +3 -3
- package/dist/features/wishlist/components/index.js +4 -4
- package/dist/features/wishlist/hooks/useGuestWishlist.js +1 -1
- package/dist/features/wishlist/hooks/useUserWishlist.js +2 -2
- package/dist/features/wishlist/hooks/useWishlist.js +2 -2
- package/dist/features/wishlist/hooks/useWishlistCount.js +8 -8
- package/dist/features/wishlist/hooks/useWishlistToggle.js +3 -3
- package/dist/features/wishlist/hooks/useWishlistWithGuest.js +2 -2
- package/dist/features/wishlist/index.js +12 -12
- package/dist/features/wishlist/repository/user-wishlist.repository.js +4 -4
- package/dist/features/wishlist/server.js +2 -2
- package/dist/features/wishlist/utils/guest-wishlist.js +1 -1
- package/dist/hand-mode/index.js +1 -1
- package/dist/http/api-handler.js +8 -8
- package/dist/http/index.js +2 -2
- package/dist/http/retry.js +1 -1
- package/dist/index.d.ts +31 -19
- package/dist/index.js +2023 -1978
- package/dist/monitoring/browser.js +5 -5
- package/dist/monitoring/cache-metrics.js +1 -1
- package/dist/monitoring/client-logger.js +3 -3
- package/dist/monitoring/index.js +6 -6
- package/dist/monitoring/runtime.js +1 -1
- package/dist/monitoring/server-logger.js +3 -3
- package/dist/next/ErrorBoundary.js +3 -3
- package/dist/next/api/api-response.js +2 -2
- package/dist/next/api/apiHandler.js +3 -3
- package/dist/next/api/parseJsonBody.js +1 -1
- package/dist/next/api/routeHandler.js +9 -9
- package/dist/next/cache-middleware.js +1 -1
- package/dist/next/components/ErrorView.js +3 -3
- package/dist/next/components/GlobalError.js +23 -2
- package/dist/next/components/NotFoundView.js +4 -4
- package/dist/next/components/UnauthorizedView.js +4 -4
- package/dist/next/index.js +21 -21
- package/dist/next/middleware/chain.js +3 -3
- package/dist/next/middleware/index.js +2 -2
- package/dist/next/middleware/pii-scrubber.js +3 -3
- package/dist/next/request-helpers.js +1 -1
- package/dist/next/routing/route-map.d.ts +10 -2
- package/dist/next/routing/route-map.js +23 -1
- package/dist/providers/auth-firebase/helpers.js +5 -5
- package/dist/providers/auth-firebase/index.js +3 -3
- package/dist/providers/auth-firebase/provider.js +2 -2
- package/dist/providers/auth-firebase/session.js +2 -2
- package/dist/providers/db-firebase/admin-app-lite.js +1 -1
- package/dist/providers/db-firebase/admin-auth-lite.js +1 -1
- package/dist/providers/db-firebase/admin-storage-lite.js +1 -1
- package/dist/providers/db-firebase/admin.js +2 -2
- package/dist/providers/db-firebase/base.js +2 -2
- package/dist/providers/db-firebase/base.repository.d.ts +85 -0
- package/dist/providers/db-firebase/base.repository.js +150 -7
- package/dist/providers/db-firebase/browser-stub.js +2 -2
- package/dist/providers/db-firebase/index.js +12 -12
- package/dist/providers/db-firebase/sieve.js +4 -4
- package/dist/providers/email-resend/index.js +1 -1
- package/dist/providers/firebase-client/index.js +2 -2
- package/dist/providers/firebase-client/realtime.js +1 -1
- package/dist/providers/payment-manual/index.js +1 -1
- package/dist/providers/payment-phonepe/index.js +3 -3
- package/dist/providers/shipping-manual/index.js +1 -1
- package/dist/providers/storage-firebase/client.js +2 -2
- package/dist/providers/storage-firebase/index.js +1 -1
- package/dist/providers/storage-firebase/provider.js +4 -4
- package/dist/providers.js +12 -12
- package/dist/react/ErrorBoundary.js +3 -3
- package/dist/react/contexts/SessionContext.js +6 -6
- package/dist/react/contexts/index.js +1 -1
- package/dist/react/hooks/use-action-dispatch.js +5 -5
- package/dist/react/hooks/use-panel-url-sync.js +1 -1
- package/dist/react/hooks/useAuthGate.js +3 -3
- package/dist/react/hooks/useBreakpoint.js +1 -1
- package/dist/react/hooks/useBulkAction.js +1 -1
- package/dist/react/hooks/useCamera.js +1 -1
- package/dist/react/hooks/useCanSeePrices.js +1 -1
- package/dist/react/hooks/useEntityDelete.js +2 -2
- package/dist/react/hooks/useFormStatePreservation.js +1 -1
- package/dist/react/hooks/useInlineRowEdit.js +1 -1
- package/dist/react/hooks/useListingTypeFlags.js +2 -2
- package/dist/react/hooks/useMessage.js +1 -1
- package/dist/react/hooks/usePendingFilters.js +1 -1
- package/dist/react/hooks/usePendingTable.js +2 -2
- package/dist/react/hooks/useRealtimeEvent.js +4 -4
- package/dist/react/hooks/useTabParam.js +2 -2
- package/dist/react/hooks/useUnsavedChanges.js +1 -1
- package/dist/react/hooks/useUrlTable.js +2 -2
- package/dist/react/index.js +28 -28
- package/dist/repositories/index.d.ts +2 -3
- package/dist/repositories/index.js +54 -51
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/registry.d.ts +102 -102
- package/dist/schemas/registry.js +44 -44
- package/dist/security/authorization.js +3 -3
- package/dist/security/browser.js +4 -4
- package/dist/security/index.js +8 -8
- package/dist/security/pii-encrypt.js +3 -3
- package/dist/security/pii-redact.js +1 -1
- package/dist/security/rate-limit.js +1 -1
- package/dist/security/settings-encryption.js +1 -1
- package/dist/seed/_helpers/brand-rows.js +2 -2
- package/dist/seed/_helpers/category-content.d.ts +29 -0
- package/dist/seed/_helpers/category-content.js +98 -1
- package/dist/seed/_helpers/category-forest.js +106 -26
- package/dist/seed/_helpers/category-parts.d.ts +9 -0
- package/dist/seed/_helpers/category-parts.js +4594 -0
- package/dist/seed/_helpers/media.js +1 -1
- package/dist/seed/_helpers/product-search-txt.js +1 -1
- package/dist/seed/_helpers/search-txt-wrappers.js +1 -1
- package/dist/seed/blog-posts-seed-data.js +2 -2
- package/dist/seed/carousel-slides-seed-data.js +83 -10
- package/dist/seed/cart-seed-data.js +2 -2
- package/dist/seed/categories-seed-data.js +53 -15
- package/dist/seed/claimed-coupons-seed-data.js +1 -1
- package/dist/seed/coupons-seed-data.js +2 -2
- package/dist/seed/defaults/categories.js +1 -1
- package/dist/seed/defaults/faqs.js +2 -2
- package/dist/seed/defaults/homepage-sections.js +2 -2
- package/dist/seed/events-seed-data.js +3 -3
- package/dist/seed/factories/address.factory.js +1 -1
- package/dist/seed/factories/carousel.factory.js +1 -1
- package/dist/seed/factories/order.factory.js +1 -1
- package/dist/seed/factories/product.factory.js +2 -2
- package/dist/seed/factories/store.factory.js +1 -1
- package/dist/seed/factories/user.factory.js +2 -2
- package/dist/seed/faq-seed-data.js +532 -3
- package/dist/seed/grouped-listings-seed-data.js +1 -1
- package/dist/seed/homepage-sections-seed-data.js +172 -11
- package/dist/seed/index.d.ts +3 -0
- package/dist/seed/index.js +88 -68
- package/dist/seed/manifest.js +43 -43
- package/dist/seed/model-composition-seed-data.d.ts +15 -0
- package/dist/seed/model-composition-seed-data.js +8918 -0
- package/dist/seed/notifications-seed-data.js +3 -3
- package/dist/seed/offers-seed-data.js +2 -2
- package/dist/seed/orders-seed-data.js +2 -2
- package/dist/seed/part-glossary-seed-data.d.ts +15 -0
- package/dist/seed/part-glossary-seed-data.js +10729 -0
- package/dist/seed/payouts-seed-data.js +2 -2
- package/dist/seed/product-features-seed-data.js +2 -2
- package/dist/seed/products-art-seed-data.js +4 -4
- package/dist/seed/products-auctions-seed-data.js +4 -4
- package/dist/seed/products-classifieds-seed-data.js +5 -5
- package/dist/seed/products-digital-codes-seed-data.js +5 -5
- package/dist/seed/products-live-items-seed-data.js +5 -5
- package/dist/seed/products-preorders-seed-data.js +4 -4
- package/dist/seed/products-prize-draws-seed-data.js +5 -5
- package/dist/seed/products-standard-seed-data.js +56 -4
- package/dist/seed/products-stickers-seed-data.js +4 -4
- package/dist/seed/reviews-seed-data.js +2 -2
- package/dist/seed/runner.js +2 -2
- package/dist/seed/scammers-seed-data.js +3 -3
- package/dist/seed/seed-market-config.js +2 -2
- package/dist/seed/seed-purpose.d.ts +299 -0
- package/dist/seed/seed-purpose.js +416 -0
- package/dist/seed/sessions-seed-data.js +2 -2
- package/dist/seed/shipments-seed-data.js +1 -1
- package/dist/seed/site-settings-seed-data.js +9 -3
- package/dist/seed/store-addresses-seed-data.js +1 -1
- package/dist/seed/store-extensions-seed-data.js +1 -1
- package/dist/seed/stores-seed-data.js +3 -3
- package/dist/seed/support-tickets-seed-data.js +2 -2
- package/dist/seed/test-utils.js +8 -8
- package/dist/seed/users-seed-data.js +4 -4
- package/dist/seo/index.js +2 -2
- package/dist/seo/json-ld.d.ts +72 -1
- package/dist/seo/json-ld.js +87 -3
- package/dist/seo/metadata.js +1 -1
- package/dist/server-entry.js +78 -78
- package/dist/server.d.ts +19 -2
- package/dist/server.js +571 -544
- package/dist/styles.css +767 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/theme/index.js +2 -2
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/themes/cobalt-night.js +1 -1
- package/dist/tokens/themes/index.js +5 -5
- package/dist/tokens/themes/sunset.js +1 -1
- package/dist/ui/DataTable.js +12 -12
- package/dist/ui/columns/cell-renderers.js +7 -7
- package/dist/ui/columns/column-renderers.js +2 -2
- package/dist/ui/columns/index.js +3 -3
- package/dist/ui/components/Accordion.js +4 -4
- package/dist/ui/components/ActionRow.js +1 -1
- package/dist/ui/components/ActiveFilterChips.js +2 -2
- package/dist/ui/components/Alert.js +2 -2
- package/dist/ui/components/Anchor.js +1 -1
- package/dist/ui/components/Avatar.js +1 -1
- package/dist/ui/components/AvatarDisplay.js +1 -1
- package/dist/ui/components/Badge.js +1 -1
- package/dist/ui/components/BaseListingCard.js +2 -2
- package/dist/ui/components/Breadcrumb.js +3 -3
- package/dist/ui/components/BulkActionBar.js +2 -2
- package/dist/ui/components/Button.js +4 -4
- package/dist/ui/components/Card.js +2 -2
- package/dist/ui/components/Checkbox.js +1 -1
- package/dist/ui/components/ClaimCouponButton.js +6 -6
- package/dist/ui/components/CollapsibleSection.js +5 -5
- package/dist/ui/components/ConfirmDeleteModal.js +3 -3
- package/dist/ui/components/CountdownDisplay.js +2 -2
- package/dist/ui/components/DateInput.js +1 -1
- package/dist/ui/components/DetailPageGallery.js +2 -2
- package/dist/ui/components/DetailPageHero.js +3 -3
- package/dist/ui/components/DetailPageTabs.js +2 -2
- package/dist/ui/components/DetailViewShell.js +2 -2
- package/dist/ui/components/Details.js +1 -1
- package/dist/ui/components/Div.js +1 -1
- package/dist/ui/components/Divider.js +1 -1
- package/dist/ui/components/Drawer.js +4 -4
- package/dist/ui/components/EmptyState.js +4 -4
- package/dist/ui/components/FilePickerButton.js +1 -1
- package/dist/ui/components/FilterChipGroup.js +2 -2
- package/dist/ui/components/FilterDrawer.js +4 -4
- package/dist/ui/components/FlowDiagram.js +2 -2
- package/dist/ui/components/Form.js +4 -4
- package/dist/ui/components/FormActionBar.js +3 -3
- package/dist/ui/components/FormField.js +24 -6
- package/dist/ui/components/GatedPrice.js +6 -6
- package/dist/ui/components/HandModeRow.js +2 -2
- package/dist/ui/components/Icon.js +1 -1
- package/dist/ui/components/IconButton.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -6
- package/dist/ui/components/ImageLightbox.js +5 -5
- package/dist/ui/components/Input.js +2 -2
- package/dist/ui/components/ItemRow.js +3 -3
- package/dist/ui/components/Layout.js +1 -1
- package/dist/ui/components/ListingFilterDrawer.js +4 -4
- package/dist/ui/components/ListingLayout.js +9 -9
- package/dist/ui/components/ListingToolbar.js +5 -5
- package/dist/ui/components/LoginRequiredModal.js +5 -5
- package/dist/ui/components/Menu.js +1 -1
- package/dist/ui/components/Modal.js +6 -6
- package/dist/ui/components/Motion.js +1 -1
- package/dist/ui/components/NavigationLoader.js +3 -3
- package/dist/ui/components/OtpInput.js +1 -1
- package/dist/ui/components/PageLoader.js +4 -4
- package/dist/ui/components/PaginatedSelect.js +0 -0
- package/dist/ui/components/Pagination.js +2 -2
- package/dist/ui/components/PasswordStrengthIndicator.js +3 -3
- package/dist/ui/components/PriceDisplay.js +1 -1
- package/dist/ui/components/Progress.js +1 -1
- package/dist/ui/components/QuantityStepper.js +3 -3
- package/dist/ui/components/QuickCreateModal.js +5 -5
- package/dist/ui/components/Radio.js +1 -1
- package/dist/ui/components/RatingDisplay.js +2 -2
- package/dist/ui/components/RecordDetailModal.js +2 -2
- package/dist/ui/components/RoleBadge.js +1 -1
- package/dist/ui/components/RowActionMenu.js +3 -3
- package/dist/ui/components/Select.js +2 -2
- package/dist/ui/components/Semantic.js +1 -1
- package/dist/ui/components/SettingsSection.js +2 -2
- package/dist/ui/components/SideDrawer.js +9 -9
- package/dist/ui/components/SideModal.js +4 -4
- package/dist/ui/components/SiteLogo.js +1 -1
- package/dist/ui/components/SiteMark.js +1 -1
- package/dist/ui/components/SkipToMain.js +1 -1
- package/dist/ui/components/Slider.js +1 -1
- package/dist/ui/components/SlottedListingView.js +2 -2
- package/dist/ui/components/SortDropdown.js +3 -3
- package/dist/ui/components/StackedViewShell.js +2 -2
- package/dist/ui/components/StarRating.js +1 -1
- package/dist/ui/components/StatsGrid.js +3 -3
- package/dist/ui/components/StatusBadge.js +1 -1
- package/dist/ui/components/StepperNav.js +3 -3
- package/dist/ui/components/StickyToolbar.js +1 -1
- package/dist/ui/components/SummaryCard.js +4 -4
- package/dist/ui/components/TabBarShell.js +3 -3
- package/dist/ui/components/TablePagination.js +4 -4
- package/dist/ui/components/Tabs.js +1 -1
- package/dist/ui/components/TagInput.js +1 -1
- package/dist/ui/components/TextLink.js +2 -2
- package/dist/ui/components/Textarea.js +1 -1
- package/dist/ui/components/Toast.js +3 -3
- package/dist/ui/components/Toggle.js +1 -1
- package/dist/ui/components/Typography.js +2 -2
- package/dist/ui/components/UnsavedChangesModal.js +5 -5
- package/dist/ui/components/VacationBanner.js +3 -3
- package/dist/ui/components/ViewToggle.js +2 -2
- package/dist/ui/components/index.style.css +4 -0
- package/dist/ui/components/surface-tokens.js +1 -1
- package/dist/ui/components/toolbar-collapse.js +1 -1
- package/dist/ui/forms/ColorPickerField.js +2 -2
- package/dist/ui/forms/FieldCheckbox.js +3 -3
- package/dist/ui/forms/FieldInput.js +3 -3
- package/dist/ui/forms/FieldSelect.js +3 -3
- package/dist/ui/forms/FieldTextarea.js +3 -3
- package/dist/ui/forms/FormErrorList.js +2 -2
- package/dist/ui/forms/FormErrorSummary.js +2 -2
- package/dist/ui/forms/FormShell.js +1 -1
- package/dist/ui/forms/index.js +9 -9
- package/dist/ui/index.d.ts +0 -2
- package/dist/ui/index.js +147 -127
- package/dist/ui/rich-text/RichText.js +2 -2
- package/dist/ui/rich-text/index.js +1 -1
- package/dist/utils/action-response.js +2 -2
- package/dist/utils/action-result.js +1 -1
- package/dist/utils/auth-error.js +1 -1
- package/dist/utils/client.js +1 -1
- package/dist/utils/date.formatter.js +1 -1
- package/dist/utils/id-generators.d.ts +30 -0
- package/dist/utils/id-generators.js +33 -3
- package/dist/utils/index.js +19 -19
- package/dist/utils/media-field.js +1 -1
- package/dist/utils/media-url.js +2 -2
- package/dist/utils/number.formatter.js +1 -1
- package/dist/utils/physical-location.d.ts +68 -0
- package/dist/utils/physical-location.js +82 -0
- package/dist/utils/safe-fire-forget.js +2 -2
- package/dist/utils/search-txt-builders.js +83 -1
- package/dist/utils/search-txt-query.d.ts +54 -6
- package/dist/utils/search-txt-query.js +79 -11
- package/dist/utils/search-txt.d.ts +22 -0
- package/dist/utils/search-txt.js +17 -0
- package/dist/utils/sieve-builder.js +1 -1
- package/dist/utils/string.formatter.js +1 -1
- package/dist/validation/ZodSetup.js +1 -1
- package/dist/validation/index.js +8 -8
- package/dist/validation/phone.validator.js +1 -1
- package/dist/validation/schemas.d.ts +12 -12
- package/dist/validation/schemas.js +1 -1
- package/dist/validation/url.validator.js +1 -1
- package/dist/values/index.js +1 -1
- package/dist/values/success-messages.d.ts +0 -4
- package/dist/values/success-messages.js +0 -5
- package/dist/vendor/react-advanced-cropper.css +406 -0
- package/package.json +80 -4
- package/scripts/copy-assets.mjs +53 -1
- package/scripts/seed-cli.mjs +452 -15
- package/dist/core/copilot-log.repository.d.ts +0 -44
- package/dist/core/copilot-log.repository.js +0 -61
- package/dist/features/copilot/components/AdminCopilotView.d.ts +0 -21
- package/dist/features/copilot/components/AdminCopilotView.js +0 -51
- package/dist/features/copilot/components/index.d.ts +0 -2
- package/dist/features/copilot/components/index.js +0 -1
- package/dist/features/copilot/hooks/useCopilotChat.d.ts +0 -25
- package/dist/features/copilot/hooks/useCopilotChat.js +0 -65
- package/dist/features/copilot/hooks/useCopilotFeedback.d.ts +0 -15
- package/dist/features/copilot/hooks/useCopilotFeedback.js +0 -15
- package/dist/features/copilot/index.d.ts +0 -3
- package/dist/features/copilot/index.js +0 -3
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* G3b — the incremental leaf→root counter.
|
|
3
|
+
*
|
|
4
|
+
* 🛑 MAINTAINED FROM THE REPOSITORY, NOT A FIRESTORE TRIGGER, and this is the
|
|
5
|
+
* decisive constraint rather than a preference. `FieldValue.increment` is
|
|
6
|
+
* atomic but **not idempotent**, and a Firestore trigger is delivered
|
|
7
|
+
* at-least-once — so a redelivered trigger double-counts permanently and
|
|
8
|
+
* invisibly, which is the worst failure available here (a wrong number is just
|
|
9
|
+
* a number; nothing errors). From `ProductRepository` a retry is the caller's
|
|
10
|
+
* and the increments are one batch.
|
|
11
|
+
*
|
|
12
|
+
* It walks the STORED chain, which is what makes it duplicate-free and acyclic
|
|
13
|
+
* by construction rather than by care:
|
|
14
|
+
*
|
|
15
|
+
* - `product.categorySlugs` is already `[leaf, …ancestors, root]`, derived by
|
|
16
|
+
* `deriveTaxonomy` on create and update. Each ancestor appears exactly
|
|
17
|
+
* once, so incrementing every element once cannot double-count.
|
|
18
|
+
* - It comes from `buildCategoryTree`'s DFS over a forest, so it is acyclic
|
|
19
|
+
* by construction and bounded at 5 (tiers 0–4).
|
|
20
|
+
*
|
|
21
|
+
* 🛑 Do NOT walk parent-by-parent at write time. That is N reads per mutation
|
|
22
|
+
* and it reintroduces the cycle question the stored chain already answers.
|
|
23
|
+
*/
|
|
24
|
+
import { increment, serverTimestamp } from "../../../contracts/field-ops.js";
|
|
25
|
+
import { normalizeError } from "../../../errors/normalize.js";
|
|
26
|
+
import { CATEGORY_COUNTS_COLLECTION } from "../schemas/category-counts.js";
|
|
27
|
+
const DEFAULT_LISTING_TYPE = "standard";
|
|
28
|
+
/**
|
|
29
|
+
* Read a product's countable identity.
|
|
30
|
+
*
|
|
31
|
+
* Mirrors `countersReconcile.tallyProduct`'s own field selection exactly —
|
|
32
|
+
* `categorySlugs[0]` first, then the `@deprecated` scalar `category` — so the
|
|
33
|
+
* incremental and the nightly values can agree. Two different leaf selections
|
|
34
|
+
* would drift silently and the reconciler would "correct" a count that was
|
|
35
|
+
* right.
|
|
36
|
+
*/
|
|
37
|
+
export function describeCountable(row) {
|
|
38
|
+
const chainRaw = Array.isArray(row.categorySlugs) ? row.categorySlugs : [];
|
|
39
|
+
/*
|
|
40
|
+
* I3 — the ASSIGNED list is what `own` keys on, and it is read from
|
|
41
|
+
* `categoryIds` with the old single-leaf selection as the fallback.
|
|
42
|
+
*
|
|
43
|
+
* 🛑 The fallback is not legacy tidiness, it is required: `categoryIds` was
|
|
44
|
+
* added in I1, so every product written before it has only `categorySlugs`,
|
|
45
|
+
* and the nightly reconciler reads the same two fields in the same order. Two
|
|
46
|
+
* different selections would drift silently and the reconciler would
|
|
47
|
+
* "correct" a count that was right.
|
|
48
|
+
*/
|
|
49
|
+
const ownsRaw = Array.isArray(row.categoryIds) && row.categoryIds.length > 0
|
|
50
|
+
? row.categoryIds
|
|
51
|
+
: [chainRaw[0] || row.category || ""];
|
|
52
|
+
const ownSeen = new Set();
|
|
53
|
+
const owns = [];
|
|
54
|
+
for (const id of ownsRaw) {
|
|
55
|
+
if (!id || ownSeen.has(id))
|
|
56
|
+
continue;
|
|
57
|
+
ownSeen.add(id);
|
|
58
|
+
owns.push(id);
|
|
59
|
+
}
|
|
60
|
+
if (owns.length === 0)
|
|
61
|
+
return null;
|
|
62
|
+
/*
|
|
63
|
+
* Dedupe the chain. The one real duplicate risk the stored closure does NOT
|
|
64
|
+
* remove is a product filed under two leaves that share an ancestor — the
|
|
65
|
+
* shared ancestor would otherwise be incremented twice for one listing.
|
|
66
|
+
*
|
|
67
|
+
* 🛑 Under the one-per-root rule that cannot happen, and the dedupe stays
|
|
68
|
+
* anyway: the rule is enforced at ONE write path, while this runs on every
|
|
69
|
+
* row that reaches Firestore — including a seeded row and an admin
|
|
70
|
+
* `.passthrough()` write, neither of which passes through it. A belt, and the
|
|
71
|
+
* cheaper of the two places to be wrong.
|
|
72
|
+
*/
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const chain = [];
|
|
75
|
+
for (const id of [...owns, ...chainRaw]) {
|
|
76
|
+
if (!id || seen.has(id))
|
|
77
|
+
continue;
|
|
78
|
+
seen.add(id);
|
|
79
|
+
chain.push(id);
|
|
80
|
+
}
|
|
81
|
+
/*
|
|
82
|
+
* 🛑 Never count the brand twice. If a row's leaf id were also its brand id,
|
|
83
|
+
* the brand bump below would land on a category already bumped by the chain.
|
|
84
|
+
* It cannot happen with today's `category-` / `brand-` prefixes, which is
|
|
85
|
+
* exactly why it is worth guarding rather than trusting: the prefixes are a
|
|
86
|
+
* convention and this is an arithmetic invariant.
|
|
87
|
+
*/
|
|
88
|
+
const brandSlug = row.brandSlug || null;
|
|
89
|
+
const brand = brandSlug && !seen.has(brandSlug) ? brandSlug : null;
|
|
90
|
+
return {
|
|
91
|
+
owns,
|
|
92
|
+
chain,
|
|
93
|
+
brand,
|
|
94
|
+
listingType: row.listingType || DEFAULT_LISTING_TYPE,
|
|
95
|
+
isLot: row.isLot === true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Whether a mutation can possibly have changed the counters.
|
|
100
|
+
*
|
|
101
|
+
* 🛑 THE BUG THIS EXISTS TO PREVENT, and the plan called it in advance: a guard
|
|
102
|
+
* that asks only "did the taxonomy change?" MISSES EVERY STATUS TRANSITION.
|
|
103
|
+
* `draft → published` changes no `categorySlugs` at all, so the count would
|
|
104
|
+
* never move — silently, on a page that looks correct. Same for
|
|
105
|
+
* `published → archived`, a sell-out, and a soft delete.
|
|
106
|
+
*
|
|
107
|
+
* So the comparison is over (chain, leaf, listingType, isLot, countsNow), and
|
|
108
|
+
* the availability verdict is a first-class input rather than an afterthought.
|
|
109
|
+
*/
|
|
110
|
+
export function countsChanged(before, after) {
|
|
111
|
+
const b = before.countsNow ? before.delta : null;
|
|
112
|
+
const a = after.countsNow ? after.delta : null;
|
|
113
|
+
if (!b && !a)
|
|
114
|
+
return false;
|
|
115
|
+
if (!b || !a)
|
|
116
|
+
return true;
|
|
117
|
+
return (b.owns.length !== a.owns.length ||
|
|
118
|
+
b.owns.some((id, i) => id !== a.owns[i]) ||
|
|
119
|
+
b.brand !== a.brand ||
|
|
120
|
+
b.listingType !== a.listingType ||
|
|
121
|
+
b.isLot !== a.isLot ||
|
|
122
|
+
b.chain.length !== a.chain.length ||
|
|
123
|
+
b.chain.some((id, i) => id !== a.chain[i]));
|
|
124
|
+
}
|
|
125
|
+
function bump(patch, categoryId, field, by) {
|
|
126
|
+
let doc = patch.get(categoryId);
|
|
127
|
+
if (!doc) {
|
|
128
|
+
doc = new Map();
|
|
129
|
+
patch.set(categoryId, doc);
|
|
130
|
+
}
|
|
131
|
+
doc.set(field, (doc.get(field) ?? 0) + by);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Build the field-path increments for one product transition.
|
|
135
|
+
*
|
|
136
|
+
* `sign` is +1 for an addition and −1 for a removal; an update is expressed as
|
|
137
|
+
* a removal of the old shape followed by an addition of the new, which is why
|
|
138
|
+
* a move between leaves nets to −1 on the old chain and +1 on the new with no
|
|
139
|
+
* node double-counted.
|
|
140
|
+
*/
|
|
141
|
+
export function buildCountPatch(deltas) {
|
|
142
|
+
const patch = new Map();
|
|
143
|
+
for (const { delta, sign } of deltas) {
|
|
144
|
+
if (!delta)
|
|
145
|
+
continue;
|
|
146
|
+
const ownField = delta.isLot ? "lots.own" : `own.${delta.listingType}`;
|
|
147
|
+
const totalField = delta.isLot ? "lots.total" : `total.${delta.listingType}`;
|
|
148
|
+
/*
|
|
149
|
+
* Every ASSIGNMENT gets `own`; the whole deduped closure gets `total`.
|
|
150
|
+
*
|
|
151
|
+
* 🛑 `own` at each one is the point of I3: a product assigned to both
|
|
152
|
+
* category-dragoon-g and category-beyblade is genuinely filed in both, and
|
|
153
|
+
* each page's "N here" must say so. `total` is still one bump per closure
|
|
154
|
+
* entry, so a shared ancestor moves by 1 for the listing rather than by the
|
|
155
|
+
* number of assignments that reach it.
|
|
156
|
+
*/
|
|
157
|
+
for (const id of delta.owns)
|
|
158
|
+
bump(patch, id, ownField, sign);
|
|
159
|
+
for (const id of delta.chain)
|
|
160
|
+
bump(patch, id, totalField, sign);
|
|
161
|
+
// A brand is flat: own and total move together, so its descendant count
|
|
162
|
+
// derives to 0 rather than to a negative number.
|
|
163
|
+
if (delta.brand) {
|
|
164
|
+
bump(patch, delta.brand, ownField, sign);
|
|
165
|
+
bump(patch, delta.brand, totalField, sign);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/*
|
|
169
|
+
* Drop net-zero fields. A move WITHIN one leaf (a title edit on a row whose
|
|
170
|
+
* chain did not change) cancels to nothing, and writing `increment(0)` would
|
|
171
|
+
* still be a write — one per ancestor, on the hottest path in the app.
|
|
172
|
+
*/
|
|
173
|
+
for (const [catId, fields] of patch) {
|
|
174
|
+
for (const [field, by] of fields)
|
|
175
|
+
if (by === 0)
|
|
176
|
+
fields.delete(field);
|
|
177
|
+
if (fields.size === 0)
|
|
178
|
+
patch.delete(catId);
|
|
179
|
+
}
|
|
180
|
+
return patch;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Apply a patch.
|
|
184
|
+
*
|
|
185
|
+
* `set(..., { merge: true })` rather than `update`, because the counts document
|
|
186
|
+
* may not exist yet: `update` on a missing document throws, and a counter that
|
|
187
|
+
* refuses to start is worse than one that starts at the first mutation. Merge
|
|
188
|
+
* also leaves the OTHER listing types' keys untouched, which is what keeps the
|
|
189
|
+
* map `Partial`.
|
|
190
|
+
*
|
|
191
|
+
* 🛑 Failure is swallowed deliberately, and this is the one place in this
|
|
192
|
+
* codebase where that is right: a count is a display number, and failing a
|
|
193
|
+
* seller's publish because an ancestor counter could not be bumped would trade
|
|
194
|
+
* a cosmetic staleness for a lost listing. The nightly reconciler is the
|
|
195
|
+
* backstop — its `drifted` count is how a missed increment becomes visible.
|
|
196
|
+
*/
|
|
197
|
+
export async function applyCountPatch(db, patch, onError) {
|
|
198
|
+
if (patch.size === 0)
|
|
199
|
+
return;
|
|
200
|
+
try {
|
|
201
|
+
const col = db.collection(CATEGORY_COUNTS_COLLECTION);
|
|
202
|
+
await Promise.all(Array.from(patch, ([categoryId, fields]) => {
|
|
203
|
+
/*
|
|
204
|
+
* `FieldSentinel` rather than `unknown`: every value here is either
|
|
205
|
+
* the id string or a Firestore sentinel (`increment` / `serverTimestamp`),
|
|
206
|
+
* and `Record<string, unknown>` would be a dodge that `audit-unknown-leakage`
|
|
207
|
+
* correctly refuses — it says nothing about what may be written.
|
|
208
|
+
*/
|
|
209
|
+
const payload = {
|
|
210
|
+
id: categoryId,
|
|
211
|
+
updatedAt: serverTimestamp(),
|
|
212
|
+
};
|
|
213
|
+
for (const [field, by] of fields)
|
|
214
|
+
payload[field] = increment(by);
|
|
215
|
+
return col.doc(categoryId).set(payload, { merge: true });
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
// Typed before anything downstream touches it (Root Cause #31) — the
|
|
220
|
+
// caller logs `.message`, and an `unknown` escaping a catch is how a
|
|
221
|
+
// non-Error throw becomes "[object Object]" in a log line.
|
|
222
|
+
onError?.(normalizeError(err));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
@@ -60,6 +60,21 @@ export interface PriceIndexBand {
|
|
|
60
60
|
min: number;
|
|
61
61
|
median: number;
|
|
62
62
|
max: number;
|
|
63
|
+
/**
|
|
64
|
+
* The arithmetic MEAN, carried alongside the median rather than instead of
|
|
65
|
+
* it.
|
|
66
|
+
*
|
|
67
|
+
* 🛑 They are different quantities and the gap between them is information,
|
|
68
|
+
* so neither substitutes for the other — the same discipline the market-vs-
|
|
69
|
+
* sold pair is held to. On a collectibles leaf the two routinely diverge:
|
|
70
|
+
* nine ₹900 sales and one ₹9,000 grail give a median of ₹900 and a mean of
|
|
71
|
+
* ₹1,710, and a buyer told only the mean concludes the item costs ₹1,710,
|
|
72
|
+
* while a seller told only the median prices a mint example like a loose one.
|
|
73
|
+
*
|
|
74
|
+
* Which is "the average" depends on the question, which is exactly why the
|
|
75
|
+
* renderer shows both and labels them rather than picking.
|
|
76
|
+
*/
|
|
77
|
+
mean: number;
|
|
63
78
|
/**
|
|
64
79
|
* 🛑 The confidence signal, and the UI must render a small one as a sample
|
|
65
80
|
* size with NO headline number — the same discipline as `truncated`
|
|
@@ -68,12 +83,49 @@ export interface PriceIndexBand {
|
|
|
68
83
|
*/
|
|
69
84
|
sampleSize: number;
|
|
70
85
|
byPath?: PriceIndexByPath;
|
|
86
|
+
/**
|
|
87
|
+
* Per-CONDITION bands within this listing type.
|
|
88
|
+
*
|
|
89
|
+
* 🛑 The single most requested breakdown and the one the blended band hides.
|
|
90
|
+
* Condition is the dominant price variable in collectibles — the crawl
|
|
91
|
+
* measured WHS keeping midfake/damaged/incomplete stock in a separate
|
|
92
|
+
* Clearance category precisely because it cannot be priced with the rest, and
|
|
93
|
+
* hobson's "Without Box" group runs at a ₹599 median against ₹4,499 for the
|
|
94
|
+
* same boxed figures. A leaf band spanning `new` and `poor` is an average of
|
|
95
|
+
* two different markets.
|
|
96
|
+
*
|
|
97
|
+
* Keyed by `ProductDocument.condition`. Absent when no sale in the window
|
|
98
|
+
* recorded one — NOT zeroed, and not back-filled with a guess: "we do not
|
|
99
|
+
* know what condition these sold in" is a different statement from "they sold
|
|
100
|
+
* in unknown condition", and only the first is true.
|
|
101
|
+
*/
|
|
102
|
+
byCondition?: Record<string, PriceIndexConditionBand>;
|
|
71
103
|
lastSold?: {
|
|
72
104
|
amount: number;
|
|
73
105
|
at: Date;
|
|
74
106
|
via?: "standard" | "auction" | "offer";
|
|
75
107
|
};
|
|
76
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* A condition slice. Deliberately NARROWER than `PriceIndexBand` — no
|
|
111
|
+
* `byPath`, no nested `byCondition`, no recursion.
|
|
112
|
+
*
|
|
113
|
+
* Slicing a 90-day leaf window by both listing type and condition leaves
|
|
114
|
+
* single-digit samples fast, so a third axis inside it would be arithmetic on
|
|
115
|
+
* one sale. `sampleSize` is here for exactly that reason and the renderer must
|
|
116
|
+
* gate on it with the same threshold as the parent.
|
|
117
|
+
*/
|
|
118
|
+
export interface PriceIndexConditionBand {
|
|
119
|
+
min: number;
|
|
120
|
+
median: number;
|
|
121
|
+
max: number;
|
|
122
|
+
mean: number;
|
|
123
|
+
sampleSize: number;
|
|
124
|
+
lastSold?: {
|
|
125
|
+
amount: number;
|
|
126
|
+
at: Date;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
77
129
|
/** One day's point, for a series. */
|
|
78
130
|
export interface PriceIndexDailyPoint {
|
|
79
131
|
id: string;
|
|
@@ -94,6 +146,23 @@ export declare const PRICE_INDEX_MIN_CONFIDENT_SAMPLES = 3;
|
|
|
94
146
|
export declare class PriceIndexRepository extends BaseRepository<PriceIndexDocument> {
|
|
95
147
|
constructor();
|
|
96
148
|
getForLeaf(leafId: string): Promise<PriceIndexDocument | null>;
|
|
149
|
+
/**
|
|
150
|
+
* Bands for several leaves in ONE round trip.
|
|
151
|
+
*
|
|
152
|
+
* 🛑 `db.getAll`, not N `findById` calls. The search tool resolves a query to
|
|
153
|
+
* up to 8 candidate leaves and needs a band for each; eight sequential reads
|
|
154
|
+
* is eight round trips against the ~3 Rule #6 budgets for a request, and it
|
|
155
|
+
* is the exact shape `storeAnalytics.ts:94` is cited as the pattern NOT to
|
|
156
|
+
* copy. `deriveTaxonomy`'s ancestor resolution made the same call for the
|
|
157
|
+
* same reason.
|
|
158
|
+
*
|
|
159
|
+
* 🛑 A missing document is OMITTED from the map, never returned as an empty
|
|
160
|
+
* band. A leaf with no completed sales must render "no sales recorded yet",
|
|
161
|
+
* and a zeroed band would render "₹0" — a confident, wrong figure, which is
|
|
162
|
+
* the failure mode the whole index is written to avoid (`market` vs `sold`,
|
|
163
|
+
* never blended, never zeroed).
|
|
164
|
+
*/
|
|
165
|
+
getManyForLeaves(leafIds: readonly string[]): Promise<Map<string, PriceIndexDocument>>;
|
|
97
166
|
/**
|
|
98
167
|
* Write the current band for one leaf.
|
|
99
168
|
*
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* already carries two unbounded arrays and a third is the 1 MiB trap. The
|
|
31
31
|
* samples stay in job memory and only the summary is written.
|
|
32
32
|
*/
|
|
33
|
-
import { BaseRepository } from "../../../providers/db-firebase";
|
|
33
|
+
import { BaseRepository } from "../../../providers/db-firebase/index.js";
|
|
34
34
|
export const PRICE_INDEX_COLLECTION = "priceIndex";
|
|
35
35
|
const DAILY_SUBCOLLECTION = "daily";
|
|
36
36
|
/**
|
|
@@ -48,6 +48,36 @@ export class PriceIndexRepository extends BaseRepository {
|
|
|
48
48
|
async getForLeaf(leafId) {
|
|
49
49
|
return this.findById(leafId);
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Bands for several leaves in ONE round trip.
|
|
53
|
+
*
|
|
54
|
+
* 🛑 `db.getAll`, not N `findById` calls. The search tool resolves a query to
|
|
55
|
+
* up to 8 candidate leaves and needs a band for each; eight sequential reads
|
|
56
|
+
* is eight round trips against the ~3 Rule #6 budgets for a request, and it
|
|
57
|
+
* is the exact shape `storeAnalytics.ts:94` is cited as the pattern NOT to
|
|
58
|
+
* copy. `deriveTaxonomy`'s ancestor resolution made the same call for the
|
|
59
|
+
* same reason.
|
|
60
|
+
*
|
|
61
|
+
* 🛑 A missing document is OMITTED from the map, never returned as an empty
|
|
62
|
+
* band. A leaf with no completed sales must render "no sales recorded yet",
|
|
63
|
+
* and a zeroed band would render "₹0" — a confident, wrong figure, which is
|
|
64
|
+
* the failure mode the whole index is written to avoid (`market` vs `sold`,
|
|
65
|
+
* never blended, never zeroed).
|
|
66
|
+
*/
|
|
67
|
+
async getManyForLeaves(leafIds) {
|
|
68
|
+
const ids = [...new Set(leafIds.filter(Boolean))];
|
|
69
|
+
const out = new Map();
|
|
70
|
+
if (ids.length === 0)
|
|
71
|
+
return out;
|
|
72
|
+
const refs = ids.map((id) => this.db.collection(PRICE_INDEX_COLLECTION).doc(id));
|
|
73
|
+
const snaps = await this.db.getAll(...refs);
|
|
74
|
+
for (const snap of snaps) {
|
|
75
|
+
if (!snap.exists)
|
|
76
|
+
continue;
|
|
77
|
+
out.set(snap.id, { ...snap.data(), id: snap.id });
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
51
81
|
/**
|
|
52
82
|
* Write the current band for one leaf.
|
|
53
83
|
*
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
* @tag sideEffects:none
|
|
36
36
|
*/
|
|
37
37
|
import { z } from "zod";
|
|
38
|
-
import { annotate } from "../../shell/field-ui-meta";
|
|
39
|
-
import { BUNDLE_COPY } from "../../../_internal/shared/features/categories/bundle-copy";
|
|
40
|
-
import { BUNDLE_MIN_ITEMS, BUNDLE_MAX_ITEMS, } from "../../../_internal/shared/features/categories/bundle-config";
|
|
38
|
+
import { annotate } from "../../shell/field-ui-meta.js";
|
|
39
|
+
import { BUNDLE_COPY } from "../../../_internal/shared/features/categories/bundle-copy.js";
|
|
40
|
+
import { BUNDLE_MIN_ITEMS, BUNDLE_MAX_ITEMS, } from "../../../_internal/shared/features/categories/bundle-config.js";
|
|
41
41
|
/** The two member sources, as the rule-type select offers them. */
|
|
42
42
|
export const BUNDLE_RULE_TYPE_OPTIONS = [
|
|
43
43
|
{ value: "static", label: BUNDLE_COPY.adminEditor.ruleTypeStatic },
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* G3b — LISTING COUNTS, maintained incrementally leaf→root.
|
|
3
|
+
*
|
|
4
|
+
* 🛑 WHY THIS IS A SIBLING COLLECTION AND NOT A FIELD ON `categories`.
|
|
5
|
+
*
|
|
6
|
+
* `handleCategoryWrite` calls `notifyRevalidate({ collection: "categories" })`
|
|
7
|
+
* as its FIRST statement, unconditionally, before any branch — so ANY write to
|
|
8
|
+
* a category document drops that category page's ISR entry. Under leaf→root,
|
|
9
|
+
* publishing one listing touches up to five ancestors, so it would drop five
|
|
10
|
+
* ISR entries per publish. This project was paused with **ISR writes at 3.1M
|
|
11
|
+
* against a 200K cap (15.5×)**, which settles the question.
|
|
12
|
+
*
|
|
13
|
+
* It also removes the Root Cause #92 hazard outright: a trigger that writes
|
|
14
|
+
* back to the collection it watches produced 1,017,548 invocations in 24 hours
|
|
15
|
+
* and a billing denial that blocked `firebase deploy`.
|
|
16
|
+
*
|
|
17
|
+
* 🛑 AND `metrics.*` ON `categories` STAYS — a constraint the plan did not
|
|
18
|
+
* record. Two Sieve SORTS order by `metrics.productCount` through Firestore
|
|
19
|
+
* (`CategoriesIndexListing`'s "Most Products" and
|
|
20
|
+
* `AdminSublistingCategoriesView`'s "Most listings"), and a sibling collection
|
|
21
|
+
* cannot serve an `orderBy` on the categories query. So:
|
|
22
|
+
*
|
|
23
|
+
* - `metrics.*` — written ONLY by the nightly `countersReconcile`, as
|
|
24
|
+
* today. The two sorts keep working at exactly today's
|
|
25
|
+
* accuracy, so there is no regression, and the ISR cost
|
|
26
|
+
* is unchanged from the status quo (one drop per
|
|
27
|
+
* category per night, already happening).
|
|
28
|
+
* - `categoryCounts` — the LIVE value, written per product mutation. Fires no
|
|
29
|
+
* revalidation, because nothing triggers on it.
|
|
30
|
+
*
|
|
31
|
+
* Readers prefer `categoryCounts` and fall back to `metrics`. That ordering is
|
|
32
|
+
* what makes the feature additive: a category with no counts document yet
|
|
33
|
+
* renders exactly as it does today rather than as zero.
|
|
34
|
+
*
|
|
35
|
+
* 🛑 HOW FRESH IT ACTUALLY IS, stated precisely rather than as "live".
|
|
36
|
+
*
|
|
37
|
+
* The count is of AVAILABLE rows — `isListingRowAvailable`, the same predicate
|
|
38
|
+
* `countersReconcile` and the listing query use. That predicate is partly
|
|
39
|
+
* TIME-dependent: `auction` is the one type with an inequality clause
|
|
40
|
+
* (`auctionEndDate`), so an auction becomes unavailable by the clock with no
|
|
41
|
+
* product write, and no incremental counter can observe that.
|
|
42
|
+
*
|
|
43
|
+
* In practice the window is minutes, not a day: `auctionSettlement` writes
|
|
44
|
+
* `isSold: true` when it settles, and that write re-evaluates the counter.
|
|
45
|
+
* Every other type's unavailability is write-driven (stock, `isSold`,
|
|
46
|
+
* `digitalCode.codesAvailable`, the prize-draw reveal status).
|
|
47
|
+
*
|
|
48
|
+
* So: instant for every write-driven change, and bounded by the settlement
|
|
49
|
+
* cadence for a just-ended auction. That is strictly better than today, where
|
|
50
|
+
* every change is up to 24h stale. The nightly reconciler stays as the
|
|
51
|
+
* authority and the audit — its `drifted` counter becomes a real signal that
|
|
52
|
+
* an increment was missed.
|
|
53
|
+
*/
|
|
54
|
+
import type { ListingType } from "../../products/types";
|
|
55
|
+
export declare const CATEGORY_COUNTS_COLLECTION = "categoryCounts";
|
|
56
|
+
/**
|
|
57
|
+
* Per-listing-type counters.
|
|
58
|
+
*
|
|
59
|
+
* 🛑 `Partial` on purpose: an absent key means "zero observed". Writing nine
|
|
60
|
+
* explicit zeros on every row is noise, and it would also make an untouched
|
|
61
|
+
* category indistinguishable from one measured as empty.
|
|
62
|
+
*
|
|
63
|
+
* A MAP rather than scalar fields, because own+total across nine listing types
|
|
64
|
+
* is 18 fields that grow with the union — and the union has grown twice
|
|
65
|
+
* already. A map needs no schema change for a tenth type.
|
|
66
|
+
*/
|
|
67
|
+
export type ListingTypeCounts = Partial<Record<ListingType, number>>;
|
|
68
|
+
/**
|
|
69
|
+
* 🛑 THE INVARIANT, and the one way to get this wrong:
|
|
70
|
+
*
|
|
71
|
+
* total = own + (every descendant's own)
|
|
72
|
+
*
|
|
73
|
+
* **`total` ALREADY INCLUDES `own`. Never add them.** `own + total` double-counts
|
|
74
|
+
* every item filed directly under the row, and on a leaf — where `total === own`
|
|
75
|
+
* — it doubles the whole number.
|
|
76
|
+
*
|
|
77
|
+
* So there are three questions and only two stored fields, because the third is
|
|
78
|
+
* a subtraction and a stored mirror of it would drift the first time one half
|
|
79
|
+
* was written without the other (Root Cause #42):
|
|
80
|
+
*
|
|
81
|
+
* | Question | Read |
|
|
82
|
+
* |---|---|
|
|
83
|
+
* | "how many are filed right here?" | `own` |
|
|
84
|
+
* | "how many are under my subcategories?" | **`descendantCountsFor()`** — `total − own`, derived |
|
|
85
|
+
* | "how many will clicking this show me?" | `total` |
|
|
86
|
+
*
|
|
87
|
+
* The third is the one a buyer means, which is why `liveTotalFor` returns it
|
|
88
|
+
* and why the category chips and grid read it. The second exists because the
|
|
89
|
+
* distinction is genuinely useful to an admin — `CategoryTableColumns` already
|
|
90
|
+
* renders "own (total)" explicitly — and because deriving it is the only way to
|
|
91
|
+
* show it without a third counter to keep in step.
|
|
92
|
+
*/
|
|
93
|
+
export interface CategoryCountsDocument {
|
|
94
|
+
/** === the category's document id. */
|
|
95
|
+
id: string;
|
|
96
|
+
/** Listings filed DIRECTLY under this category, by type. */
|
|
97
|
+
own: ListingTypeCounts;
|
|
98
|
+
/**
|
|
99
|
+
* Own + every descendant's, by type. Equals `own` on a leaf.
|
|
100
|
+
*
|
|
101
|
+
* 🛑 INCLUDES `own` — see the invariant above. Never `own + total`.
|
|
102
|
+
*/
|
|
103
|
+
total: ListingTypeCounts;
|
|
104
|
+
/**
|
|
105
|
+
* Multi-item LOTS, counted separately from singles.
|
|
106
|
+
*
|
|
107
|
+
* 🛑 This separation is what makes a count mean one thing, and it is why the
|
|
108
|
+
* filing rule in `deriveTaxonomy` only has to refuse a lot at a LEAF rather
|
|
109
|
+
* than also refusing a single at a non-leaf. A lot and a single are never
|
|
110
|
+
* summed into one number, so "12 listings here" is unambiguous wherever they
|
|
111
|
+
* are filed. (Measured: 58 of 70 live products file at a non-leaf, so the
|
|
112
|
+
* symmetric rule the plan first specified would have rejected most of the
|
|
113
|
+
* catalogue — see the `isLot` docstring on `ProductDocument`.)
|
|
114
|
+
*
|
|
115
|
+
* Scalars rather than a per-type map: a lot is not type-specific in any way
|
|
116
|
+
* a buyer or a seller filters on, and there is no reader for "lots of
|
|
117
|
+
* auctions".
|
|
118
|
+
*/
|
|
119
|
+
lots: {
|
|
120
|
+
own: number;
|
|
121
|
+
total: number;
|
|
122
|
+
};
|
|
123
|
+
updatedAt: Date;
|
|
124
|
+
}
|
|
125
|
+
/** Sum a counts map — what a category page renders as "N listings". */
|
|
126
|
+
export declare function sumCounts(counts: ListingTypeCounts | undefined): number;
|
|
127
|
+
/**
|
|
128
|
+
* The display count for a category, preferring the live document.
|
|
129
|
+
*
|
|
130
|
+
* 🛑 `undefined` means "no counts document yet", NOT zero — so the caller falls
|
|
131
|
+
* back to `metrics`. Returning 0 here would render a confident zero on every
|
|
132
|
+
* category until the first mutation, which is Root Cause #72's lesson (a count
|
|
133
|
+
* that failed must never be indistinguishable from a count of nothing).
|
|
134
|
+
*/
|
|
135
|
+
export declare function liveTotalFor(doc: Pick<CategoryCountsDocument, "total" | "lots"> | null | undefined): number | undefined;
|
|
136
|
+
/** Filed directly here, lots included. The "N here" half of "N here, M below". */
|
|
137
|
+
export declare function ownTotalFor(doc: Pick<CategoryCountsDocument, "own" | "lots"> | null | undefined): number | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* How many sit under this row's DESCENDANTS and not directly on it — `total − own`.
|
|
140
|
+
*
|
|
141
|
+
* 🛑 DERIVED, never stored, and that is the point: a third stored counter would
|
|
142
|
+
* be a mirror of a subtraction, and a mirror drifts the moment one half is
|
|
143
|
+
* written without the other (Root Cause #42). It is also the function that
|
|
144
|
+
* makes the invariant un-missable — anyone reaching for "own plus children"
|
|
145
|
+
* finds this instead of writing `own + total`, which double-counts every item
|
|
146
|
+
* filed directly on the row.
|
|
147
|
+
*
|
|
148
|
+
* Clamped at 0. A negative value is real and means the counters drifted (an
|
|
149
|
+
* increment lost between the leaf write and an ancestor's), and surfacing
|
|
150
|
+
* "−3 in subcategories" to a visitor is worse than showing none — the nightly
|
|
151
|
+
* reconciler's `countsWritten` is where that drift is meant to be seen.
|
|
152
|
+
*/
|
|
153
|
+
export declare function descendantTotalFor(doc: Pick<CategoryCountsDocument, "own" | "total" | "lots"> | null | undefined): number | undefined;
|
|
154
|
+
/** The per-type descendant split, same derivation and the same clamp. */
|
|
155
|
+
export declare function descendantCountsFor(doc: Pick<CategoryCountsDocument, "own" | "total"> | null | undefined): ListingTypeCounts | undefined;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* G3b — LISTING COUNTS, maintained incrementally leaf→root.
|
|
3
|
+
*
|
|
4
|
+
* 🛑 WHY THIS IS A SIBLING COLLECTION AND NOT A FIELD ON `categories`.
|
|
5
|
+
*
|
|
6
|
+
* `handleCategoryWrite` calls `notifyRevalidate({ collection: "categories" })`
|
|
7
|
+
* as its FIRST statement, unconditionally, before any branch — so ANY write to
|
|
8
|
+
* a category document drops that category page's ISR entry. Under leaf→root,
|
|
9
|
+
* publishing one listing touches up to five ancestors, so it would drop five
|
|
10
|
+
* ISR entries per publish. This project was paused with **ISR writes at 3.1M
|
|
11
|
+
* against a 200K cap (15.5×)**, which settles the question.
|
|
12
|
+
*
|
|
13
|
+
* It also removes the Root Cause #92 hazard outright: a trigger that writes
|
|
14
|
+
* back to the collection it watches produced 1,017,548 invocations in 24 hours
|
|
15
|
+
* and a billing denial that blocked `firebase deploy`.
|
|
16
|
+
*
|
|
17
|
+
* 🛑 AND `metrics.*` ON `categories` STAYS — a constraint the plan did not
|
|
18
|
+
* record. Two Sieve SORTS order by `metrics.productCount` through Firestore
|
|
19
|
+
* (`CategoriesIndexListing`'s "Most Products" and
|
|
20
|
+
* `AdminSublistingCategoriesView`'s "Most listings"), and a sibling collection
|
|
21
|
+
* cannot serve an `orderBy` on the categories query. So:
|
|
22
|
+
*
|
|
23
|
+
* - `metrics.*` — written ONLY by the nightly `countersReconcile`, as
|
|
24
|
+
* today. The two sorts keep working at exactly today's
|
|
25
|
+
* accuracy, so there is no regression, and the ISR cost
|
|
26
|
+
* is unchanged from the status quo (one drop per
|
|
27
|
+
* category per night, already happening).
|
|
28
|
+
* - `categoryCounts` — the LIVE value, written per product mutation. Fires no
|
|
29
|
+
* revalidation, because nothing triggers on it.
|
|
30
|
+
*
|
|
31
|
+
* Readers prefer `categoryCounts` and fall back to `metrics`. That ordering is
|
|
32
|
+
* what makes the feature additive: a category with no counts document yet
|
|
33
|
+
* renders exactly as it does today rather than as zero.
|
|
34
|
+
*
|
|
35
|
+
* 🛑 HOW FRESH IT ACTUALLY IS, stated precisely rather than as "live".
|
|
36
|
+
*
|
|
37
|
+
* The count is of AVAILABLE rows — `isListingRowAvailable`, the same predicate
|
|
38
|
+
* `countersReconcile` and the listing query use. That predicate is partly
|
|
39
|
+
* TIME-dependent: `auction` is the one type with an inequality clause
|
|
40
|
+
* (`auctionEndDate`), so an auction becomes unavailable by the clock with no
|
|
41
|
+
* product write, and no incremental counter can observe that.
|
|
42
|
+
*
|
|
43
|
+
* In practice the window is minutes, not a day: `auctionSettlement` writes
|
|
44
|
+
* `isSold: true` when it settles, and that write re-evaluates the counter.
|
|
45
|
+
* Every other type's unavailability is write-driven (stock, `isSold`,
|
|
46
|
+
* `digitalCode.codesAvailable`, the prize-draw reveal status).
|
|
47
|
+
*
|
|
48
|
+
* So: instant for every write-driven change, and bounded by the settlement
|
|
49
|
+
* cadence for a just-ended auction. That is strictly better than today, where
|
|
50
|
+
* every change is up to 24h stale. The nightly reconciler stays as the
|
|
51
|
+
* authority and the audit — its `drifted` counter becomes a real signal that
|
|
52
|
+
* an increment was missed.
|
|
53
|
+
*/
|
|
54
|
+
export const CATEGORY_COUNTS_COLLECTION = "categoryCounts";
|
|
55
|
+
/** Sum a counts map — what a category page renders as "N listings". */
|
|
56
|
+
export function sumCounts(counts) {
|
|
57
|
+
if (!counts)
|
|
58
|
+
return 0;
|
|
59
|
+
let n = 0;
|
|
60
|
+
for (const v of Object.values(counts))
|
|
61
|
+
n += v ?? 0;
|
|
62
|
+
return n;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The display count for a category, preferring the live document.
|
|
66
|
+
*
|
|
67
|
+
* 🛑 `undefined` means "no counts document yet", NOT zero — so the caller falls
|
|
68
|
+
* back to `metrics`. Returning 0 here would render a confident zero on every
|
|
69
|
+
* category until the first mutation, which is Root Cause #72's lesson (a count
|
|
70
|
+
* that failed must never be indistinguishable from a count of nothing).
|
|
71
|
+
*/
|
|
72
|
+
export function liveTotalFor(doc) {
|
|
73
|
+
if (!doc)
|
|
74
|
+
return undefined;
|
|
75
|
+
return sumCounts(doc.total) + (doc.lots?.total ?? 0);
|
|
76
|
+
}
|
|
77
|
+
/** Filed directly here, lots included. The "N here" half of "N here, M below". */
|
|
78
|
+
export function ownTotalFor(doc) {
|
|
79
|
+
if (!doc)
|
|
80
|
+
return undefined;
|
|
81
|
+
return sumCounts(doc.own) + (doc.lots?.own ?? 0);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* How many sit under this row's DESCENDANTS and not directly on it — `total − own`.
|
|
85
|
+
*
|
|
86
|
+
* 🛑 DERIVED, never stored, and that is the point: a third stored counter would
|
|
87
|
+
* be a mirror of a subtraction, and a mirror drifts the moment one half is
|
|
88
|
+
* written without the other (Root Cause #42). It is also the function that
|
|
89
|
+
* makes the invariant un-missable — anyone reaching for "own plus children"
|
|
90
|
+
* finds this instead of writing `own + total`, which double-counts every item
|
|
91
|
+
* filed directly on the row.
|
|
92
|
+
*
|
|
93
|
+
* Clamped at 0. A negative value is real and means the counters drifted (an
|
|
94
|
+
* increment lost between the leaf write and an ancestor's), and surfacing
|
|
95
|
+
* "−3 in subcategories" to a visitor is worse than showing none — the nightly
|
|
96
|
+
* reconciler's `countsWritten` is where that drift is meant to be seen.
|
|
97
|
+
*/
|
|
98
|
+
export function descendantTotalFor(doc) {
|
|
99
|
+
if (!doc)
|
|
100
|
+
return undefined;
|
|
101
|
+
const total = liveTotalFor(doc) ?? 0;
|
|
102
|
+
const own = ownTotalFor(doc) ?? 0;
|
|
103
|
+
return Math.max(0, total - own);
|
|
104
|
+
}
|
|
105
|
+
/** The per-type descendant split, same derivation and the same clamp. */
|
|
106
|
+
export function descendantCountsFor(doc) {
|
|
107
|
+
if (!doc)
|
|
108
|
+
return undefined;
|
|
109
|
+
const out = {};
|
|
110
|
+
for (const k of Object.keys(doc.total ?? {})) {
|
|
111
|
+
const d = (doc.total[k] ?? 0) - (doc.own?.[k] ?? 0);
|
|
112
|
+
if (d > 0)
|
|
113
|
+
out[k] = d;
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
@@ -108,7 +108,6 @@ export interface CategoryDocument extends BaseDocument {
|
|
|
108
108
|
*/
|
|
109
109
|
subtreeSize: number;
|
|
110
110
|
metrics: CategoryDocumentMetrics;
|
|
111
|
-
viewCount?: number;
|
|
112
111
|
isFeatured: boolean;
|
|
113
112
|
featuredPriority?: number;
|
|
114
113
|
/** @deprecated Use categoryType === "brand". Will be removed once seed + admin form fully migrate. */
|
|
@@ -329,7 +328,6 @@ export declare const CATEGORY_FIELDS: {
|
|
|
329
328
|
readonly FEATURED_PRIORITY: "featuredPriority";
|
|
330
329
|
readonly SEO: "seo";
|
|
331
330
|
readonly DISPLAY: "display";
|
|
332
|
-
readonly VIEW_COUNT: "viewCount";
|
|
333
331
|
readonly IS_ACTIVE: "isActive";
|
|
334
332
|
readonly IS_SEARCHABLE: "isSearchable";
|
|
335
333
|
readonly SEARCH_TXT: "searchTxt";
|