@mohasinac/appkit 4.43.0 → 4.45.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/adapters.d.ts +47 -0
- package/dist/_internal/server/features/categories/adapters.js +235 -0
- 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/og.js +1 -1
- package/dist/_internal/server/features/checkout/actions.d.ts +50 -0
- package/dist/_internal/server/features/checkout/actions.js +343 -70
- package/dist/_internal/server/features/checkout/bundle-expansion.js +3 -3
- package/dist/_internal/server/features/checkout/expand-order-items.js +40 -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 +23 -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/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/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 +65 -26
- 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 +50 -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.d.ts +4 -2
- package/dist/_internal/server/functions/scheduled.js +65 -7
- package/dist/_internal/server/jobs/core/adminAnalytics.d.ts +0 -1
- package/dist/_internal/server/jobs/core/adminAnalytics.js +12 -4
- package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.d.ts +47 -0
- package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.js +468 -0
- 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 +18 -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/cleanupRtdbEvents.js +5 -5
- package/dist/_internal/server/jobs/core/countersReconcile.js +31 -15
- 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 +7 -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 +57 -3
- 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 +6 -6
- 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.d.ts +47 -0
- package/dist/_internal/server/jobs/core/priceIndexRollup.js +304 -0
- 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/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/{testerSandboxCleanup.d.ts → testDataCleanup.d.ts} +3 -3
- package/dist/_internal/server/jobs/core/{testerSandboxCleanup.js → testDataCleanup.js} +5 -5
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +1 -1
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +9 -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.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/analyticsAlertEvaluate.js +2 -0
- 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.d.ts +3 -1
- package/dist/_internal/server/jobs/handlers/index.js +54 -52
- 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.d.ts +5 -2
- package/dist/_internal/server/jobs/handlers/messages.js +5 -2
- 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.js +1 -1
- 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.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/priceIndexRollup.js +2 -0
- 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.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/testDataCleanup.js +2 -0
- 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 +43 -0
- package/dist/_internal/shared/checkout/lanes.js +1 -1
- package/dist/_internal/shared/checkout/order-math.d.ts +113 -3
- package/dist/_internal/shared/checkout/order-math.js +195 -8
- 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.d.ts +110 -0
- package/dist/_internal/shared/features/categories/price-guidance.js +136 -0
- 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 +4 -4
- 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 +221 -0
- package/dist/_internal/shared/features/shipping/protections.js +213 -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/site-settings/gst-registration.d.ts +90 -0
- package/dist/_internal/shared/features/site-settings/gst-registration.js +126 -0
- package/dist/_internal/shared/features/wishlist/errors.js +1 -1
- package/dist/_internal/shared/fees/calculator.d.ts +129 -0
- package/dist/_internal/shared/fees/calculator.js +155 -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.d.ts +0 -6
- 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.d.ts +0 -6
- package/dist/_internal/shared/listing-types/classified/config.js +5 -5
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +0 -6
- package/dist/_internal/shared/listing-types/digital-code/config.js +6 -6
- package/dist/_internal/shared/listing-types/live/config.d.ts +0 -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.d.ts +0 -6
- package/dist/_internal/shared/listing-types/standard/config.js +4 -4
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +0 -6
- 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/templating/placeholders.d.ts +70 -0
- package/dist/_internal/shared/templating/placeholders.js +73 -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 +6 -0
- package/dist/client.js +336 -331
- package/dist/constants/api-endpoints.d.ts +58 -0
- package/dist/constants/api-endpoints.js +31 -0
- package/dist/constants/cache-invalidation.js +1 -1
- package/dist/constants/field-names.d.ts +2 -0
- package/dist/constants/field-names.js +10 -0
- 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/copilot-log.repository.js +1 -1
- package/dist/core/hooks/useSiteSettings.js +2 -2
- package/dist/core/hooks/useSyncManager.js +3 -3
- package/dist/core/index.js +17 -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/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 +2 -2
- package/dist/features/admin/actions/admin-actions.js +18 -18
- 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 +274 -8
- 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 +21 -14
- package/dist/features/admin/components/AdminProductsView.js +93 -22
- 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 +15 -15
- 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 +36 -17
- 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.d.ts +10 -0
- package/dist/features/admin/components/AdminTaxCodeEditorView.js +160 -0
- package/dist/features/admin/components/AdminTaxCodesView.d.ts +13 -0
- package/dist/features/admin/components/AdminTaxCodesView.js +86 -0
- 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 +2 -2
- 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/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 +29 -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.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/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/firestore.d.ts +0 -1
- 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.d.ts +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 +26 -15
- 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.d.ts +45 -0
- package/dist/features/categories/api/[id]/description-template/route.js +252 -0
- package/dist/features/categories/api/[id]/route.js +4 -4
- package/dist/features/categories/api/route.js +160 -15
- package/dist/features/categories/columns/index.js +1 -1
- package/dist/features/categories/components/BrandDetailPageView.js +60 -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 +160 -27
- 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.d.ts +65 -0
- package/dist/features/categories/components/CategoryTemplatePicker.js +170 -0
- 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/constants/listing-categories.d.ts +17 -0
- package/dist/features/categories/constants/listing-categories.js +53 -0
- 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 +30 -4
- package/dist/features/categories/index.js +7 -7
- package/dist/features/categories/repository/categories.repository.d.ts +62 -11
- package/dist/features/categories/repository/categories.repository.js +183 -40
- package/dist/features/categories/repository/price-index.repository.d.ts +184 -0
- package/dist/features/categories/repository/price-index.repository.js +115 -0
- package/dist/features/categories/schemas/bundle-form.js +3 -3
- package/dist/features/categories/schemas/category-content.d.ts +206 -0
- package/dist/features/categories/schemas/category-content.js +28 -0
- package/dist/features/categories/schemas/firestore.d.ts +74 -5
- package/dist/features/categories/schemas/firestore.js +76 -5
- package/dist/features/categories/schemas/index.d.ts +1047 -0
- package/dist/features/categories/schemas/index.js +98 -2
- package/dist/features/categories/server.d.ts +1 -0
- package/dist/features/categories/server.js +11 -4
- package/dist/features/categories/types/index.d.ts +9 -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/copilot/components/AdminCopilotView.js +4 -4
- package/dist/features/copilot/components/index.js +1 -1
- package/dist/features/copilot/hooks/useCopilotChat.js +2 -2
- package/dist/features/copilot/hooks/useCopilotFeedback.js +2 -2
- package/dist/features/copilot/index.js +3 -3
- 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.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/firestore.d.ts +2 -2
- 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.d.ts +2 -1
- package/dist/features/faq/schemas/firestore.js +22 -9
- 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 +165 -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 +58 -0
- package/dist/features/orders/utils/order-splitter.js +2 -2
- 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.d.ts +0 -1
- package/dist/features/products/columns/index.js +7 -3
- 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.js +28 -28
- 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.d.ts +0 -9
- package/dist/features/products/components/ProductFilters.js +8 -8
- package/dist/features/products/components/ProductForm.d.ts +27 -1
- package/dist/features/products/components/ProductForm.js +41 -27
- 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.js +2 -2
- 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.d.ts +0 -6
- package/dist/features/products/constants/sieve.js +37 -4
- 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/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 +140 -1
- package/dist/features/products/repository/products.repository.js +616 -52
- package/dist/features/products/schemas/firestore.d.ts +91 -6
- package/dist/features/products/schemas/firestore.js +27 -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.d.ts +140 -2
- package/dist/features/products/schemas/product-features.js +62 -1
- 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 +15 -10
- package/dist/features/promotions/schemas/firestore.d.ts +44 -1
- package/dist/features/promotions/schemas/firestore.js +77 -3
- 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/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 +38 -23
- 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.d.ts +3 -2
- package/dist/features/seller/components/PrintCenterView.js +8 -7
- 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 +31 -21
- 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 +28 -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 +46 -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.d.ts +50 -2
- package/dist/features/seller/components/SellerProductShell.js +114 -22
- package/dist/features/seller/components/SellerProductsCards.js +5 -5
- package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +13 -1
- package/dist/features/seller/components/SellerProductsFilterDrawer.js +6 -6
- package/dist/features/seller/components/SellerProductsView.js +212 -33
- 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/seller/types/index.d.ts +17 -0
- package/dist/features/seller/utils/product-draft-mapping.d.ts +13 -0
- package/dist/features/seller/utils/product-draft-mapping.js +17 -0
- 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/constants/alert-metrics.d.ts +86 -0
- package/dist/features/store-extensions/constants/alert-metrics.js +142 -0
- 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/firestore.d.ts +19 -1
- 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 +117 -2
- 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.d.ts +55 -0
- package/dist/features/tax-codes/repository/tax-codes.repository.js +131 -0
- package/dist/features/tax-codes/schemas/firestore.d.ts +125 -0
- package/dist/features/tax-codes/schemas/firestore.js +82 -0
- package/dist/features/tax-codes/schemas/tax-code-form.d.ts +63 -0
- package/dist/features/tax-codes/schemas/tax-code-form.js +152 -0
- package/dist/features/tax-codes/schemas/tax-codes.validators.d.ts +107 -0
- package/dist/features/tax-codes/schemas/tax-codes.validators.js +85 -0
- 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.d.ts +0 -1
- package/dist/features/tester/actions/index.js +1 -2
- 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.d.ts +0 -4
- package/dist/features/tester/components/index.js +6 -8
- 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.d.ts +1 -20
- package/dist/features/tester/repository/tester-checklist-item.repository.js +4 -56
- 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.d.ts +0 -6
- 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__admin-detail-round-trips.js +3 -3
- package/dist/features/tester/seed-data/authored/admin__site-system.js +4 -5
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +2 -2
- package/dist/features/tester/seed-data/authored/index.js +118 -120
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -19
- 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 +12 -31
- 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 +41 -10
- package/dist/index.js +2047 -1964
- 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 +6 -4
- package/dist/next/routing/route-map.js +10 -2
- 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 +54 -0
- package/dist/providers/db-firebase/base.repository.js +119 -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 -1
- package/dist/repositories/index.js +55 -50
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/registry.d.ts +568 -62
- 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.d.ts +35 -0
- package/dist/seed/_helpers/brand-rows.js +576 -0
- package/dist/seed/_helpers/category-content.d.ts +39 -0
- package/dist/seed/_helpers/category-content.js +634 -0
- package/dist/seed/_helpers/category-forest.d.ts +2 -0
- package/dist/seed/_helpers/category-forest.js +585 -243
- package/dist/seed/_helpers/category-models.d.ts +5 -0
- package/dist/seed/_helpers/category-models.js +1364 -0
- package/dist/seed/_helpers/category-tree.js +17 -1
- package/dist/seed/_helpers/character-features.d.ts +10 -0
- package/dist/seed/_helpers/character-features.js +118 -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.d.ts +10 -0
- package/dist/seed/_helpers/search-txt-wrappers.js +12 -1
- package/dist/seed/blog-posts-seed-data.js +2 -2
- package/dist/seed/carousel-slides-seed-data.js +2 -2
- package/dist/seed/cart-seed-data.js +2 -2
- package/dist/seed/categories-seed-data.js +151 -173
- 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 +2 -2
- package/dist/seed/index.d.ts +2 -0
- package/dist/seed/index.js +75 -67
- package/dist/seed/manifest.d.ts +1 -1
- package/dist/seed/manifest.js +47 -42
- 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/payouts-seed-data.js +2 -2
- package/dist/seed/product-features-seed-data.d.ts +1 -8
- package/dist/seed/product-features-seed-data.js +358 -154
- package/dist/seed/products-art-seed-data.js +20 -8
- package/dist/seed/products-auctions-seed-data.js +10 -10
- package/dist/seed/products-classifieds-seed-data.js +22 -12
- package/dist/seed/products-digital-codes-seed-data.js +17 -17
- package/dist/seed/products-live-items-seed-data.js +5 -5
- package/dist/seed/products-preorders-seed-data.js +12 -12
- package/dist/seed/products-prize-draws-seed-data.js +30 -13
- package/dist/seed/products-standard-seed-data.js +14 -64
- package/dist/seed/products-stickers-seed-data.js +10 -10
- 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 +200 -0
- package/dist/seed/seed-purpose.js +265 -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 +33 -3
- package/dist/seed/store-addresses-seed-data.js +1 -1
- package/dist/seed/store-extensions-seed-data.js +11 -5
- package/dist/seed/stores-seed-data.js +3 -3
- package/dist/seed/support-tickets-seed-data.js +2 -2
- package/dist/seed/tax-codes-seed-data.d.ts +34 -0
- package/dist/seed/tax-codes-seed-data.js +100 -0
- package/dist/seed/test-data-ttl.d.ts +29 -0
- package/dist/seed/test-data-ttl.js +31 -0
- 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 +62 -0
- package/dist/seo/json-ld.js +78 -2
- package/dist/seo/metadata.js +1 -1
- package/dist/server-entry.d.ts +1 -1
- package/dist/server-entry.js +83 -78
- package/dist/server.d.ts +14 -3
- package/dist/server.js +563 -544
- package/dist/styles.css +807 -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.d.ts +14 -0
- package/dist/ui/components/PaginatedSelect.js +0 -0
- package/dist/ui/components/PaginatedSelect.style.css +40 -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.js +2 -2
- 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 +91 -0
- package/dist/utils/physical-location.js +134 -0
- package/dist/utils/safe-fire-forget.js +2 -2
- package/dist/utils/search-txt-builders.d.ts +20 -0
- package/dist/utils/search-txt-builders.js +97 -1
- package/dist/utils/search-txt-query.d.ts +54 -6
- package/dist/utils/search-txt-query.js +79 -11
- 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/vendor/react-advanced-cropper.css +406 -0
- package/package.json +80 -4
- package/scripts/copy-assets.mjs +53 -1
- package/scripts/seed-cli.mjs +172 -8
- package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.d.ts +0 -2
- package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.js +0 -2
- package/dist/features/tester/actions/leaderboard-actions.d.ts +0 -3
- package/dist/features/tester/actions/leaderboard-actions.js +0 -5
- package/dist/features/tester/components/BugHunterLeaderboardView.d.ts +0 -23
- package/dist/features/tester/components/BugHunterLeaderboardView.js +0 -18
- package/dist/features/tester/components/TesterHubView.d.ts +0 -5
- package/dist/features/tester/components/TesterHubView.js +0 -110
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +0 -78
- package/dist/features/tester/seed-data/tester-ttl.d.ts +0 -4
- package/dist/features/tester/seed-data/tester-ttl.js +0 -6
|
@@ -1,19 +1,35 @@
|
|
|
1
|
-
import { normalizeError } from "../../../errors/normalize";
|
|
2
|
-
import { increment, serverTimestamp } from "../../../contracts/field-ops";
|
|
3
|
-
import { DatabaseError } from "../../../errors";
|
|
4
|
-
import { BaseRepository, prepareForFirestore, parseSieveDateValue, } from "../../../providers/db-firebase";
|
|
5
|
-
import { cacheManager } from "../../../core";
|
|
6
|
-
import { serverLogger } from "../../../monitoring";
|
|
7
|
-
import { generateUniqueId, slugify, generateBarcodeId } from "../../../utils";
|
|
8
|
-
import {
|
|
1
|
+
import { normalizeError } from "../../../errors/normalize.js";
|
|
2
|
+
import { increment, serverTimestamp } from "../../../contracts/field-ops.js";
|
|
3
|
+
import { DatabaseError } from "../../../errors/index.js";
|
|
4
|
+
import { BaseRepository, prepareForFirestore, parseSieveDateValue, } from "../../../providers/db-firebase/index.js";
|
|
5
|
+
import { cacheManager } from "../../../core/index.js";
|
|
6
|
+
import { serverLogger } from "../../../monitoring/index.js";
|
|
7
|
+
import { generateUniqueId, slugify, generateBarcodeId } from "../../../utils/index.js";
|
|
8
|
+
import { parseSearchTxtQuery } from "../../../utils/search-txt.js";
|
|
9
|
+
// The shared search plan/refine the other eleven migrated collections use.
|
|
10
|
+
// `planSearchTxt` carries the `empty` guard that keeps a punctuation-only query
|
|
11
|
+
// from returning the whole catalogue.
|
|
12
|
+
import { planSearchTxt, SEARCH_REFINE_WINDOW, refineSearchTxt, emptySearchResult, } from "../../../utils/search-txt-query.js";
|
|
9
13
|
// One definition of "which fields feed searchTxt", shared with the seed
|
|
10
14
|
// wrapper. Three copies existed and two were missing the same three fields.
|
|
11
|
-
import { buildProductSearchTxt } from "../../../utils/search-txt-builders";
|
|
12
|
-
import { PRODUCT_COLLECTION, ProductStatusValues } from "../schemas";
|
|
13
|
-
// Collection
|
|
14
|
-
// deriveTaxonomy()'s header for why
|
|
15
|
-
|
|
16
|
-
import
|
|
15
|
+
import { buildProductSearchTxt } from "../../../utils/search-txt-builders.js";
|
|
16
|
+
import { PRODUCT_COLLECTION, ProductStatusValues } from "../schemas/index.js";
|
|
17
|
+
// Collection NAMES only — deliberately not `categoriesRepository` or
|
|
18
|
+
// `taxCodesRepository`. See deriveTaxonomy()'s header for why these are raw
|
|
19
|
+
// reads: no repository in this codebase imports another feature's, because of
|
|
20
|
+
// the Turbopack import-chain trap (Root Cause #6/#18).
|
|
21
|
+
import { CATEGORIES_COLLECTION } from "../../categories/schemas/firestore.js";
|
|
22
|
+
import { TAX_CODES_COLLECTION } from "../../tax-codes/schemas/firestore.js";
|
|
23
|
+
// Collection id only, never the stores repository — no repository in this
|
|
24
|
+
// codebase imports another feature's (the Turbopack import-chain trap).
|
|
25
|
+
import { STORE_COLLECTION } from "../../stores/schemas/firestore.js";
|
|
26
|
+
// Pure money math — no Firestore, no server-only imports.
|
|
27
|
+
import { DEFAULT_GST_RATE, grossFromTaxable } from "../../../_internal/shared/fees/calculator.js";
|
|
28
|
+
import { MAX_FEATURES_PER_PRODUCT } from "../schemas/product-features.js";
|
|
29
|
+
// The ONE `{{placeholder}}` implementation, promoted out of the FAQ schema in
|
|
30
|
+
// B3. A second regex here would be Root Cause #75's shape.
|
|
31
|
+
import { interpolate } from "../../../_internal/shared/templating/placeholders.js";
|
|
32
|
+
import { PRODUCT_FIELDS } from "../../../constants/field-names.js";
|
|
17
33
|
/**
|
|
18
34
|
* Canonical listing-kind tokens used in `listingType`. Note: the public Sieve
|
|
19
35
|
* alias accepts the legacy "preorder" / "product" spelling; we normalise to
|
|
@@ -52,6 +68,113 @@ function buildListingKindClause(kind, inverted) {
|
|
|
52
68
|
const op = inverted ? "!=" : "==";
|
|
53
69
|
return `${PRODUCT_FIELDS.LISTING_TYPE}${op}${canonical}`;
|
|
54
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Fill an SEO template's slots from what the write actually carries.
|
|
73
|
+
*
|
|
74
|
+
* 🛑 A SERVER-SIDE subset on purpose, and smaller than the picker's.
|
|
75
|
+
*
|
|
76
|
+
* The seller form's template picker resolves nine slots because it has the
|
|
77
|
+
* whole draft in hand — the condition LABEL, the category path, the tier-1
|
|
78
|
+
* series, the tier-2 system. This runs inside a repository write with only the
|
|
79
|
+
* input and what `deriveTaxonomy` has just derived, and fetching more to fill
|
|
80
|
+
* an SEO title would spend a round trip on a field a seller can overwrite in
|
|
81
|
+
* one keystroke.
|
|
82
|
+
*
|
|
83
|
+
* So the slots it cannot fill resolve to EMPTY and the sentence closes around
|
|
84
|
+
* them, which `interpolate` guarantees — never the literal `{{series}}`. The
|
|
85
|
+
* templates in `category-content.ts` are written to read correctly with any
|
|
86
|
+
* slot missing for exactly this reason.
|
|
87
|
+
*
|
|
88
|
+
* 🛑 No `{{price}}` slot, here or anywhere: a price in free text is an
|
|
89
|
+
* ungated public price `<GatedPrice>` cannot wrap, and `audit-guest-price-leak`
|
|
90
|
+
* R2 blocks it.
|
|
91
|
+
*/
|
|
92
|
+
function interpolateDefaults(template, input, derived) {
|
|
93
|
+
const names = derived.categoryNames ?? input.categoryNames ?? [];
|
|
94
|
+
return interpolate(template, {
|
|
95
|
+
title: input.title,
|
|
96
|
+
brand: derived.brand ?? input.brand,
|
|
97
|
+
condition: input.condition,
|
|
98
|
+
// `categoryNames` is self-first / root-last, so [0] is the leaf and the
|
|
99
|
+
// path reads root-first the way a breadcrumb does.
|
|
100
|
+
category: names[0],
|
|
101
|
+
categoryPath: names.length ? [...names].reverse().join(" › ") : undefined,
|
|
102
|
+
series: names[names.length - 2],
|
|
103
|
+
siteName: "LetItRip",
|
|
104
|
+
}).text;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Keep `availableQuantity` in step when a seller edits `stockQuantity`.
|
|
108
|
+
*
|
|
109
|
+
* 🛑 THE BUG THIS CLOSES: A SELLER COULD NOT RESTOCK.
|
|
110
|
+
*
|
|
111
|
+
* There are two stock numbers. `stockQuantity` is seller-authored and is the
|
|
112
|
+
* only one any of the three product forms exposes. `availableQuantity` is
|
|
113
|
+
* system-owned, seeded from `stockQuantity` **once, at create**, and
|
|
114
|
+
* thereafter driven by checkout decrements and timeout restores.
|
|
115
|
+
*
|
|
116
|
+
* Nothing re-synced them. `updateProduct` is a bare spread, and grep for
|
|
117
|
+
* `availableQuantity` across `src/app/api/store/products/**` and
|
|
118
|
+
* `seller-actions.ts` returns ZERO. So: a product sells out
|
|
119
|
+
* (`availableQuantity: 0`), the seller edits `stockQuantity` 0 → 10, and the
|
|
120
|
+
* product STAYS UNBUYABLE — purchasability gates on `availableQuantity > 0`
|
|
121
|
+
* in three independent places (`service.ts`, the cart route, and the public
|
|
122
|
+
* list filter). The only field the seller can reach is the one that does not
|
|
123
|
+
* control availability.
|
|
124
|
+
*
|
|
125
|
+
* With 76–93% of competitor catalogues sold out, restock is the main
|
|
126
|
+
* lifecycle event, not an edge case.
|
|
127
|
+
*
|
|
128
|
+
* WHY A DELTA AND NOT `availableQuantity = stockQuantity`: the difference
|
|
129
|
+
* between the two IS the outstanding reservation — units held by placed-but-
|
|
130
|
+
* unpaid orders. Overwriting would hand those units back to the shelf and
|
|
131
|
+
* oversell them. So carry the reservation forward:
|
|
132
|
+
*
|
|
133
|
+
* reserved = prevStock - prevAvailable (clamped at 0)
|
|
134
|
+
* available = nextStock - reserved (clamped at 0)
|
|
135
|
+
*
|
|
136
|
+
* Examples: 10 stock / 10 available, edit to 12 → 12. 10 stock / 7 available
|
|
137
|
+
* (3 reserved), edit to 12 → 9. Sold out at 0/0, edit to 10 → 10.
|
|
138
|
+
*
|
|
139
|
+
* 🛑 Returns `{}` — not a value — whenever the write does not name
|
|
140
|
+
* `stockQuantity`, or names `availableQuantity` explicitly. The second case
|
|
141
|
+
* is what keeps the checkout decrement, the stock-restore job and
|
|
142
|
+
* `updateAvailableQuantity` authoritative: they write `availableQuantity`
|
|
143
|
+
* directly and must never have it recomputed from a stale `stockQuantity`
|
|
144
|
+
* underneath them.
|
|
145
|
+
*
|
|
146
|
+
* 🛑 EXPORTED, and not merely for tidiness. A BULK stock edit cannot go
|
|
147
|
+
* through `update` — that is 50 sequential round trips, and Rule #6 budgets a
|
|
148
|
+
* request at ~3 — so it writes through `batchUpdateEach`. But the delta is
|
|
149
|
+
* PER DOCUMENT (each product carries its own reservation), which means a bulk
|
|
150
|
+
* route has to apply this rule itself. Re-deriving it there is Root Cause
|
|
151
|
+
* #75's shape on the one field whose whole history is that nothing re-synced
|
|
152
|
+
* it. So the rule is exported and the bulk route calls THIS.
|
|
153
|
+
*
|
|
154
|
+
* 🛑 It cannot become a `BaseRepository` write hook, which was the first
|
|
155
|
+
* thing I tried. A hook receives `{...doc, ...patch}`, where `stockQuantity`
|
|
156
|
+
* is already the NEXT value — so `prevStock` is gone and `reserved` is
|
|
157
|
+
* uncomputable. The rule genuinely needs both documents.
|
|
158
|
+
*/
|
|
159
|
+
export function resolveStockResync(current, data) {
|
|
160
|
+
if (!current)
|
|
161
|
+
return {};
|
|
162
|
+
if (!("stockQuantity" in data))
|
|
163
|
+
return {};
|
|
164
|
+
// An explicit availableQuantity write wins — see the 🛑 above.
|
|
165
|
+
if ("availableQuantity" in data)
|
|
166
|
+
return {};
|
|
167
|
+
const nextStock = data.stockQuantity;
|
|
168
|
+
if (typeof nextStock !== "number" || !Number.isFinite(nextStock))
|
|
169
|
+
return {};
|
|
170
|
+
const prevStock = typeof current.stockQuantity === "number" ? current.stockQuantity : 0;
|
|
171
|
+
const prevAvailable = typeof current.availableQuantity === "number" ? current.availableQuantity : prevStock;
|
|
172
|
+
const reserved = Math.max(0, prevStock - prevAvailable);
|
|
173
|
+
const nextAvailable = Math.max(0, nextStock - reserved);
|
|
174
|
+
if (nextAvailable === prevAvailable)
|
|
175
|
+
return {};
|
|
176
|
+
return { availableQuantity: nextAvailable };
|
|
177
|
+
}
|
|
55
178
|
export class ProductRepository extends BaseRepository {
|
|
56
179
|
constructor() {
|
|
57
180
|
super(PRODUCT_COLLECTION);
|
|
@@ -127,7 +250,21 @@ export class ProductRepository extends BaseRepository {
|
|
|
127
250
|
* feature's repository, and the reason is the Turbopack import-chain trap
|
|
128
251
|
* (Root Cause #6/#18) — a raw collection read has neither problem.
|
|
129
252
|
*/
|
|
130
|
-
async deriveTaxonomy(input
|
|
253
|
+
async deriveTaxonomy(input,
|
|
254
|
+
/**
|
|
255
|
+
* Whether this is the product's FIRST write.
|
|
256
|
+
*
|
|
257
|
+
* 🛑 Load-bearing for one field — see `applyCategoryDefaults`' features
|
|
258
|
+
* block. Inheriting a merge-shaped default on every save makes a seller's
|
|
259
|
+
* REMOVAL un-stickable: they untick an inherited feature, the next save
|
|
260
|
+
* that touches the category silently puts it back, and nothing reports it.
|
|
261
|
+
* Merge is right for create and wrong for update.
|
|
262
|
+
*
|
|
263
|
+
* Defaults to `false`, which is the safe direction: the worst a missed
|
|
264
|
+
* `true` can do is skip an inheritance the seller can tick themselves,
|
|
265
|
+
* whereas a wrongly-passed `true` resurrects a value they deleted.
|
|
266
|
+
*/
|
|
267
|
+
isCreate = false) {
|
|
131
268
|
const out = {};
|
|
132
269
|
const cats = this.db.collection(CATEGORIES_COLLECTION);
|
|
133
270
|
/*
|
|
@@ -206,8 +343,354 @@ export class ProductRepository extends BaseRepository {
|
|
|
206
343
|
out.brand = brand.name;
|
|
207
344
|
}
|
|
208
345
|
}
|
|
346
|
+
if (catSnap?.exists) {
|
|
347
|
+
await this.applyCategoryDefaults(input, out, catSnap, isCreate);
|
|
348
|
+
}
|
|
349
|
+
await this.applyInclusivePricing(input, out);
|
|
209
350
|
return out;
|
|
210
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* Resolve the GST rate floor, and gross up an ex-tax price if the seller
|
|
354
|
+
* authors that way.
|
|
355
|
+
*
|
|
356
|
+
* ## The rate resolution order, in full
|
|
357
|
+
*
|
|
358
|
+
* 1. the product's own `gstRate`, if a human set one — including `0`, a
|
|
359
|
+
* deliberate exemption;
|
|
360
|
+
* 2. the CATEGORY's rate via `taxCodeId` → `taxCodes`, applied just above
|
|
361
|
+
* by `applyCategoryDefaults`. **This is the mechanism**, and the ~330-node
|
|
362
|
+
* forest carries a tax code on every listing branch, so it answers for
|
|
363
|
+
* effectively the whole catalogue;
|
|
364
|
+
* 3. `DEFAULT_GST_RATE` — a floor, warned about, never a feature.
|
|
365
|
+
*
|
|
366
|
+
* 🛑 Step 3 fires only when steps 1 and 2 both came up empty, which means
|
|
367
|
+
* the category has no tax code — and THAT is the defect to fix. The measure
|
|
368
|
+
* of success is that this warning never appears. It exists because the
|
|
369
|
+
* alternative fails asymmetrically: with prices tax-inclusive, treating an
|
|
370
|
+
* unrated item as 0% hands the seller the full amount and leaves us owing
|
|
371
|
+
* tax on money already paid out, which is C0's bug in miniature.
|
|
372
|
+
*
|
|
373
|
+
* ## The gross-up
|
|
374
|
+
*
|
|
375
|
+
* A store with `pricesIncludeGst: false` types EX-TAX prices, so the typed
|
|
376
|
+
* number is converted ONCE here and stored tax-inclusive like every other
|
|
377
|
+
* price. No money path branches on the flag; see `taxableFromInclusive`.
|
|
378
|
+
*
|
|
379
|
+
* Gated on the write actually carrying a price, so a stock decrement or a
|
|
380
|
+
* status flip pays nothing for this — the same discipline `update` already
|
|
381
|
+
* applies to the taxonomy derivation itself.
|
|
382
|
+
*/
|
|
383
|
+
async applyInclusivePricing(input, out) {
|
|
384
|
+
const rate = out.gstRate ?? input.gstRate;
|
|
385
|
+
if (rate == null) {
|
|
386
|
+
out.gstRate = DEFAULT_GST_RATE;
|
|
387
|
+
serverLogger.warn("[gst] no rate from the product or its category — applying DEFAULT_GST_RATE; the category is missing a taxCodeId", { category: input.category, defaultRate: DEFAULT_GST_RATE });
|
|
388
|
+
}
|
|
389
|
+
/*
|
|
390
|
+
* Only a write that sets a price can need converting. `input.price` is the
|
|
391
|
+
* merged current-document-plus-patch (see `update`), so an unrelated save
|
|
392
|
+
* would re-convert an already-converted price — which is why the guard is
|
|
393
|
+
* on the PATCH carrying a price, resolved by the callers below.
|
|
394
|
+
*/
|
|
395
|
+
if (input.price == null || !input.storeId)
|
|
396
|
+
return;
|
|
397
|
+
const storeSnap = await this.db
|
|
398
|
+
.collection(STORE_COLLECTION)
|
|
399
|
+
.doc(input.storeId)
|
|
400
|
+
.get();
|
|
401
|
+
const store = storeSnap.exists
|
|
402
|
+
? storeSnap.data()
|
|
403
|
+
: null;
|
|
404
|
+
// Absent means inclusive — the documented default, and the one that keeps
|
|
405
|
+
// every existing listing's price meaning exactly what it meant before.
|
|
406
|
+
if (store?.pricesIncludeGst !== false)
|
|
407
|
+
return;
|
|
408
|
+
const effectiveRate = out.gstRate ?? input.gstRate ?? DEFAULT_GST_RATE;
|
|
409
|
+
if (effectiveRate <= 0)
|
|
410
|
+
return; // an exempt item has nothing to gross up
|
|
411
|
+
out.price = grossFromTaxable(input.price, effectiveRate);
|
|
412
|
+
/*
|
|
413
|
+
* 🛑 `compareAtPrice` is deliberately NOT converted here, because it does
|
|
414
|
+
* not exist. `SellerProductShell`'s pricing section lists it among its
|
|
415
|
+
* `fields` and renders an input for it, but `ProductDocument` has no such
|
|
416
|
+
* property — so whatever a seller types there is stripped by the schema and
|
|
417
|
+
* never stored. A declared-but-unpersisted form field is its own defect
|
|
418
|
+
* (and a strike-through price is a money figure, so it would need the same
|
|
419
|
+
* gross-up the day it becomes real); logged rather than silently worked
|
|
420
|
+
* around, since converting a field that is discarded would be theatre.
|
|
421
|
+
*/
|
|
422
|
+
serverLogger.info("[gst] grossed up an ex-tax price for a pricesIncludeGst:false store", {
|
|
423
|
+
storeId: input.storeId,
|
|
424
|
+
rate: effectiveRate,
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Hand down what the category declares: the tax code, the spec rows, the
|
|
429
|
+
* in-the-box list, the inherited features and the SEO templates.
|
|
430
|
+
*
|
|
431
|
+
* ## 🛑 Why this is server-side and not a form default
|
|
432
|
+
*
|
|
433
|
+
* GST is tax CORRECTNESS. A client-side default is bypassable by all ~14
|
|
434
|
+
* write paths, and the defect this closes is recorded in our own source:
|
|
435
|
+
* *"0 of 40 live orders had a `gstAmount`, and the order page's Tax row had
|
|
436
|
+
* never rendered."* The rate has to be applied where every path funnels, and
|
|
437
|
+
* that is here.
|
|
438
|
+
*
|
|
439
|
+
* ## 🛑 The three behaviours are different, and the difference is the design
|
|
440
|
+
*
|
|
441
|
+
* WRITTEN tax, specifications, inTheBox, features — written when the
|
|
442
|
+
* product omits them.
|
|
443
|
+
* FILL-BLANK seo* — fills only an empty field, never overwrites a
|
|
444
|
+
* seller's own words.
|
|
445
|
+
* ADVISORY priceGuidance — NEVER touched here. It renders as a hint
|
|
446
|
+
* beside the price input and nothing else. Writing a suggested
|
|
447
|
+
* price onto `price` would be the platform setting a seller's
|
|
448
|
+
* price, which is not a default, it is a decision.
|
|
449
|
+
*
|
|
450
|
+
* ## 🛑 Resolution is PER FIELD across the ancestor chain
|
|
451
|
+
*
|
|
452
|
+
* Not "the nearest category that declares a `productDefaults` object wins".
|
|
453
|
+
* B5's named-model leaves carry `defaultFeatures` (the blader, the battle
|
|
454
|
+
* type, the spin) while the tax code, the spec rows and the price band live
|
|
455
|
+
* on the tier-3 LINE above them. An object-level "nearest wins" would hand a
|
|
456
|
+
* Dragoon G its blader and NO TAX CODE — silently deriving no GST, which is
|
|
457
|
+
* the quiet under-charging failure the whole tax-code indirection exists to
|
|
458
|
+
* prevent.
|
|
459
|
+
*
|
|
460
|
+
* ## Cost
|
|
461
|
+
*
|
|
462
|
+
* One `getAll` over at most four ancestors, fired only when the leaf leaves
|
|
463
|
+
* something unresolved, plus one read for the tax code. With the leaf+brand
|
|
464
|
+
* read that is three round trips worst case against Rule #6's ~3 budget —
|
|
465
|
+
* and `update` only re-derives when a write names a taxonomy field, so a
|
|
466
|
+
* stock decrement or a status flip pays none of it.
|
|
467
|
+
*/
|
|
468
|
+
async applyCategoryDefaults(input, out,
|
|
469
|
+
/*
|
|
470
|
+
* The real snapshot type, not a `{ data(): unknown }` shape. The first
|
|
471
|
+
* draft used the latter and `audit-unknown-leakage` was right to reject
|
|
472
|
+
* it: `unknown` at a parameter boundary is how a callee ends up casting,
|
|
473
|
+
* and the one cast here is already narrow and stated.
|
|
474
|
+
*/
|
|
475
|
+
catSnap, isCreate) {
|
|
476
|
+
const cats = this.db.collection(CATEGORIES_COLLECTION);
|
|
477
|
+
const leafData = catSnap.data();
|
|
478
|
+
const resolved = { ...(leafData.productDefaults ?? {}) };
|
|
479
|
+
/*
|
|
480
|
+
* Which fields still need an answer. `priceGuidance` is deliberately absent
|
|
481
|
+
* from this list — it is never applied, so walking ancestors to find one
|
|
482
|
+
* would be a round trip spent on a value this function will not use.
|
|
483
|
+
*/
|
|
484
|
+
const WANTED = [
|
|
485
|
+
"taxCodeId",
|
|
486
|
+
"specifications",
|
|
487
|
+
"defaultFeatures",
|
|
488
|
+
"defaultCondition",
|
|
489
|
+
"defaultAuthenticity",
|
|
490
|
+
"inTheBox",
|
|
491
|
+
"seoTitleTemplate",
|
|
492
|
+
"seoDescriptionTemplate",
|
|
493
|
+
"seoKeywords",
|
|
494
|
+
/*
|
|
495
|
+
* C5a — the PACKED parcel figures.
|
|
496
|
+
*
|
|
497
|
+
* 🛑 These are resolved up the ancestor chain like everything else here,
|
|
498
|
+
* and the field they fill is deliberately OPTIONAL on the product: the
|
|
499
|
+
* figure a carrier bills on is the packed box, not the item, and a bey
|
|
500
|
+
* is ~30 g against ~300 g boxed. A required product weight would
|
|
501
|
+
* therefore be an ITEM weight, systematically under-estimating every
|
|
502
|
+
* booking — and because the booking is capped at the amount collected
|
|
503
|
+
* from the buyer, systematic under-estimation means silently absorbing
|
|
504
|
+
* the difference.
|
|
505
|
+
*
|
|
506
|
+
* So the category's packed default drives the checkout ESTIMATE, this
|
|
507
|
+
* fills it when the leaf declares one, the product may refine it, and
|
|
508
|
+
* the real parcel figure is entered at shipment time.
|
|
509
|
+
*/
|
|
510
|
+
"weightG",
|
|
511
|
+
"dimensionsCm",
|
|
512
|
+
];
|
|
513
|
+
const isEmpty = (v) => v == null || (Array.isArray(v) && v.length === 0);
|
|
514
|
+
const unresolved = () => WANTED.filter((k) => isEmpty(resolved[k]));
|
|
515
|
+
if (unresolved().length > 0 && (leafData.parentIds ?? []).length > 0) {
|
|
516
|
+
/*
|
|
517
|
+
* `parentIds` is root-first / nearest-last, so walk it REVERSED —
|
|
518
|
+
* nearest ancestor first. One `getAll`, not a read per level: four
|
|
519
|
+
* sequential `doc().get()` calls would be four round trips and breach
|
|
520
|
+
* Rule #6 on a path that already spends two.
|
|
521
|
+
*/
|
|
522
|
+
const nearestFirst = [...(leafData.parentIds ?? [])].reverse();
|
|
523
|
+
const snaps = await this.db.getAll(...nearestFirst.map((id) => cats.doc(id)));
|
|
524
|
+
for (const snap of snaps) {
|
|
525
|
+
if (unresolved().length === 0)
|
|
526
|
+
break;
|
|
527
|
+
if (!snap.exists)
|
|
528
|
+
continue;
|
|
529
|
+
const d = snap.data()
|
|
530
|
+
.productDefaults;
|
|
531
|
+
if (!d)
|
|
532
|
+
continue;
|
|
533
|
+
for (const k of unresolved()) {
|
|
534
|
+
if (!isEmpty(d[k]))
|
|
535
|
+
resolved[k] = d[k];
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
// ── tax: resolve the REFERENCE to a SNAPSHOT on the product ────────────
|
|
540
|
+
/*
|
|
541
|
+
* 🛑 `input.gstRate == null`, NEVER `!input.gstRate`.
|
|
542
|
+
*
|
|
543
|
+
* Zero is a DELIBERATE exemption — `tax-exempt-0` exists for live plants
|
|
544
|
+
* and animals — and a falsy test would overwrite every one of them with
|
|
545
|
+
* the category's rate. The schema's own comment at `gstRate` says so.
|
|
546
|
+
*/
|
|
547
|
+
const needsRate = input.gstRate == null;
|
|
548
|
+
const needsHsn = !input.hsnCode;
|
|
549
|
+
if (resolved.taxCodeId && (needsRate || needsHsn)) {
|
|
550
|
+
const taxSnap = await this.db
|
|
551
|
+
.collection(TAX_CODES_COLLECTION)
|
|
552
|
+
.doc(resolved.taxCodeId)
|
|
553
|
+
.get();
|
|
554
|
+
const tax = taxSnap.exists
|
|
555
|
+
? taxSnap.data()
|
|
556
|
+
: null;
|
|
557
|
+
if (tax?.isActive) {
|
|
558
|
+
if (needsRate && tax.gstRate != null)
|
|
559
|
+
out.gstRate = tax.gstRate;
|
|
560
|
+
if (needsHsn && tax.hsnCode)
|
|
561
|
+
out.hsnCode = tax.hsnCode;
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
/*
|
|
565
|
+
* 🛑 A dangling or deactivated tax code must be LOUD, because its
|
|
566
|
+
* silent failure mode is under-charging.
|
|
567
|
+
*
|
|
568
|
+
* `findResolvable` answers null for both cases and the correct
|
|
569
|
+
* handling is "leave `gstRate` alone" — so every later listing under
|
|
570
|
+
* that category derives NO TAX and the order invoices zero. Nothing
|
|
571
|
+
* errors, the save succeeds, and the shortfall only surfaces in a
|
|
572
|
+
* filing. DELETE already refuses while a category references a code;
|
|
573
|
+
* this covers a code deactivated after the fact.
|
|
574
|
+
*/
|
|
575
|
+
serverLogger.warn("Category tax code does not resolve to an active taxCodes row", {
|
|
576
|
+
taxCodeId: resolved.taxCodeId,
|
|
577
|
+
productId: input.id,
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
// ── WRITTEN: only when the product omits them ──────────────────────────
|
|
582
|
+
if (resolved.specifications?.length && !input.specifications?.length) {
|
|
583
|
+
out.specifications = resolved.specifications.map((s) => ({ ...s }));
|
|
584
|
+
}
|
|
585
|
+
/*
|
|
586
|
+
* 🛑 `inTheBox` is deliberately NOT written to the product.
|
|
587
|
+
*
|
|
588
|
+
* `ProductDocument` has no such field, and the plan's suggestion —
|
|
589
|
+
* `out.features = d.inTheBox` — predates the vocabulary merge: `features`
|
|
590
|
+
* now holds feature IDS, so writing "Beyblade top, Manual (where
|
|
591
|
+
* supplied)" into it would put prose where `array-contains` expects
|
|
592
|
+
* `feature-nib`, breaking every facet on that product and tokenising
|
|
593
|
+
* "where" and "supplied" into its search index.
|
|
594
|
+
*
|
|
595
|
+
* It stays a CATEGORY-side value, read by the description-template
|
|
596
|
+
* endpoint (C2b) to fill the "What's in the box?" block the new-in-box
|
|
597
|
+
* body already renders. That is the only consumer it ever needed.
|
|
598
|
+
*/
|
|
599
|
+
if (resolved.defaultCondition && !input.condition) {
|
|
600
|
+
out.condition = resolved.defaultCondition;
|
|
601
|
+
}
|
|
602
|
+
if (resolved.defaultAuthenticity && !input.authenticity) {
|
|
603
|
+
out.authenticity = resolved.defaultAuthenticity;
|
|
604
|
+
}
|
|
605
|
+
/*
|
|
606
|
+
* C5a — fill-blank, never overwrite. A seller who weighed their own packed
|
|
607
|
+
* box has measured something the category only estimates.
|
|
608
|
+
*
|
|
609
|
+
* 🛑 `input.weightG == null`, not `!input.weightG`. A zero is nonsense for
|
|
610
|
+
* a parcel but it is an explicit value, and the falsy test would replace
|
|
611
|
+
* it with the category's figure on every save — the same distinction
|
|
612
|
+
* `gstRate` needs two blocks up, and for the same reason: "nobody said"
|
|
613
|
+
* and "somebody said zero" are different facts.
|
|
614
|
+
*/
|
|
615
|
+
if (resolved.weightG != null && input.weightG == null) {
|
|
616
|
+
out.weightG = resolved.weightG;
|
|
617
|
+
}
|
|
618
|
+
if (resolved.dimensionsCm && !input.dimensionsCm) {
|
|
619
|
+
out.dimensionsCm = { ...resolved.dimensionsCm };
|
|
620
|
+
}
|
|
621
|
+
/*
|
|
622
|
+
* Features MERGE rather than replace — the field's own contract, and the
|
|
623
|
+
* reason the blader linkage works: a seller who ticks "Japan Import" keeps
|
|
624
|
+
* it and also gets `feature-blader-tyson-granger` from the Dragoon G leaf.
|
|
625
|
+
*
|
|
626
|
+
* 🛑 BUT ONLY ON CREATE, OR WHEN THE PRODUCT CARRIES NONE. This was a real
|
|
627
|
+
* defect in C2a as shipped.
|
|
628
|
+
*
|
|
629
|
+
* `update` calls `deriveTaxonomy({ ...current, ...data })`, so `input`
|
|
630
|
+
* holds the stored document merged with the patch — which is exactly what
|
|
631
|
+
* makes every other guard here correct, because a seller's edited
|
|
632
|
+
* `specifications` or `condition` is present and the `!input.X` test is
|
|
633
|
+
* false. Features were the one field that did not test presence: they
|
|
634
|
+
* merged unconditionally. So a seller who UNTICKED an inherited feature —
|
|
635
|
+
* removing `feature-type-attack` because their build is actually defense —
|
|
636
|
+
* had it silently re-added by the next save that touched the category or
|
|
637
|
+
* the brand. The removal could not stick and nothing reported it.
|
|
638
|
+
*
|
|
639
|
+
* On update the seller's array IS the answer. They have had the chance to
|
|
640
|
+
* curate it, and a removal is a decision. An update that carries no
|
|
641
|
+
* features at all still inherits, so a listing created before its category
|
|
642
|
+
* had defaults picks them up the first time it is edited.
|
|
643
|
+
*
|
|
644
|
+
* Capped at MAX_FEATURES_PER_PRODUCT because `features[]` feeds
|
|
645
|
+
* `buildProductSearchTxt`, which truncates at 600 tokens SILENTLY — an
|
|
646
|
+
* unbounded list would evict real title tokens nobody chose to drop. The
|
|
647
|
+
* product's OWN features are kept first so it is always the inherited ones
|
|
648
|
+
* that fall off the end.
|
|
649
|
+
*/
|
|
650
|
+
const mayInheritFeatures = isCreate || !input.features?.length;
|
|
651
|
+
if (resolved.defaultFeatures?.length && mayInheritFeatures) {
|
|
652
|
+
const merged = [...(input.features ?? [])];
|
|
653
|
+
for (const f of resolved.defaultFeatures) {
|
|
654
|
+
if (!merged.includes(f))
|
|
655
|
+
merged.push(f);
|
|
656
|
+
}
|
|
657
|
+
if (merged.length > MAX_FEATURES_PER_PRODUCT) {
|
|
658
|
+
serverLogger.warn("Category default features exceeded the per-product cap", {
|
|
659
|
+
productId: input.id,
|
|
660
|
+
kept: MAX_FEATURES_PER_PRODUCT,
|
|
661
|
+
dropped: merged.length - MAX_FEATURES_PER_PRODUCT,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
out.features = merged.slice(0, MAX_FEATURES_PER_PRODUCT);
|
|
665
|
+
}
|
|
666
|
+
// ── FILL-BLANK: a template never overwrites what a seller wrote ─────────
|
|
667
|
+
const title = input.title ?? "";
|
|
668
|
+
if (resolved.seoTitleTemplate && !input.seoTitle && title) {
|
|
669
|
+
out.seoTitle = interpolateDefaults(resolved.seoTitleTemplate, input, out);
|
|
670
|
+
}
|
|
671
|
+
if (resolved.seoDescriptionTemplate && !input.seoDescription && title) {
|
|
672
|
+
out.seoDescription = interpolateDefaults(resolved.seoDescriptionTemplate, input, out);
|
|
673
|
+
}
|
|
674
|
+
/*
|
|
675
|
+
* 🛑 Same create-only gate as features, and for the same reason — plus
|
|
676
|
+
* this one also contradicted the stated contract three lines above it.
|
|
677
|
+
* "FILL-BLANK: seo* fills only an empty field, never overwrites a
|
|
678
|
+
* seller's own words" was true of `seoTitle` and `seoDescription` and
|
|
679
|
+
* false of `seoKeywords`, which merged on every save. A seller who
|
|
680
|
+
* deleted an inherited keyword got it back.
|
|
681
|
+
*
|
|
682
|
+
* Lower stakes than features — nobody watches their keyword list the way
|
|
683
|
+
* they watch a type chip — which is precisely why it would have gone
|
|
684
|
+
* unnoticed indefinitely.
|
|
685
|
+
*/
|
|
686
|
+
if (resolved.seoKeywords?.length && (isCreate || !input.seoKeywords?.length)) {
|
|
687
|
+
const merged = [...(input.seoKeywords ?? [])];
|
|
688
|
+
for (const k of resolved.seoKeywords)
|
|
689
|
+
if (!merged.includes(k))
|
|
690
|
+
merged.push(k);
|
|
691
|
+
out.seoKeywords = merged;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
211
694
|
async update(id, data) {
|
|
212
695
|
this.cacheInvalidateForId(id);
|
|
213
696
|
const current = await super.findById(id);
|
|
@@ -221,10 +704,12 @@ export class ProductRepository extends BaseRepository {
|
|
|
221
704
|
const derived = touchesTaxonomy
|
|
222
705
|
? await this.deriveTaxonomy({ ...current, ...data })
|
|
223
706
|
: {};
|
|
224
|
-
const
|
|
707
|
+
const stock = resolveStockResync(current, data);
|
|
708
|
+
const merged = { ...current, ...data, ...derived, ...stock };
|
|
225
709
|
const updated = await super.update(id, {
|
|
226
710
|
...data,
|
|
227
711
|
...derived,
|
|
712
|
+
...stock,
|
|
228
713
|
searchTxt: buildProductSearchTxt(merged),
|
|
229
714
|
});
|
|
230
715
|
this.cacheSet(updated);
|
|
@@ -248,7 +733,7 @@ export class ProductRepository extends BaseRepository {
|
|
|
248
733
|
// what makes a UI-created product reachable from its own category page at
|
|
249
734
|
// all. A seed row already carrying the correct chain derives to the same
|
|
250
735
|
// value, so this is a no-op for every existing fixture.
|
|
251
|
-
const derived = await this.deriveTaxonomy(input);
|
|
736
|
+
const derived = await this.deriveTaxonomy(input, true);
|
|
252
737
|
const withTaxonomy = { ...input, ...derived };
|
|
253
738
|
const productData = {
|
|
254
739
|
...withTaxonomy,
|
|
@@ -528,10 +1013,69 @@ export class ProductRepository extends BaseRepository {
|
|
|
528
1013
|
return baseQuery;
|
|
529
1014
|
}
|
|
530
1015
|
async list(model, opts) {
|
|
531
|
-
|
|
1016
|
+
/*
|
|
1017
|
+
* 🛑 THE EMPTY GUARD — a non-blank query that yields NO usable token must
|
|
1018
|
+
* return nothing, not everything.
|
|
1019
|
+
*
|
|
1020
|
+
* `parseSearchTxtQuery` normalises away punctuation, so `"!!!"`, `"—"`,
|
|
1021
|
+
* `"???"` and `"@#$"` all reduce to `[]`. `buildScopedQuery` then takes its
|
|
1022
|
+
* `searchTxt.length > 0` branch as FALSE and emits **no clause at all**, so
|
|
1023
|
+
* the query falls back to the caller's other filters — on the public
|
|
1024
|
+
* listing that is `status==published` — and **the entire published
|
|
1025
|
+
* catalogue is returned as search results.**
|
|
1026
|
+
*
|
|
1027
|
+
* `products` was the only one of the twelve MIGRATED collections still
|
|
1028
|
+
* hand-rolling this. The other eleven go through `planSearchTxt`, whose
|
|
1029
|
+
* whole reason for existing is this guard (see the header of
|
|
1030
|
+
* `utils/search-txt-query.ts`); adopting it here closes the gap rather
|
|
1031
|
+
* than adding a twelfth private copy of the rule.
|
|
1032
|
+
*
|
|
1033
|
+
* `planSearchTxt` is built on the same `parseSearchTxtQuery` this method
|
|
1034
|
+
* already called, and `plan.head`/`plan.rest` are exactly the previous
|
|
1035
|
+
* `searchTxt[0]`/`.slice(1)` — so apart from the guard this is behaviour-
|
|
1036
|
+
* identical, which is what makes it safe for a path four executors share.
|
|
1037
|
+
*/
|
|
1038
|
+
const plan = planSearchTxt(opts?.search);
|
|
1039
|
+
if (plan.empty)
|
|
1040
|
+
return emptySearchResult();
|
|
1041
|
+
/*
|
|
1042
|
+
* ── D2 Fix 2: a MULTI-TERM search over-fetches a window ────────────────
|
|
1043
|
+
*
|
|
1044
|
+
* 🛑 The bug: `refineSearchTxt` used to filter the already-paginated page,
|
|
1045
|
+
* so a two-word search could only ever return matches that happened to fall
|
|
1046
|
+
* inside one page window — rows 51+ matching both terms were unreachable,
|
|
1047
|
+
* and `hasMore: false` asserted there was no page 2. A search returning 7
|
|
1048
|
+
* of 40 real matches reported "7 results" and disabled Next, which reads as
|
|
1049
|
+
* a working search.
|
|
1050
|
+
*
|
|
1051
|
+
* So for a multi-term query the FETCH asks for a bounded window and the
|
|
1052
|
+
* refine slices the requested page out of it. A single-term query is
|
|
1053
|
+
* untouched: its one `array-contains` clause paginates exactly, there is
|
|
1054
|
+
* nothing to refine, and over-fetching would be pure cost.
|
|
1055
|
+
*
|
|
1056
|
+
* 🛑 Bounded, not unbounded (Rule #6): one read of at most
|
|
1057
|
+
* `SEARCH_REFINE_WINDOW`, and when that saturates the result carries
|
|
1058
|
+
* `truncated` so the total renders as a floor rather than a false total.
|
|
1059
|
+
*/
|
|
1060
|
+
const isMultiTerm = plan.rest.length > 0;
|
|
1061
|
+
const requestedPage = Math.max(1, Number(model?.page ?? 1) || 1);
|
|
1062
|
+
const requestedPageSize = Math.max(1, Number(model?.pageSize ?? 20) || 20);
|
|
1063
|
+
const result = await this.sieveQuery(
|
|
1064
|
+
/*
|
|
1065
|
+
* The window is requested through the MODEL, not a new `SieveOptions`
|
|
1066
|
+
* field — `sieveQuery` already derives its page from `model.page` /
|
|
1067
|
+
* `model.pageSize`, so overriding them needs no API change and no second
|
|
1068
|
+
* way to express a page size.
|
|
1069
|
+
*/
|
|
1070
|
+
isMultiTerm ? { ...model, page: 1, pageSize: SEARCH_REFINE_WINDOW } : model, ProductRepository.SIEVE_FIELDS, {
|
|
532
1071
|
baseQuery: this.buildScopedQuery(opts),
|
|
533
1072
|
defaultPageSize: 20,
|
|
534
|
-
|
|
1073
|
+
/*
|
|
1074
|
+
* 🛑 `maxPageSize` has to rise with the window or Sieve clamps the
|
|
1075
|
+
* request back to 100 — and the window would silently be a page again,
|
|
1076
|
+
* which is the original bug with a larger constant.
|
|
1077
|
+
*/
|
|
1078
|
+
maxPageSize: isMultiTerm ? SEARCH_REFINE_WINDOW : 100,
|
|
535
1079
|
aliases: ProductRepository.FILTER_ALIASES,
|
|
536
1080
|
});
|
|
537
1081
|
// Only the most selective term became the `array-contains` clause, because
|
|
@@ -540,24 +1084,21 @@ export class ProductRepository extends BaseRepository {
|
|
|
540
1084
|
// nothing actually refined them — so "red dranzer" returned everything
|
|
541
1085
|
// matching "dranzer" and the second word did nothing at all.
|
|
542
1086
|
//
|
|
543
|
-
//
|
|
544
|
-
//
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
totalPages: items.length === 0 ? 0 : 1,
|
|
559
|
-
hasMore: false,
|
|
560
|
-
};
|
|
1087
|
+
// `refineSearchTxt` is that AND-refine, shared with the other eleven
|
|
1088
|
+
// migrated collections. It also owns the `total`-becomes-a-FLOOR
|
|
1089
|
+
// bookkeeping: once rows are dropped after the page was cut, `total` counts
|
|
1090
|
+
// this page only. That is the known post-pagination-filter debt, not a new
|
|
1091
|
+
// invention — reporting the pre-filter total would promise pages that
|
|
1092
|
+
// render empty.
|
|
1093
|
+
return refineSearchTxt(result, plan.rest, isMultiTerm
|
|
1094
|
+
? {
|
|
1095
|
+
page: requestedPage,
|
|
1096
|
+
pageSize: requestedPageSize,
|
|
1097
|
+
// Saturated means more may exist beyond the window, so `total` is a
|
|
1098
|
+
// FLOOR and `truncated` says so.
|
|
1099
|
+
windowSaturated: (result.items?.length ?? 0) >= SEARCH_REFINE_WINDOW,
|
|
1100
|
+
}
|
|
1101
|
+
: undefined);
|
|
561
1102
|
}
|
|
562
1103
|
/**
|
|
563
1104
|
* How many products of each listing type exist within a scope — the numbers
|
|
@@ -577,21 +1118,21 @@ export class ProductRepository extends BaseRepository {
|
|
|
577
1118
|
aliases: ProductRepository.FILTER_ALIASES,
|
|
578
1119
|
});
|
|
579
1120
|
}
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
1121
|
+
/*
|
|
1122
|
+
* 🛑 `incrementViewCount` DELETED 2026-10-10 — zero callers since
|
|
1123
|
+
* 2026-08-31.
|
|
1124
|
+
*
|
|
1125
|
+
* It was removed from the product-detail render path then, for two good
|
|
1126
|
+
* reasons recorded in `_internal/server/features/products/data.ts`: it was a
|
|
1127
|
+
* Firestore WRITE on every render (Rule #6), and it double-counted against
|
|
1128
|
+
* `pageViews`, which is now the single counter. The method itself was left
|
|
1129
|
+
* behind, so `viewCount` has had a writer in the codebase and none in
|
|
1130
|
+
* practice ever since — which is how a "Most Viewed" sort and a "0 views"
|
|
1131
|
+
* column both shipped against a field no document has.
|
|
1132
|
+
*
|
|
1133
|
+
* Keeping a writer nobody calls is what makes the dead field look alive.
|
|
1134
|
+
* `pageViews` is the counter; roll it up rather than reviving this.
|
|
1135
|
+
*/
|
|
595
1136
|
/**
|
|
596
1137
|
* Cloud Functions: find published auctions whose end date has already passed.
|
|
597
1138
|
* Used by the auction settlement job to finalize expired auctions.
|
|
@@ -695,6 +1236,29 @@ ProductRepository.SIEVE_FIELDS = {
|
|
|
695
1236
|
isSold: { canFilter: true, canSort: true },
|
|
696
1237
|
isPartOfBundle: { canFilter: true, canSort: false },
|
|
697
1238
|
isTestData: { canFilter: true, canSort: false },
|
|
1239
|
+
/*
|
|
1240
|
+
* The warehouse location — C4.
|
|
1241
|
+
*
|
|
1242
|
+
* 🛑 `physicalLocation` was absent from this config entirely, so a filter
|
|
1243
|
+
* on it was DROPPED SILENTLY: `sieve.ts` sets `throwExceptions: false`, so
|
|
1244
|
+
* `findField()` returning undefined removes the clause rather than
|
|
1245
|
+
* raising. A seller could set a location and then filter by it to no
|
|
1246
|
+
* effect, with nothing anywhere saying so — Root Cause #62's
|
|
1247
|
+
* EMITTED_BUT_UNFILTERABLE shape.
|
|
1248
|
+
*
|
|
1249
|
+
* Nested paths, because that is what Firestore filters on
|
|
1250
|
+
* (`physicalLocation.zone`), and `canSort: false` on all three: sorting by
|
|
1251
|
+
* bin would pair an orderBy with whatever else is filtered and demand a
|
|
1252
|
+
* composite index per combination, which is the trap next door
|
|
1253
|
+
* (Root Cause #59). Browsing a bin is a FILTER, not a sort.
|
|
1254
|
+
*
|
|
1255
|
+
* The primary way to find a location is still `searchTxt` — see
|
|
1256
|
+
* `physicalLocationTokens`. These exist so a dashboard can ask the precise
|
|
1257
|
+
* question ("zone A exactly") where search answers the loose one.
|
|
1258
|
+
*/
|
|
1259
|
+
"physicalLocation.zone": { canFilter: true, canSort: false },
|
|
1260
|
+
"physicalLocation.shelf": { canFilter: true, canSort: false },
|
|
1261
|
+
"physicalLocation.bin": { canFilter: true, canSort: false },
|
|
698
1262
|
brandSlug: { canFilter: true, canSort: false },
|
|
699
1263
|
sublistingCategoryId: { canFilter: true, canSort: false },
|
|
700
1264
|
createdAt: { canFilter: true, canSort: true, parseValue: parseSieveDateValue },
|