@mohasinac/appkit 4.52.5 → 4.53.1
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 +4 -4
- package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
- package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
- package/dist/_internal/client/scaffolds/AppShell.js +1 -1
- package/dist/_internal/server/features/auctions/actions.js +1 -1
- package/dist/_internal/server/features/auctions/og.d.ts +3 -1
- package/dist/_internal/server/features/auctions/og.js +3 -1
- package/dist/_internal/server/features/bundles/actions.js +1 -1
- package/dist/_internal/server/features/business-documents/download.d.ts +41 -0
- package/dist/_internal/server/features/business-documents/download.js +91 -0
- package/dist/_internal/server/features/categories/adapters.d.ts +1 -1
- package/dist/_internal/server/features/categories/adapters.js +10 -0
- package/dist/_internal/server/features/categories/data.js +23 -7
- package/dist/_internal/server/features/checkout/actions.d.ts +14 -0
- package/dist/_internal/server/features/checkout/actions.js +116 -15
- package/dist/_internal/server/features/checkout/bundle-expansion.js +17 -0
- package/dist/_internal/server/features/checkout/data.d.ts +37 -0
- package/dist/_internal/server/features/checkout/data.js +20 -3
- package/dist/_internal/server/features/checkout/group-rule-revalidation.d.ts +34 -0
- package/dist/_internal/server/features/checkout/group-rule-revalidation.js +124 -0
- package/dist/_internal/server/features/checkout/supplier-identity.d.ts +55 -0
- package/dist/_internal/server/features/checkout/supplier-identity.js +81 -0
- package/dist/_internal/server/features/classified/metadata.js +1 -1
- package/dist/_internal/server/features/classified/og.d.ts +3 -1
- package/dist/_internal/server/features/classified/og.js +3 -1
- package/dist/_internal/server/features/digital-code/metadata.js +1 -1
- package/dist/_internal/server/features/digital-code/og.d.ts +3 -1
- package/dist/_internal/server/features/digital-code/og.js +3 -1
- package/dist/_internal/server/features/digital-code/pool.d.ts +19 -4
- package/dist/_internal/server/features/digital-code/pool.js +19 -4
- package/dist/_internal/server/features/live/metadata.js +1 -1
- package/dist/_internal/server/features/live/og.d.ts +3 -1
- package/dist/_internal/server/features/live/og.js +3 -1
- package/dist/_internal/server/features/lottery/actions.js +9 -1
- package/dist/_internal/server/features/lottery/og.d.ts +40 -0
- package/dist/_internal/server/features/lottery/og.js +79 -0
- package/dist/_internal/server/features/messages/actions.js +5 -1
- package/dist/_internal/server/features/offers/adapters.js +17 -3
- package/dist/_internal/server/features/orders/actions.js +7 -2
- package/dist/_internal/server/features/parts/og.js +1 -1
- package/dist/_internal/server/features/pre-orders/og.d.ts +3 -1
- package/dist/_internal/server/features/pre-orders/og.js +3 -1
- package/dist/_internal/server/features/price-index/search.d.ts +18 -0
- package/dist/_internal/server/features/price-index/search.js +47 -7
- package/dist/_internal/server/features/prize-draws/og.d.ts +3 -1
- package/dist/_internal/server/features/prize-draws/og.js +3 -1
- package/dist/_internal/server/features/products/group-members.d.ts +26 -0
- package/dist/_internal/server/features/products/group-members.js +7 -1
- package/dist/_internal/server/features/products/og.d.ts +3 -1
- package/dist/_internal/server/features/products/og.js +3 -1
- package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
- package/dist/_internal/server/features/raffle/actions.js +25 -0
- package/dist/_internal/server/features/reviews/actions.js +1 -1
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
- package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
- package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
- package/dist/_internal/server/features/search/index-build/build.js +285 -0
- package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
- package/dist/_internal/server/features/search/index-build/sources.js +385 -0
- package/dist/_internal/server/features/search/scoped-sources.d.ts +26 -0
- package/dist/_internal/server/features/search/scoped-sources.js +252 -0
- package/dist/_internal/server/features/search/search-everything.d.ts +57 -0
- package/dist/_internal/server/features/search/search-everything.js +70 -20
- package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
- package/dist/_internal/server/features/search/search-sources.js +142 -7
- package/dist/_internal/server/features/seo/robots.js +21 -1
- package/dist/_internal/server/features/seo/sitemap.js +7 -1
- package/dist/_internal/server/features/shared/listing-adapters.js +4 -2
- package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
- package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
- package/dist/_internal/server/features/site-settings/adapters.js +26 -0
- package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
- package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
- package/dist/_internal/server/features/sticker-trace/adapters.d.ts +91 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +175 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
- package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
- package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
- package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
- package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +264 -0
- package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
- package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
- package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
- package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +143 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +311 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +154 -0
- package/dist/_internal/server/features/sticker-trace/storage.js +301 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
- package/dist/_internal/server/features/stores/adapters.js +16 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +25 -0
- package/dist/_internal/server/features/stores/tabs.js +122 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +25 -1
- package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
- package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
- package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
- package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
- package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
- package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
- package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
- package/dist/_internal/server/jobs/core/promotions.js +7 -4
- package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
- package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +1 -0
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
- package/dist/_internal/shared/actions/action-registry.js +29 -0
- package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
- package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
- package/dist/_internal/shared/checkout/rules/_defaults.js +0 -2
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +14 -1
- package/dist/_internal/shared/checkout/rules/_limits.js +14 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +2 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.js +9 -1
- package/dist/_internal/shared/checkout/rules/bundle.rule.js +13 -0
- package/dist/_internal/shared/checkout/rules/index.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/index.js +9 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.js +0 -1
- package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +26 -0
- package/dist/_internal/shared/checkout/rules/payment-gate.js +133 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +29 -8
- package/dist/_internal/shared/checkout/rules/spares.rule.d.ts +16 -0
- package/dist/_internal/shared/checkout/rules/spares.rule.js +5 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +26 -2
- package/dist/_internal/shared/config/schema.d.ts +122 -0
- package/dist/_internal/shared/features/cart/schema.js +3 -2
- package/dist/_internal/shared/features/events/config.d.ts +14 -0
- package/dist/_internal/shared/features/events/config.js +14 -0
- package/dist/_internal/shared/features/notifications/action-url.js +8 -0
- package/dist/_internal/shared/features/products/group-rules.d.ts +75 -0
- package/dist/_internal/shared/features/products/group-rules.js +142 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
- package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
- package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
- package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
- package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
- package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
- package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
- package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +35 -0
- package/dist/_internal/shared/listing-types/_registry.js +39 -1
- package/dist/_internal/shared/listing-types/art/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/art/config.js +3 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/auction/config.js +3 -0
- package/dist/_internal/shared/listing-types/availability.js +48 -0
- package/dist/_internal/shared/listing-types/capabilities.js +19 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/classified/config.js +3 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +3 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +10 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/live/config.js +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +3 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +3 -0
- package/dist/_internal/shared/listing-types/spares/config.d.ts +74 -0
- package/dist/_internal/shared/listing-types/spares/config.js +60 -0
- package/dist/_internal/shared/listing-types/spares/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/ctas.js +4 -0
- package/dist/_internal/shared/listing-types/spares/og.js +1 -0
- package/dist/_internal/shared/listing-types/spares/schema.d.ts +2 -0
- package/dist/_internal/shared/listing-types/spares/schema.js +3 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/standard/config.js +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +3 -0
- package/dist/_internal/shared/media/limits.d.ts +12 -2
- package/dist/_internal/shared/media/limits.js +12 -2
- package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
- package/dist/_internal/shared/search/artifact-url.js +119 -0
- package/dist/_internal/shared/search/index-record.d.ts +68 -0
- package/dist/_internal/shared/search/index-record.js +96 -0
- package/dist/_internal/shared/search/match.d.ts +76 -0
- package/dist/_internal/shared/search/match.js +264 -0
- package/dist/_internal/shared/search/to-groups.d.ts +52 -0
- package/dist/_internal/shared/search/to-groups.js +141 -0
- package/dist/client.d.ts +16 -9
- package/dist/client.js +16 -6
- package/dist/configs/eslint.js +22 -2
- package/dist/constants/api-endpoints.d.ts +107 -15
- package/dist/constants/api-endpoints.js +60 -5
- package/dist/constants/cache-invalidation.js +3 -1
- package/dist/constants/field-names.d.ts +13 -1
- package/dist/constants/field-names.js +42 -1
- package/dist/contracts/repository.d.ts +8 -7
- package/dist/contracts/search.d.ts +2 -2
- package/dist/contracts/table.d.ts +3 -3
- package/dist/contracts/table.js +3 -3
- package/dist/core/contact-submissions.repository.js +2 -2
- package/dist/core/integration-keys.js +7 -1
- package/dist/core/newsletter.repository.js +2 -2
- package/dist/core/site-config.js +1 -1
- package/dist/errors/error-codes.d.ts +30 -0
- package/dist/errors/error-codes.js +30 -0
- package/dist/errors/error-display-map.js +40 -1
- package/dist/features/about/components/PolicyPageView.d.ts +22 -2
- package/dist/features/about/components/PolicyPageView.js +14 -2
- package/dist/features/about/components/PublicProfileView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +42 -2
- package/dist/features/account/api/[userId]/addresses/route.js +1 -1
- package/dist/features/account/components/NotificationBell.js +1 -1
- package/dist/features/account/components/UserBidsView.js +1 -1
- package/dist/features/account/components/index.d.ts +0 -8
- package/dist/features/account/components/index.js +0 -4
- package/dist/features/account/hooks/useProfileStats.js +5 -1
- package/dist/features/addresses/repository/addresses.repository.d.ts +33 -6
- package/dist/features/addresses/repository/addresses.repository.js +86 -9
- package/dist/features/addresses/schemas/firestore.d.ts +17 -6
- package/dist/features/admin/actions/admin-actions.js +16 -1
- package/dist/features/admin/actions/notification-actions.js +15 -6
- package/dist/features/admin/api/bids/route.js +1 -1
- package/dist/features/admin/api/coupons/route.js +1 -1
- package/dist/features/admin/api/products/route.js +1 -1
- package/dist/features/admin/api/reviews/route.js +1 -1
- package/dist/features/admin/components/AdminAdEditorView.js +19 -5
- package/dist/features/admin/components/AdminAuditLogView.js +1 -1
- package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
- package/dist/features/admin/components/AdminBlogView.js +1 -1
- package/dist/features/admin/components/AdminBrandsView.js +17 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +19 -3
- package/dist/features/admin/components/AdminContactView.js +1 -1
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
- package/dist/features/admin/components/AdminNavigationView.js +1 -1
- package/dist/features/admin/components/AdminNewsletterView.js +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +9 -2
- package/dist/features/admin/components/AdminPageHeader.js +1 -1
- package/dist/features/admin/components/AdminPayoutsView.js +1 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
- package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
- package/dist/features/admin/components/AdminProductEditorView.js +41 -39
- package/dist/features/admin/components/AdminProductsView.js +10 -3
- package/dist/features/admin/components/AdminScammersView.js +1 -1
- package/dist/features/admin/components/AdminSectionsView.js +21 -5
- package/dist/features/admin/components/AdminSessionsView.js +1 -1
- package/dist/features/admin/components/AdminSidebar.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +39 -8
- package/dist/features/admin/components/AdminSparesView.d.ts +12 -0
- package/dist/features/admin/components/AdminSparesView.js +30 -0
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
- package/dist/features/admin/components/AdminTeamView.js +1 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
- package/dist/features/admin/components/AdminUsersView.js +10 -8
- package/dist/features/admin/components/DataListingView.d.ts +2 -1
- package/dist/features/admin/components/DataListingView.js +9 -4
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +7 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
- package/dist/features/admin/constants/filter-tabs.js +1 -0
- package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
- package/dist/features/admin/repository/site-settings.repository.js +8 -3
- package/dist/features/admin/schemas/firestore.d.ts +88 -3
- package/dist/features/admin/schemas/firestore.js +32 -0
- package/dist/features/admin/types/index.d.ts +1 -1
- package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
- package/dist/features/auctions/actions/bid-actions.js +16 -4
- package/dist/features/auctions/api/route.js +1 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
- package/dist/features/auctions/components/AuctionDetailPageView.js +4 -11
- package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
- package/dist/features/auctions/repository/bid.repository.js +114 -13
- package/dist/features/auctions/schemas/firestore.d.ts +24 -4
- package/dist/features/auctions/schemas/firestore.js +1 -0
- package/dist/features/auth/actions/profile-actions.js +30 -4
- package/dist/features/auth/components/index.d.ts +0 -1
- package/dist/features/auth/components/index.js +0 -1
- package/dist/features/auth/repository/session.repository.d.ts +17 -3
- package/dist/features/auth/repository/session.repository.js +46 -5
- package/dist/features/auth/repository/token.repository.d.ts +27 -4
- package/dist/features/auth/repository/token.repository.js +65 -11
- package/dist/features/auth/repository/user.repository.d.ts +46 -7
- package/dist/features/auth/repository/user.repository.js +128 -15
- package/dist/features/auth/schemas/firestore.d.ts +65 -12
- package/dist/features/auth/schemas/firestore.js +13 -0
- package/dist/features/before-after/api/route.js +1 -1
- package/dist/features/blog/components/BlogListView.js +16 -3
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/blog/schemas/index.d.ts +2 -2
- package/dist/features/business-documents/repository/business-documents.repository.d.ts +58 -0
- package/dist/features/business-documents/repository/business-documents.repository.js +54 -0
- package/dist/features/business-documents/schemas/firestore.d.ts +105 -0
- package/dist/features/business-documents/schemas/firestore.js +75 -0
- package/dist/features/cart/actions/cart-actions.js +83 -6
- package/dist/features/cart/api/route.js +1 -1
- package/dist/features/cart/repository/cart.repository.js +32 -4
- package/dist/features/cart/schemas/firestore.d.ts +20 -0
- package/dist/features/cart/schemas/index.d.ts +2 -2
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +1 -1
- package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
- package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
- package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
- package/dist/features/categories/api/[id]/price-guidance/route.d.ts +42 -0
- package/dist/features/categories/api/[id]/price-guidance/route.js +113 -0
- package/dist/features/categories/api/route.js +10 -10
- package/dist/features/categories/components/BrandDetailPageView.js +19 -3
- package/dist/features/categories/components/BrandDetailTabs.js +10 -0
- package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
- package/dist/features/categories/components/CategoryDetailPageView.js +170 -13
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -0
- package/dist/features/categories/components/CategoryGrid.js +10 -1
- package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
- package/dist/features/categories/components/PriceGuidanceHint.d.ts +29 -0
- package/dist/features/categories/components/PriceGuidanceHint.js +61 -0
- package/dist/features/categories/components/SubcategoryCardRow.d.ts +27 -0
- package/dist/features/categories/components/SubcategoryCardRow.js +98 -0
- package/dist/features/categories/components/index.d.ts +0 -2
- package/dist/features/categories/components/index.js +0 -1
- package/dist/features/categories/constants/category-tabs.d.ts +20 -25
- package/dist/features/categories/constants/category-tabs.js +22 -39
- package/dist/features/categories/repository/categories.repository.d.ts +13 -0
- package/dist/features/categories/repository/categories.repository.js +51 -1
- package/dist/features/categories/schemas/firestore.d.ts +22 -1
- package/dist/features/categories/schemas/firestore.js +10 -0
- package/dist/features/categories/schemas/index.d.ts +8 -2
- package/dist/features/categories/schemas/index.js +2 -0
- package/dist/features/categories/types/index.d.ts +8 -0
- package/dist/features/categories/utils/taxonomy-visual.d.ts +34 -0
- package/dist/features/categories/utils/taxonomy-visual.js +74 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +4 -9
- package/dist/features/collections/api/[slug]/route.js +3 -3
- package/dist/features/collections/api/route.js +1 -1
- package/dist/features/consultation/api/route.js +1 -1
- package/dist/features/consultation/repository/consultations.repository.js +1 -1
- package/dist/features/consultation/types/index.d.ts +1 -1
- package/dist/features/contact/components/ContactForm.js +1 -3
- package/dist/features/contact/components/ContactPageView.d.ts +33 -1
- package/dist/features/contact/components/ContactPageView.js +58 -28
- package/dist/features/corporate/api/route.js +1 -1
- package/dist/features/corporate/repository/corporate.repository.js +1 -1
- package/dist/features/corporate/types/index.d.ts +1 -1
- package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
- package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -9
- package/dist/features/events/actions/event-actions.d.ts +14 -0
- package/dist/features/events/actions/event-actions.js +82 -3
- package/dist/features/events/api/[id]/route.js +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +32 -8
- package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
- package/dist/features/events/components/EventRafflesSection.js +52 -3
- package/dist/features/events/components/SpinWheelView.d.ts +2 -2
- package/dist/features/events/components/SpinWheelView.js +41 -4
- package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
- package/dist/features/events/repository/event-entry.repository.js +41 -7
- package/dist/features/events/schemas/firestore.d.ts +17 -4
- package/dist/features/events/types/index.d.ts +37 -0
- package/dist/features/faq/repository/faqs.repository.js +1 -1
- package/dist/features/faq/schemas/index.d.ts +5 -2
- package/dist/features/faq/schemas/index.js +6 -0
- package/dist/features/faq/types/index.d.ts +0 -1
- package/dist/features/grouped/components/GroupedListingDetailView.js +9 -1
- package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
- package/dist/features/grouped/schemas/firestore.d.ts +5 -0
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +3 -3
- package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
- package/dist/features/homepage/api/carousel/route.js +4 -4
- package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
- package/dist/features/homepage/components/AnnouncementBar.js +13 -19
- package/dist/features/homepage/components/CollectionCardsSection.d.ts +28 -6
- package/dist/features/homepage/components/CollectionCardsSection.js +43 -8
- package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -6
- package/dist/features/homepage/components/HowItWorksSection.js +4 -4
- package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
- package/dist/features/homepage/components/PromoGrid.d.ts +31 -2
- package/dist/features/homepage/components/PromoGrid.js +12 -3
- package/dist/features/homepage/components/TestimonialsCarousel.d.ts +34 -2
- package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
- package/dist/features/homepage/components/index.d.ts +0 -22
- package/dist/features/homepage/components/index.js +0 -12
- package/dist/features/homepage/index.d.ts +0 -2
- package/dist/features/homepage/index.js +0 -2
- package/dist/features/homepage/lib/section-renderer.d.ts +9 -0
- package/dist/features/homepage/lib/section-renderer.js +202 -58
- package/dist/features/homepage/repository/homepage-sections.repository.d.ts +35 -3
- package/dist/features/homepage/repository/homepage-sections.repository.js +58 -8
- package/dist/features/homepage/schemas/firestore.d.ts +112 -3
- package/dist/features/homepage/schemas/firestore.js +32 -2
- package/dist/features/homepage/schemas/index.d.ts +46 -17
- package/dist/features/homepage/schemas/index.js +39 -27
- package/dist/features/homepage/server.d.ts +0 -3
- package/dist/features/homepage/server.js +0 -3
- package/dist/features/homepage/types/index.d.ts +0 -47
- package/dist/features/homepage/types/index.js +49 -0
- package/dist/features/layout/AppLayoutShell.d.ts +11 -0
- package/dist/features/layout/AppLayoutShell.js +65 -13
- package/dist/features/layout/BottomActionsContext.d.ts +16 -0
- package/dist/features/layout/BottomActionsContext.js +5 -0
- package/dist/features/layout/BottomChrome.js +48 -9
- package/dist/features/layout/BottomNavItem.js +1 -1
- package/dist/features/layout/BottomNavbar.d.ts +14 -0
- package/dist/features/layout/BottomNavbar.js +43 -3
- package/dist/features/layout/BottomSheet.js +1 -1
- package/dist/features/layout/MainNavbar.d.ts +11 -0
- package/dist/features/layout/NavbarLayout.d.ts +3 -0
- package/dist/features/layout/NavbarLayout.js +88 -11
- package/dist/features/layout/SideActionDock.d.ts +1 -0
- package/dist/features/layout/SideActionDock.js +219 -0
- package/dist/features/layout/TitleBarLayout.js +1 -1
- package/dist/features/layout/cta-anchor.d.ts +31 -0
- package/dist/features/layout/cta-anchor.js +31 -0
- package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
- package/dist/features/layout/hooks/useBottomActions.js +6 -1
- package/dist/features/layout/index.d.ts +9 -1
- package/dist/features/layout/index.js +9 -1
- package/dist/features/layout/useCtaReveal.d.ts +24 -0
- package/dist/features/layout/useCtaReveal.js +82 -0
- package/dist/features/layout/useHoldToOpen.d.ts +41 -0
- package/dist/features/layout/useHoldToOpen.js +84 -0
- package/dist/features/live/components/LiveItemDetailPageView.js +4 -9
- package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
- package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
- package/dist/features/lottery/schemas/firestore.d.ts +33 -5
- package/dist/features/loyalty/api/balance/route.js +1 -1
- package/dist/features/loyalty/api/history/route.js +1 -1
- package/dist/features/media/MediaImage.js +0 -1
- package/dist/features/media/MediaPickerModal.js +7 -1
- package/dist/features/media/hooks/useMedia.js +17 -0
- package/dist/features/media/modals/ImageEditor.js +5 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
- package/dist/features/media/repository/media-assets.repository.d.ts +65 -0
- package/dist/features/media/repository/media-assets.repository.js +31 -0
- package/dist/features/media/trust-signals.d.ts +85 -0
- package/dist/features/media/trust-signals.js +126 -0
- package/dist/features/media/upload/CameraCapture.js +16 -1
- package/dist/features/media/upload/ImageUpload.js +42 -4
- package/dist/features/media/upload/MediaUploadField.js +69 -13
- package/dist/features/media/upload/downscale-image.d.ts +56 -0
- package/dist/features/media/upload/downscale-image.js +150 -0
- package/dist/features/messages/components/ConversationThreadView.js +45 -2
- package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
- package/dist/features/messages/components/MessageSellerButton.js +10 -2
- package/dist/features/messages/schemas/firestore.d.ts +15 -0
- package/dist/features/orders/hooks/useOrders.js +4 -2
- package/dist/features/orders/repository/orders.repository.d.ts +15 -4
- package/dist/features/orders/repository/orders.repository.js +52 -20
- package/dist/features/orders/schemas/firestore.d.ts +15 -4
- package/dist/features/orders/schemas/index.d.ts +8 -8
- package/dist/features/orders/types/index.d.ts +2 -2
- package/dist/features/parts/components/PartDetailPageView.d.ts +14 -1
- package/dist/features/parts/components/PartDetailPageView.js +2 -2
- package/dist/features/parts/components/PartsIndexPageView.d.ts +11 -2
- package/dist/features/parts/components/PartsIndexPageView.js +2 -2
- package/dist/features/parts/components/PartsSearchBox.d.ts +9 -0
- package/dist/features/parts/components/PartsSearchBox.js +57 -0
- package/dist/features/parts/schemas/firestore.d.ts +149 -3
- package/dist/features/parts/schemas/firestore.js +184 -0
- package/dist/features/payments/repository/payments.repository.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +38 -6
- package/dist/features/payments/repository/payout.repository.js +84 -23
- package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
- package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
- package/dist/features/payments/schemas/firestore.d.ts +14 -3
- package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
- package/dist/features/pre-orders/api/[slug]/route.js +1 -1
- package/dist/features/pre-orders/api/admin/route.js +1 -1
- package/dist/features/pre-orders/api/route.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -11
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
- package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
- package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +3 -1
- package/dist/features/price-index/components/PriceIndexToolView.js +92 -13
- package/dist/features/products/api/[id]/route.js +1 -1
- package/dist/features/products/components/CompareOverlay.d.ts +18 -1
- package/dist/features/products/components/CompareOverlay.js +21 -2
- package/dist/features/products/components/CustomSectionTabContent.d.ts +31 -0
- package/dist/features/products/components/CustomSectionTabContent.js +29 -3
- package/dist/features/products/components/GroupMemberPicker.d.ts +19 -1
- package/dist/features/products/components/GroupMemberPicker.js +46 -8
- package/dist/features/products/components/GroupSettingsPanel.d.ts +11 -1
- package/dist/features/products/components/GroupSettingsPanel.js +91 -3
- package/dist/features/products/components/ListingBottomActions.js +4 -0
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +15 -1
- package/dist/features/products/components/PrizeDrawEntryActions.js +70 -8
- package/dist/features/products/components/ProductDetailPageView.js +75 -15
- package/dist/features/products/components/ProductForm.d.ts +13 -1
- package/dist/features/products/components/ProductForm.js +16 -2
- package/dist/features/products/components/ProductGalleryClient.js +2 -2
- package/dist/features/products/components/ProductGrid.js +12 -1
- package/dist/features/products/components/ProductsIndexListing.d.ts +16 -1
- package/dist/features/products/components/ProductsIndexListing.js +3 -3
- package/dist/features/products/components/ShowGroupSection.js +15 -2
- package/dist/features/products/components/SparesListView.d.ts +7 -0
- package/dist/features/products/components/SparesListView.js +39 -0
- package/dist/features/products/components/index.d.ts +0 -2
- package/dist/features/products/components/index.js +0 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
- package/dist/features/products/config/listing-type-listing-config.js +27 -2
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/constants/listing-tabs.d.ts +9 -0
- package/dist/features/products/constants/listing-tabs.js +3 -2
- package/dist/features/products/hooks/useProducts.js +2 -2
- package/dist/features/products/repository/products.repository.d.ts +98 -0
- package/dist/features/products/repository/products.repository.js +248 -18
- package/dist/features/products/schemas/firestore.d.ts +97 -4
- package/dist/features/products/schemas/firestore.js +104 -0
- package/dist/features/products/schemas/index.d.ts +12 -21
- package/dist/features/products/schemas/index.js +23 -6
- package/dist/features/products/types/index.d.ts +46 -2
- package/dist/features/products/utils/group-member-image.d.ts +39 -0
- package/dist/features/products/utils/group-member-image.js +3 -0
- package/dist/features/products/utils/listing-badge-variant.js +4 -0
- package/dist/features/promotions/api/route.js +1 -1
- package/dist/features/reviews/actions/review-actions.d.ts +6 -6
- package/dist/features/reviews/actions/review-actions.js +22 -8
- package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
- package/dist/features/reviews/repository/reviews.repository.js +63 -12
- package/dist/features/reviews/schemas/firestore.d.ts +13 -2
- package/dist/features/reviews/schemas/index.d.ts +2 -2
- package/dist/features/scams/actions/scam-actions.js +16 -4
- package/dist/features/scams/components/ScamProfileView.js +1 -1
- package/dist/features/search/components/EntityTypeahead.d.ts +44 -0
- package/dist/features/search/components/EntityTypeahead.js +92 -0
- package/dist/features/search/components/Search.d.ts +12 -1
- package/dist/features/search/components/Search.js +47 -3
- package/dist/features/search/components/SearchFacetRail.d.ts +11 -0
- package/dist/features/search/components/SearchFacetRail.js +92 -0
- package/dist/features/search/components/SearchResultsClient.d.ts +33 -0
- package/dist/features/search/components/SearchResultsClient.js +103 -0
- package/dist/features/search/components/SearchResultsPageView.d.ts +15 -1
- package/dist/features/search/components/SearchResultsPageView.js +3 -2
- package/dist/features/search/components/index.d.ts +0 -6
- package/dist/features/search/components/index.js +0 -3
- package/dist/features/search/hooks/useNavSuggestions.d.ts +13 -0
- package/dist/features/search/hooks/useScopedSearch.d.ts +34 -0
- package/dist/features/search/hooks/useScopedSearch.js +114 -0
- package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
- package/dist/features/search/hooks/useSearchIndex.js +172 -0
- package/dist/features/search/hooks/useSiteSearch.d.ts +26 -0
- package/dist/features/search/hooks/useSiteSearch.js +149 -0
- package/dist/features/search/index.d.ts +0 -4
- package/dist/features/search/index.js +0 -4
- package/dist/features/search/manifest.d.ts +12 -0
- package/dist/features/search/manifest.js +17 -2
- package/dist/features/search/server.d.ts +0 -3
- package/dist/features/search/server.js +0 -3
- package/dist/features/seller/actions/offer-actions.d.ts +5 -5
- package/dist/features/seller/actions/offer-actions.js +38 -8
- package/dist/features/seller/actions/seller-actions.js +34 -7
- package/dist/features/seller/api/coupons/route.js +1 -1
- package/dist/features/seller/api/products/route.js +1 -1
- package/dist/features/seller/api/store/route.js +1 -1
- package/dist/features/seller/components/SellerBidsView.js +1 -1
- package/dist/features/seller/components/SellerCouponsView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.d.ts +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +29 -1
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +35 -15
- package/dist/features/seller/components/SellerPayoutsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
- package/dist/features/seller/components/SellerProductShell.js +2 -2
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +0 -1
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/components/SellerSparesView.d.ts +17 -0
- package/dist/features/seller/components/SellerSparesView.js +6 -0
- package/dist/features/seller/components/SellerStorefrontView.js +0 -1
- package/dist/features/seller/components/index.d.ts +2 -4
- package/dist/features/seller/components/index.js +1 -2
- package/dist/features/seller/repository/offer.repository.d.ts +15 -3
- package/dist/features/seller/repository/offer.repository.js +43 -7
- package/dist/features/seller/schemas/firestore.d.ts +14 -3
- package/dist/features/seller/schemas/index.d.ts +4 -4
- package/dist/features/seller/schemas/order-forms.d.ts +39 -0
- package/dist/features/seller/schemas/order-forms.js +37 -0
- package/dist/features/shell/CommandPalette.js +1 -1
- package/dist/features/shell/FormShell.js +6 -2
- package/dist/features/shell/QuickFormDrawer.js +15 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
- package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
- package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
- package/dist/features/sticker-trace/constants/help-content.js +172 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
- package/dist/features/sticker-trace/schemas/firestore.d.ts +267 -0
- package/dist/features/sticker-trace/schemas/firestore.js +79 -0
- package/dist/features/sticker-trace/server.d.ts +8 -0
- package/dist/features/sticker-trace/server.js +51 -0
- package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
- package/dist/features/stores/actions/store-query-actions.js +7 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/route.js +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +7 -82
- package/dist/features/stores/components/StoreHeader.js +1 -2
- package/dist/features/stores/components/StoreNavTabs.js +17 -2
- package/dist/features/stores/components/StoreSparesPageView.d.ts +27 -0
- package/dist/features/stores/components/StoreSparesPageView.js +48 -0
- package/dist/features/stores/manifest.js +8 -4
- package/dist/features/stores/schemas/firestore.d.ts +19 -0
- package/dist/features/support/repository/support.repository.d.ts +14 -3
- package/dist/features/support/repository/support.repository.js +93 -13
- package/dist/features/support/schemas/firestore.d.ts +16 -5
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +96 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +4 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +478 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +54 -32
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +3 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +73 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +340 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
- package/dist/features/tester/seed-data/authored/index.js +24 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +1 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +57 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +77 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +58 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +284 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +558 -34
- package/dist/index.d.ts +27 -80
- package/dist/index.js +62 -115
- package/dist/next/api/routeHandler.js +9 -0
- package/dist/next/routing/require-record.d.ts +13 -0
- package/dist/next/routing/require-record.js +62 -0
- package/dist/next/routing/route-map.d.ts +46 -5
- package/dist/next/routing/route-map.js +70 -3
- package/dist/providers/db-firebase/base.d.ts +4 -2
- package/dist/providers/db-firebase/base.js +21 -5
- package/dist/providers/db-firebase/base.repository.d.ts +33 -9
- package/dist/providers/db-firebase/base.repository.js +55 -0
- package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
- package/dist/providers/db-firebase/rtdb-paths.js +12 -0
- package/dist/react/ErrorBoundary.js +6 -1
- package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
- package/dist/react/hooks/realtime-event-constants.js +8 -0
- package/dist/react/hooks/useEntityDelete.js +5 -1
- package/dist/react/hooks/useMessage.js +5 -1
- package/dist/repositories/index.d.ts +2 -2
- package/dist/repositories/index.js +6 -1
- package/dist/schemas/registry.d.ts +28 -26
- package/dist/schemas/registry.js +31 -14
- package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
- package/dist/security/blind-index-tokens.d.ts +54 -0
- package/dist/security/blind-index-tokens.js +152 -0
- package/dist/security/encrypted.d.ts +117 -0
- package/dist/security/encrypted.js +100 -0
- package/dist/security/index.d.ts +6 -3
- package/dist/security/index.js +17 -3
- package/dist/security/pii-accessors.d.ts +71 -0
- package/dist/security/pii-accessors.js +150 -0
- package/dist/security/pii-encrypt.d.ts +0 -8
- package/dist/security/pii-encrypt.js +22 -15
- package/dist/security/pii-mask.d.ts +18 -0
- package/dist/security/pii-mask.js +27 -0
- package/dist/security/settings-encryption.d.ts +35 -0
- package/dist/security/settings-encryption.js +91 -0
- package/dist/seed/_helpers/brand-rows.js +38 -14
- package/dist/seed/_helpers/category-forest.js +73 -7
- package/dist/seed/_helpers/category-images-generated.d.ts +25 -6
- package/dist/seed/_helpers/category-images-generated.js +81 -6
- package/dist/seed/_helpers/category-models.d.ts +1 -1
- package/dist/seed/_helpers/category-models.js +7 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +8 -0
- package/dist/seed/_helpers/category-parts.d.ts +1 -1
- package/dist/seed/_helpers/category-parts.js +50 -2
- package/dist/seed/_helpers/character-features.d.ts +1 -1
- package/dist/seed/_helpers/character-features.js +2 -1
- package/dist/seed/_helpers/franchise-rows.js +10 -2
- package/dist/seed/_helpers/media.d.ts +47 -0
- package/dist/seed/_helpers/media.js +34 -0
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
- package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
- package/dist/seed/addresses-seed-data.d.ts +2 -2
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +78 -0
- package/dist/seed/authenticity-knowledge-seed-data.js +10729 -0
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +23 -2
- package/dist/seed/categories-seed-data.js +124 -20
- package/dist/seed/events-seed-data.d.ts +2 -2
- package/dist/seed/events-seed-data.js +5 -0
- package/dist/seed/faq-seed-data.js +175 -5
- package/dist/seed/grouped-listings-seed-data.js +16 -0
- package/dist/seed/homepage-sections-seed-data.js +131 -26
- package/dist/seed/index.d.ts +3 -3
- package/dist/seed/index.js +3 -2
- package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
- package/dist/seed/manifest.js +3 -0
- package/dist/seed/media-assets-seed-data.d.ts +1 -1
- package/dist/seed/media-assets-seed-data.js +746 -196
- package/dist/seed/model-composition-seed-data.js +122 -6
- package/dist/seed/offers-seed-data.d.ts +2 -2
- package/dist/seed/offers-seed-data.js +1 -1
- package/dist/seed/orders-seed-data.d.ts +2 -2
- package/dist/seed/part-glossary-seed-data.d.ts +1 -1
- package/dist/seed/part-glossary-seed-data.js +37219 -463
- package/dist/seed/payouts-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.js +1 -1
- package/dist/seed/products-art-seed-data.js +7 -18
- package/dist/seed/products-auctions-seed-data.js +56 -47
- package/dist/seed/products-beyblade-x-seed-data.d.ts +2 -0
- package/dist/seed/products-beyblade-x-seed-data.js +441 -0
- package/dist/seed/products-catalogue-seed-data.d.ts +5 -5
- package/dist/seed/products-catalogue-seed-data.js +1500 -1240
- package/dist/seed/products-classifieds-seed-data.js +9 -27
- package/dist/seed/products-digital-codes-seed-data.js +9 -18
- package/dist/seed/products-live-items-seed-data.js +5 -13
- package/dist/seed/products-preorders-seed-data.js +67 -33
- package/dist/seed/products-prize-draws-seed-data.js +8 -17
- package/dist/seed/products-spares-seed-data.d.ts +2 -0
- package/dist/seed/products-spares-seed-data.js +368 -0
- package/dist/seed/products-standard-seed-data.js +39 -126
- package/dist/seed/products-stickers-seed-data.js +59 -15
- package/dist/seed/reviews-seed-data.d.ts +1 -2
- package/dist/seed/seed-purpose.js +7 -0
- package/dist/seed/sessions-seed-data.d.ts +2 -2
- package/dist/seed/sessions-seed-data.js +5 -0
- package/dist/seed/site-settings-seed-data.js +9 -1
- package/dist/seed/support-tickets-seed-data.d.ts +2 -2
- package/dist/seed/support-tickets-seed-data.js +1 -1
- package/dist/seed/users-seed-data.d.ts +2 -2
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seo/json-ld.d.ts +25 -0
- package/dist/seo/json-ld.js +33 -1
- package/dist/server-entry.d.ts +3 -1
- package/dist/server-entry.js +2 -2
- package/dist/server.d.ts +27 -12
- package/dist/server.js +86 -28
- package/dist/styles.css +438 -1
- package/dist/tailwind-input.css +31 -17
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Accordion.js +1 -1
- package/dist/ui/components/Breadcrumb.js +1 -1
- package/dist/ui/components/Button.js +7 -1
- package/dist/ui/components/DetailPageGallery.js +0 -2
- package/dist/ui/components/DetailPageHero.js +0 -1
- package/dist/ui/components/DetailPageTabs.js +1 -1
- package/dist/ui/components/Divider.js +3 -3
- package/dist/ui/components/FilterChipGroup.d.ts +11 -0
- package/dist/ui/components/FilterChipGroup.js +1 -1
- package/dist/ui/components/GatedPrice.js +5 -1
- package/dist/ui/components/HorizontalScroller.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -1
- package/dist/ui/components/ListingLayout.js +17 -11
- package/dist/ui/components/MediaTabs.style.css +81 -0
- package/dist/ui/components/OverflowRow.d.ts +92 -0
- package/dist/ui/components/OverflowRow.js +203 -0
- package/dist/ui/components/OverflowRow.style.css +235 -0
- package/dist/ui/components/Pagination.js +1 -1
- package/dist/ui/components/PendingValue.d.ts +45 -0
- package/dist/ui/components/PendingValue.js +7 -0
- package/dist/ui/components/Radio.style.css +119 -0
- package/dist/ui/components/RatingDisplay.js +2 -2
- package/dist/ui/components/RecordDetailModal.js +14 -1
- package/dist/ui/components/RowActionMenu.js +5 -1
- package/dist/ui/components/SettingsSection.js +0 -2
- package/dist/ui/components/SideDrawer.js +5 -1
- package/dist/ui/components/SideModal.js +9 -1
- package/dist/ui/components/SiteLogo.js +3 -0
- package/dist/ui/components/SiteMark.js +3 -0
- package/dist/ui/components/SortDropdown.js +1 -1
- package/dist/ui/components/SpecTable.d.ts +58 -0
- package/dist/ui/components/SpecTable.js +8 -0
- package/dist/ui/components/StarRating.js +1 -3
- package/dist/ui/components/SummaryCard.js +1 -1
- package/dist/ui/components/TabBarShell.d.ts +12 -1
- package/dist/ui/components/TabBarShell.js +3 -2
- package/dist/ui/components/Tabs.js +36 -24
- package/dist/ui/components/Toast.d.ts +3 -24
- package/dist/ui/components/Toast.js +2 -19
- package/dist/ui/components/TopBannerPortal.d.ts +15 -0
- package/dist/ui/components/TopBannerPortal.js +19 -0
- package/dist/ui/components/UnsavedChangesModal.js +5 -1
- package/dist/ui/components/index.style.css +2 -0
- package/dist/ui/components/row-collapse.d.ts +15 -0
- package/dist/ui/components/row-collapse.js +127 -0
- package/dist/ui/components/toast-context.d.ts +63 -0
- package/dist/ui/components/toast-context.js +48 -0
- package/dist/ui/components/top-banner-slot.d.ts +37 -0
- package/dist/ui/components/top-banner-slot.js +45 -0
- package/dist/ui/icons/icon-registry.d.ts +7 -0
- package/dist/ui/icons/icon-registry.js +25 -1
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +3 -0
- package/dist/utils/array.helper.d.ts +2 -2
- package/dist/utils/array.helper.js +5 -5
- package/dist/utils/id-generators.d.ts +6 -0
- package/dist/utils/id-generators.js +10 -0
- package/dist/utils/media-url.js +0 -2
- package/dist/utils/search-txt-builders.d.ts +28 -4
- package/dist/utils/search-txt-builders.js +41 -1
- package/dist/utils/search-txt-query.d.ts +12 -0
- package/dist/utils/search-txt-query.js +12 -0
- package/dist/validation/schemas.d.ts +8 -8
- package/package.json +6 -2
- package/scripts/dedupe-peer-deps.mjs +18 -0
- package/scripts/seed-cli.mjs +138 -26
- package/scripts/verify-css-build.mjs +118 -37
- package/dist/_internal/server/features/search/actions.d.ts +0 -7
- package/dist/_internal/server/features/search/actions.js +0 -21
- package/dist/_internal/server/features/search/data.d.ts +0 -15
- package/dist/_internal/server/features/search/data.js +0 -18
- package/dist/_internal/server/features/search/index.d.ts +0 -3
- package/dist/_internal/server/features/search/index.js +0 -2
- package/dist/features/account/components/UserAddressesView.d.ts +0 -13
- package/dist/features/account/components/UserAddressesView.js +0 -5
- package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
- package/dist/features/account/components/UserNotificationsView.js +0 -12
- package/dist/features/account/components/UserSettingsView.d.ts +0 -16
- package/dist/features/account/components/UserSettingsView.js +0 -13
- package/dist/features/account/components/UserSupportView.d.ts +0 -3
- package/dist/features/account/components/UserSupportView.js +0 -166
- package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
- package/dist/features/admin/components/DemoSeedView.js +0 -5
- package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
- package/dist/features/auth/components/AuthStatusPanel.js +0 -22
- package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
- package/dist/features/categories/components/CategoryProductsView.js +0 -21
- package/dist/features/homepage/api/[id]/route.d.ts +0 -23
- package/dist/features/homepage/api/[id]/route.js +0 -103
- package/dist/features/homepage/api/route.d.ts +0 -14
- package/dist/features/homepage/api/route.js +0 -140
- package/dist/features/homepage/api/sections/[id]/route.d.ts +0 -26
- package/dist/features/homepage/api/sections/[id]/route.js +0 -95
- package/dist/features/homepage/api/sections/route.d.ts +0 -13
- package/dist/features/homepage/api/sections/route.js +0 -82
- package/dist/features/homepage/components/AdvertisementBanner.d.ts +0 -14
- package/dist/features/homepage/components/AdvertisementBanner.js +0 -35
- package/dist/features/homepage/components/BeforeAfterCard.d.ts +0 -9
- package/dist/features/homepage/components/BeforeAfterCard.js +0 -73
- package/dist/features/homepage/components/FeaturedResultsSection.d.ts +0 -17
- package/dist/features/homepage/components/FeaturedResultsSection.js +0 -17
- package/dist/features/homepage/components/HeroBanner.d.ts +0 -7
- package/dist/features/homepage/components/HeroBanner.js +0 -43
- package/dist/features/homepage/components/HeroSection.d.ts +0 -7
- package/dist/features/homepage/components/HeroSection.js +0 -6
- package/dist/features/homepage/components/HomepageSkeleton.d.ts +0 -2
- package/dist/features/homepage/components/HomepageSkeleton.js +0 -21
- package/dist/features/homepage/components/HomepageView.d.ts +0 -25
- package/dist/features/homepage/components/HomepageView.js +0 -5
- package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
- package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
- package/dist/features/homepage/components/NewsletterBanner.d.ts +0 -23
- package/dist/features/homepage/components/NewsletterBanner.js +0 -37
- package/dist/features/homepage/components/SiteFeaturesSection.d.ts +0 -14
- package/dist/features/homepage/components/SiteFeaturesSection.js +0 -11
- package/dist/features/homepage/components/TrustBadges.d.ts +0 -6
- package/dist/features/homepage/components/TrustBadges.js +0 -46
- package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +0 -12
- package/dist/features/homepage/components/TrustIndicatorsSection.js +0 -11
- package/dist/features/homepage/hooks/useHomepage.d.ts +0 -11
- package/dist/features/homepage/hooks/useHomepage.js +0 -17
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +0 -2
- package/dist/features/homepage/hooks/useHomepageSections.js +0 -10
- package/dist/features/homepage/repository/homepage.repository.d.ts +0 -11
- package/dist/features/homepage/repository/homepage.repository.js +0 -25
- package/dist/features/layout/BottomActions.d.ts +0 -1
- package/dist/features/layout/BottomActions.js +0 -311
- package/dist/features/products/components/ProductsView.d.ts +0 -6
- package/dist/features/products/components/ProductsView.js +0 -5
- package/dist/features/search/actions/index.d.ts +0 -1
- package/dist/features/search/actions/index.js +0 -1
- package/dist/features/search/actions/search-actions.d.ts +0 -18
- package/dist/features/search/actions/search-actions.js +0 -43
- package/dist/features/search/api/route.d.ts +0 -22
- package/dist/features/search/api/route.js +0 -128
- package/dist/features/search/columns/index.d.ts +0 -17
- package/dist/features/search/columns/index.js +0 -49
- package/dist/features/search/components/SearchFiltersRow.d.ts +0 -22
- package/dist/features/search/components/SearchFiltersRow.js +0 -21
- package/dist/features/search/components/SearchResultsSection.d.ts +0 -53
- package/dist/features/search/components/SearchResultsSection.js +0 -35
- package/dist/features/search/components/SearchView.d.ts +0 -27
- package/dist/features/search/components/SearchView.js +0 -8
- package/dist/features/search/hooks/useSearch.d.ts +0 -21
- package/dist/features/search/hooks/useSearch.js +0 -33
- package/dist/features/search/repository/search.repository.d.ts +0 -14
- package/dist/features/search/repository/search.repository.js +0 -59
- package/dist/features/search/schemas/index.d.ts +0 -70
- package/dist/features/search/schemas/index.js +0 -36
- package/dist/features/search/types/index.d.ts +0 -48
- package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
- package/dist/features/seller/components/SellerStoreView.js +0 -8
- package/dist/features/stores/components/StoreScopedSearch.d.ts +0 -17
- package/dist/features/stores/components/StoreScopedSearch.js +0 -27
- package/dist/seed/defaults/homepage-sections.d.ts +0 -2
- package/dist/seed/defaults/homepage-sections.js +0 -60
- package/dist/seed/factories/homepage-section.factory.d.ts +0 -10
- package/dist/seed/factories/homepage-section.factory.js +0 -13
- /package/dist/{features/search/types/index.js → _internal/shared/listing-types/spares/og.d.ts} +0 -0
|
@@ -43,7 +43,56 @@ export interface SearchSource {
|
|
|
43
43
|
moreHref: (q: string) => string;
|
|
44
44
|
/** Extra equality narrowing, e.g. `status == published`. */
|
|
45
45
|
where?: ReadonlyArray<readonly [string, unknown]>;
|
|
46
|
+
/**
|
|
47
|
+
* The bounded window this source reads before the in-memory refine.
|
|
48
|
+
*
|
|
49
|
+
* Defaults to `SCAN` (60). Scoped sources pass 20: an owner clause
|
|
50
|
+
* (`userId == uid`) has already collapsed the candidate set, so a 60-doc
|
|
51
|
+
* window is 40 reads spent proving there was nothing else.
|
|
52
|
+
*/
|
|
53
|
+
scanLimit?: number;
|
|
54
|
+
/**
|
|
55
|
+
* How this source FINDS rows. Discriminated so TypeScript forces every
|
|
56
|
+
* source to answer, which is what makes `audit-scoped-search-ownership`
|
|
57
|
+
* R2 checkable rather than advisory.
|
|
58
|
+
*
|
|
59
|
+
* `search-txt` the `array-contains` push-down. Requires the
|
|
60
|
+
* collection to carry `searchTxt`.
|
|
61
|
+
* `bounded-memory` read the owner's bounded window and filter in
|
|
62
|
+
* memory, with no token push-down at all.
|
|
63
|
+
*
|
|
64
|
+
* 🛑 A PII-bearing collection must be `bounded-memory`. `searchTxt` is
|
|
65
|
+
* plaintext, edge-n-gram-expanded and stored on the document — giving
|
|
66
|
+
* `addresses` a token push-down would write a prefix-expanded index over
|
|
67
|
+
* a person's name and street, which is the precise thing § Searching PII
|
|
68
|
+
* refuses (a 1-character prefix has 36 possible values; the frequency
|
|
69
|
+
* distribution unpicks from there). Decrypting a bounded owner-scoped
|
|
70
|
+
* window in memory re-derives a bound ownership already gives, and adds
|
|
71
|
+
* no leak surface.
|
|
72
|
+
*/
|
|
73
|
+
mode?: "search-txt" | "bounded-memory";
|
|
74
|
+
/**
|
|
75
|
+
* For `bounded-memory`: does this row match? Receives the DECRYPTED
|
|
76
|
+
* document, so a repository that decrypts on read is the intended caller.
|
|
77
|
+
* Every term must match (AND), consistent with the push-down path.
|
|
78
|
+
*/
|
|
79
|
+
matches?: (data: SearchDocData, terms: readonly string[]) => boolean;
|
|
80
|
+
/** Ordering for `bounded-memory`, since there is no token clause to sort by. */
|
|
81
|
+
orderBy?: readonly [string, "asc" | "desc"];
|
|
46
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* 🛑 The ceiling on what ONE viewer's scoped search may read.
|
|
85
|
+
*
|
|
86
|
+
* Σ `scanLimit` across the widest role, checked by
|
|
87
|
+
* `audit-scoped-search-ownership` R4 — which PRINTS THE ARITHMETIC on
|
|
88
|
+
* failure, because "the budget is exceeded" is useless without knowing by
|
|
89
|
+
* which source and how much.
|
|
90
|
+
*
|
|
91
|
+
* 400 against Rule #6's ~3-round-trip guidance is defensible because the
|
|
92
|
+
* sources run in ONE `Promise.all`: it is one round trip of fan-out, not
|
|
93
|
+
* twelve sequential ones. The number that matters is documents read.
|
|
94
|
+
*/
|
|
95
|
+
export declare const SCOPED_SCAN_BUDGET = 400;
|
|
47
96
|
/** A projected Firestore document's fields. */
|
|
48
97
|
export type SearchDocData = Record<string, FirestoreValue>;
|
|
49
98
|
/** A projected document — the only shape this module reads. */
|
|
@@ -55,6 +104,14 @@ interface SearchQueryRef {
|
|
|
55
104
|
where(field: string, op: string, value: unknown): SearchQueryRef;
|
|
56
105
|
select(...fields: string[]): SearchQueryRef;
|
|
57
106
|
limit(n: number): SearchQueryRef;
|
|
107
|
+
/**
|
|
108
|
+
* Only `bounded-memory` sources use this. The push-down path deliberately
|
|
109
|
+
* does not order: an `orderBy` beside an `array-contains` demands a
|
|
110
|
+
* composite index per source, and a missing one throws
|
|
111
|
+
* `FAILED_PRECONDITION` into the per-source catch, where it renders as an
|
|
112
|
+
* empty group — i.e. silently (Root Cause #59).
|
|
113
|
+
*/
|
|
114
|
+
orderBy(field: string, direction: "asc" | "desc"): SearchQueryRef;
|
|
58
115
|
get(): Promise<{
|
|
59
116
|
docs: SearchDoc[];
|
|
60
117
|
}>;
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* D2 Fix 4 — CROSS-RESOURCE search.
|
|
3
3
|
*
|
|
4
|
-
* 🛑
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* 🛑 CORRECTED 2026-10-19 — this header asserted the opposite of the truth.
|
|
5
|
+
*
|
|
6
|
+
* It read: "`/search` is a pure REDIRECT today … there is no cross-resource
|
|
7
|
+
* search at all." That described the state this module was WRITTEN to fix,
|
|
8
|
+
* and it stayed on the file after the fix shipped — so the one document
|
|
9
|
+
* explaining the feature told every later reader the feature did not exist.
|
|
10
|
+
*
|
|
11
|
+
* What is true now: `/search` is a real grouped results page, the header
|
|
12
|
+
* reaches it, and this module is TIER 2 — the authenticated, server-side
|
|
13
|
+
* half. The public half is a prebuilt artifact searched in the browser at
|
|
14
|
+
* zero Firestore reads, and this one is what serves a viewer's OWN records
|
|
15
|
+
* (`scoped-sources.ts`) and what the kill switch falls back to when the
|
|
16
|
+
* artifact is unavailable.
|
|
17
|
+
*
|
|
18
|
+
* That fallback is the reason this file is not deleted.
|
|
9
19
|
*
|
|
10
20
|
* ── WHY THIS IS AFFORDABLE ─────────────────────────────────────────────────
|
|
11
21
|
*
|
|
@@ -30,11 +40,15 @@
|
|
|
30
40
|
*
|
|
31
41
|
* ── 🛑 WHAT IT DOES NOT REUSE, AND WHY ─────────────────────────────────────
|
|
32
42
|
*
|
|
33
|
-
* NOT `SearchRepository`. That class
|
|
43
|
+
* NOT `SearchRepository`. That class built `title_=${q}` — a case-sensitive
|
|
34
44
|
* STARTS-WITH on `title` alone — so "dranzer" would not find "Beyblade
|
|
35
|
-
* Original Dranzer S" and "flat" would find nothing at all. It
|
|
36
|
-
* only through `/api/search`, whose own hook (`useSearch`)
|
|
37
|
-
* outside barrel re-exports.
|
|
45
|
+
* Original Dranzer S" and "flat" would find nothing at all. It was reachable
|
|
46
|
+
* only through `/api/search`, whose own hook (`useSearch`) had zero consumers
|
|
47
|
+
* outside barrel re-exports. The whole dead subsystem — `SearchRepository`,
|
|
48
|
+
* `/api/search`, `useSearch`, `SearchView`/`SearchFiltersRow`/
|
|
49
|
+
* `SearchResultsSection`, the legacy `search-actions.ts`/`data.ts`/
|
|
50
|
+
* `actions.ts` chain — was deleted in the Wave 10 cleanup, kept only as this
|
|
51
|
+
* historical note on why `searchEverything` never called it.
|
|
38
52
|
*/
|
|
39
53
|
import { planSearchTxt } from "../../../../utils/search-txt-query.js";
|
|
40
54
|
import { parseSearchTxtQuery, SEARCH_TXT_FIELD } from "../../../../utils/search-txt.js";
|
|
@@ -44,6 +58,19 @@ import { normalizeError } from "../../../../errors/normalize.js";
|
|
|
44
58
|
const PER_GROUP = 6;
|
|
45
59
|
/** The bounded window each push-down reads before the in-memory refine. */
|
|
46
60
|
const SCAN = 60;
|
|
61
|
+
/**
|
|
62
|
+
* 🛑 The ceiling on what ONE viewer's scoped search may read.
|
|
63
|
+
*
|
|
64
|
+
* Σ `scanLimit` across the widest role, checked by
|
|
65
|
+
* `audit-scoped-search-ownership` R4 — which PRINTS THE ARITHMETIC on
|
|
66
|
+
* failure, because "the budget is exceeded" is useless without knowing by
|
|
67
|
+
* which source and how much.
|
|
68
|
+
*
|
|
69
|
+
* 400 against Rule #6's ~3-round-trip guidance is defensible because the
|
|
70
|
+
* sources run in ONE `Promise.all`: it is one round trip of fan-out, not
|
|
71
|
+
* twelve sequential ones. The number that matters is documents read.
|
|
72
|
+
*/
|
|
73
|
+
export const SCOPED_SCAN_BUDGET = 400;
|
|
47
74
|
/**
|
|
48
75
|
* Run every source in parallel and group the results.
|
|
49
76
|
*
|
|
@@ -75,20 +102,41 @@ export async function searchEverything(db, q, sources) {
|
|
|
75
102
|
moreHref: src.moreHref(q),
|
|
76
103
|
};
|
|
77
104
|
try {
|
|
105
|
+
const scan = src.scanLimit ?? SCAN;
|
|
106
|
+
const boundedMemory = src.mode === "bounded-memory";
|
|
78
107
|
let ref = db.collection(src.collection);
|
|
79
108
|
for (const [field, value] of src.where ?? [])
|
|
80
109
|
ref = ref.where(field, "==", value);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
110
|
+
/*
|
|
111
|
+
* 🛑 The two modes differ in ONE clause and in nothing else.
|
|
112
|
+
*
|
|
113
|
+
* `bounded-memory` omits the `array-contains` push-down and does not
|
|
114
|
+
* project `searchTxt` — because the collections that use it do not
|
|
115
|
+
* have one, deliberately (see `mode`). Everything downstream —
|
|
116
|
+
* `toHit`, the PER_GROUP slice, the `truncated` floor — is shared, so
|
|
117
|
+
* the two paths cannot drift in how they REPORT, only in how they
|
|
118
|
+
* find.
|
|
119
|
+
*/
|
|
120
|
+
const snap = boundedMemory
|
|
121
|
+
? await (src.orderBy
|
|
122
|
+
? ref.orderBy(src.orderBy[0], src.orderBy[1])
|
|
123
|
+
: ref)
|
|
124
|
+
.select(...src.select)
|
|
125
|
+
.limit(scan)
|
|
126
|
+
.get()
|
|
127
|
+
: await ref
|
|
128
|
+
.where(SEARCH_TXT_FIELD, "array-contains", plan.head)
|
|
129
|
+
.select(...src.select, SEARCH_TXT_FIELD)
|
|
130
|
+
.limit(scan)
|
|
131
|
+
.get();
|
|
86
132
|
// AND-refine the remaining terms in memory — one push-down per query is
|
|
87
133
|
// all Firestore gives, so the rest is a filter over a bounded window.
|
|
88
|
-
const matched =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
134
|
+
const matched = boundedMemory
|
|
135
|
+
? snap.docs.filter((d) => src.matches?.(d.data(), terms) ?? false)
|
|
136
|
+
: snap.docs.filter((d) => {
|
|
137
|
+
const txt = d.data()[SEARCH_TXT_FIELD] ?? [];
|
|
138
|
+
return plan.rest.every((t) => txt.includes(t));
|
|
139
|
+
});
|
|
92
140
|
const hits = matched
|
|
93
141
|
.map((d) => src.toHit(d.id, d.data()))
|
|
94
142
|
.filter((h) => h !== null);
|
|
@@ -96,8 +144,10 @@ export async function searchEverything(db, q, sources) {
|
|
|
96
144
|
...base,
|
|
97
145
|
hits: hits.slice(0, PER_GROUP),
|
|
98
146
|
// Saturated window OR more matches than we show — either way the
|
|
99
|
-
// count on screen is a floor.
|
|
100
|
-
|
|
147
|
+
// count on screen is a floor. Compared against THIS source's own
|
|
148
|
+
// limit, not the module default: a scoped source scanning 20 that
|
|
149
|
+
// returned 20 is saturated even though 20 < SCAN.
|
|
150
|
+
truncated: snap.docs.length >= scan || hits.length > PER_GROUP,
|
|
101
151
|
};
|
|
102
152
|
}
|
|
103
153
|
catch (err) {
|
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* D2 Fix 4 — which collections `/search` spans, and how each row becomes a hit.
|
|
3
|
-
*
|
|
4
|
-
* 🛑 SIX SOURCES, not fifteen. The redirect page maps 15 `SearchResourceType`
|
|
5
|
-
* values, but nine of them are LISTING TYPES inside `products` — auctions,
|
|
6
|
-
* pre-orders, prize-draws, classified, digital-codes, live, art, bundles. One
|
|
7
|
-
* `products` query covers all of them, and a per-type query would be nine
|
|
8
|
-
* fan-outs returning overlapping rows from one collection.
|
|
9
|
-
*
|
|
10
|
-
* 🛑 Every field here was read off the live documents, not assumed. `stores`
|
|
11
|
-
* uses `storeName` (not `name`), `faqs` uses `question` + `seo.slug`, and
|
|
12
|
-
* `categories` must be filtered to listing rows because brands and bundles
|
|
13
|
-
* share the collection — the same trap that made the `/products` category
|
|
14
|
-
* facet offer "Takara-Tomy" as a browsable category (A1 item 4).
|
|
15
|
-
*/
|
|
16
1
|
import type { SearchSource } from "./search-everything";
|
|
17
2
|
export declare const SEARCH_SOURCES: readonly SearchSource[];
|
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D2 Fix 4 — which collections `/search` spans, and how each row becomes a hit.
|
|
3
|
+
*
|
|
4
|
+
* 🛑 NINE SOURCES, not fifteen. The redirect page maps 15 `SearchResourceType`
|
|
5
|
+
* values, but nine of them are LISTING TYPES inside `products` — auctions,
|
|
6
|
+
* pre-orders, prize-draws, classified, digital-codes, live, art, bundles. One
|
|
7
|
+
* `products` query covers all of them, and a per-type query would be nine
|
|
8
|
+
* fan-outs returning overlapping rows from one collection.
|
|
9
|
+
*
|
|
10
|
+
* 🛑 THREE MORE WERE PLANNED FOR THIS PASS AND DELIBERATELY LEFT OUT. Each
|
|
11
|
+
* would have been a source that renders as a working group and matches
|
|
12
|
+
* nothing, which is worse than an absent one:
|
|
13
|
+
*
|
|
14
|
+
* partGlossary (752 rows) and groupedListings (10) — **0% `searchTxt`
|
|
15
|
+
* coverage**, measured 2026-10-19. This file's mechanism is a single
|
|
16
|
+
* `array-contains` push-down on that field, so a source over either
|
|
17
|
+
* returns zero rows for every query, forever, with a 200. They are the
|
|
18
|
+
* headline gap and they are answered by the prebuilt client index, which
|
|
19
|
+
* needs a title and a slug rather than tokens — not by adding a token
|
|
20
|
+
* writer for 762 documents to serve a query path that index replaces.
|
|
21
|
+
*
|
|
22
|
+
* coupons — 100% token coverage, but there is no per-coupon public route.
|
|
23
|
+
* Every hit would link to `/promotions`, which is already this group's
|
|
24
|
+
* `moreHref`, so eleven rows would all point at one page. The code is
|
|
25
|
+
* worth finding; a group of identical links is not the way.
|
|
26
|
+
*
|
|
27
|
+
* 🛑 Every field here was read off the live documents, not assumed. `stores`
|
|
28
|
+
* uses `storeName` (not `name`), `faqs` uses `question` + `seo.slug`, and
|
|
29
|
+
* `categories` must be filtered to listing rows because brands and bundles
|
|
30
|
+
* share the collection — the same trap that made the `/products` category
|
|
31
|
+
* facet offer "Takara-Tomy" as a browsable category (A1 item 4).
|
|
32
|
+
*/
|
|
33
|
+
// Imported from the DEFINING module, not a barrel (Root Cause #18) — and
|
|
34
|
+
// never from `@mohasinac/appkit/client`, which is `"use client"` and would
|
|
35
|
+
// make ROUTES a client-reference proxy in this server file (Root Cause #76).
|
|
36
|
+
import { ROUTES } from "../../../../next/routing/route-map.js";
|
|
1
37
|
const str = (v) => typeof v === "string" && v.trim() ? v.trim() : null;
|
|
2
38
|
const withQ = (base, q) => q.trim() ? `${base}?q=${encodeURIComponent(q.trim())}` : base;
|
|
3
39
|
export const SEARCH_SOURCES = [
|
|
@@ -28,7 +64,7 @@ export const SEARCH_SOURCES = [
|
|
|
28
64
|
...(detail ? { detail } : {}),
|
|
29
65
|
};
|
|
30
66
|
},
|
|
31
|
-
moreHref: (q) => withQ(
|
|
67
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.PRODUCTS, q),
|
|
32
68
|
},
|
|
33
69
|
{
|
|
34
70
|
key: "categories",
|
|
@@ -55,7 +91,7 @@ export const SEARCH_SOURCES = [
|
|
|
55
91
|
return null;
|
|
56
92
|
return { id, title: name, href: `/categories/${id}` };
|
|
57
93
|
},
|
|
58
|
-
moreHref: (q) => withQ(
|
|
94
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.CATEGORIES, q),
|
|
59
95
|
},
|
|
60
96
|
{
|
|
61
97
|
key: "brands",
|
|
@@ -71,7 +107,7 @@ export const SEARCH_SOURCES = [
|
|
|
71
107
|
const detail = str(d.brandCountry);
|
|
72
108
|
return { id, title: name, href: `/brands/${id}`, ...(detail ? { detail } : {}) };
|
|
73
109
|
},
|
|
74
|
-
moreHref: (q) => withQ(
|
|
110
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.BRANDS, q),
|
|
75
111
|
},
|
|
76
112
|
{
|
|
77
113
|
key: "stores",
|
|
@@ -86,7 +122,7 @@ export const SEARCH_SOURCES = [
|
|
|
86
122
|
return null;
|
|
87
123
|
return { id, title: name, href: `/stores/${id}` };
|
|
88
124
|
},
|
|
89
|
-
moreHref: (q) => withQ(
|
|
125
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.STORES, q),
|
|
90
126
|
},
|
|
91
127
|
{
|
|
92
128
|
key: "blog",
|
|
@@ -106,7 +142,7 @@ export const SEARCH_SOURCES = [
|
|
|
106
142
|
...(detail ? { detail } : {}),
|
|
107
143
|
};
|
|
108
144
|
},
|
|
109
|
-
moreHref: (q) => withQ(
|
|
145
|
+
moreHref: (q) => withQ(ROUTES.BLOG.LIST, q),
|
|
110
146
|
},
|
|
111
147
|
{
|
|
112
148
|
key: "faqs",
|
|
@@ -129,10 +165,109 @@ export const SEARCH_SOURCES = [
|
|
|
129
165
|
return {
|
|
130
166
|
id,
|
|
131
167
|
title: question,
|
|
132
|
-
href: category ?
|
|
168
|
+
href: category ? ROUTES.PUBLIC.FAQ_CATEGORY(category) : ROUTES.PUBLIC.FAQS,
|
|
133
169
|
...(category ? { detail: category.replace(/_/g, " ") } : {}),
|
|
134
170
|
};
|
|
135
171
|
},
|
|
136
|
-
moreHref: (q) => withQ(
|
|
172
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.FAQS, q),
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
key: "events",
|
|
176
|
+
label: "Events",
|
|
177
|
+
collection: "events",
|
|
178
|
+
/*
|
|
179
|
+
* 🛑 No `where` clause, and that is forced rather than lazy. Measured on
|
|
180
|
+
* the live collection: `active` 8, `draft` 1, `paused` 1, `ended` 1,
|
|
181
|
+
* `cancelled` 1. The public set is "not draft, not cancelled" — three
|
|
182
|
+
* values — and `where` here applies `==` only, so a single clause would
|
|
183
|
+
* either publish drafts or hide every paused and ended event. Firestore
|
|
184
|
+
* cannot express the negation either (Root Cause #59). Same in-memory
|
|
185
|
+
* shape the `categories` source uses, for the same reason.
|
|
186
|
+
*
|
|
187
|
+
* `ended` stays visible deliberately: a search answers "do you have this",
|
|
188
|
+
* and an event that happened is a real answer with a real page.
|
|
189
|
+
*/
|
|
190
|
+
select: ["title", "slug", "type", "status"],
|
|
191
|
+
toHit: (id, d) => {
|
|
192
|
+
const title = str(d.title);
|
|
193
|
+
if (!title)
|
|
194
|
+
return null;
|
|
195
|
+
const status = str(d.status);
|
|
196
|
+
if (status === "draft" || status === "cancelled")
|
|
197
|
+
return null;
|
|
198
|
+
const detail = str(d.type);
|
|
199
|
+
return {
|
|
200
|
+
id,
|
|
201
|
+
title,
|
|
202
|
+
href: ROUTES.PUBLIC.EVENT_DETAIL(str(d.slug) ?? id),
|
|
203
|
+
...(detail ? { detail: detail.replace(/_/g, " ") } : {}),
|
|
204
|
+
};
|
|
205
|
+
},
|
|
206
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.EVENTS, q),
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
key: "reviews",
|
|
210
|
+
label: "Reviews",
|
|
211
|
+
collection: "reviews",
|
|
212
|
+
// All 79 live rows are `approved`; the clause is still explicit, because a
|
|
213
|
+
// rejected review surfacing publicly is the failure that matters here.
|
|
214
|
+
where: [["status", "approved"]],
|
|
215
|
+
/*
|
|
216
|
+
* 🛑 `productTitle` as the detail, NEVER `userName`. The field exists on
|
|
217
|
+
* the document and is deliberately absent from `buildReviewSearchTxt`
|
|
218
|
+
* because it is encrypted; `maskPublicReview` is what the public read path
|
|
219
|
+
* uses. A search hit is a public surface and has no business carrying a
|
|
220
|
+
* reviewer's name even in a subtitle.
|
|
221
|
+
*/
|
|
222
|
+
select: ["title", "productTitle", "status"],
|
|
223
|
+
toHit: (id, d) => {
|
|
224
|
+
const title = str(d.title);
|
|
225
|
+
if (!title)
|
|
226
|
+
return null;
|
|
227
|
+
const detail = str(d.productTitle);
|
|
228
|
+
return {
|
|
229
|
+
id,
|
|
230
|
+
title,
|
|
231
|
+
href: ROUTES.PUBLIC.REVIEW_DETAIL(id),
|
|
232
|
+
...(detail ? { detail } : {}),
|
|
233
|
+
};
|
|
234
|
+
},
|
|
235
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.REVIEWS, q),
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
key: "scammers",
|
|
239
|
+
label: "Scam reports",
|
|
240
|
+
collection: "scammerProfiles",
|
|
241
|
+
/*
|
|
242
|
+
* 🛑 `verified` ONLY, and this clause is the whole point of the source.
|
|
243
|
+
* Measured live: `verified` 3, `pending_review` 1, `rejected` 1. Surfacing
|
|
244
|
+
* an unverified or rejected accusation in site-wide search publishes an
|
|
245
|
+
* allegation the moderation queue has not accepted — against a named
|
|
246
|
+
* person, with their phone and UPI on the page. The scam registry is
|
|
247
|
+
* deliberately public and plaintext-indexed for SEO, which makes getting
|
|
248
|
+
* this clause right more load-bearing here than anywhere else, not less.
|
|
249
|
+
*/
|
|
250
|
+
where: [["status", "verified"]],
|
|
251
|
+
/*
|
|
252
|
+
* 🛑 `displayNames` is an ARRAY, not a string — read off the live
|
|
253
|
+
* documents, which is what this file's header asks for and what caught it.
|
|
254
|
+
* A `str(d.displayName)` would have returned null for every row and the
|
|
255
|
+
* group would simply never have appeared.
|
|
256
|
+
*/
|
|
257
|
+
select: ["displayNames", "scamType", "slug"],
|
|
258
|
+
toHit: (id, d) => {
|
|
259
|
+
const names = Array.isArray(d.displayNames) ? d.displayNames : [];
|
|
260
|
+
const title = str(names[0]);
|
|
261
|
+
if (!title)
|
|
262
|
+
return null;
|
|
263
|
+
const detail = str(d.scamType);
|
|
264
|
+
return {
|
|
265
|
+
id,
|
|
266
|
+
title,
|
|
267
|
+
href: ROUTES.PUBLIC.SCAM_DETAIL(str(d.slug) ?? id),
|
|
268
|
+
...(detail ? { detail: detail.replace(/_/g, " ") } : {}),
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
moreHref: (q) => withQ(ROUTES.PUBLIC.SCAMS, q),
|
|
137
272
|
},
|
|
138
273
|
];
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// The defining module, not the `/client` entry — this is reached from
|
|
2
|
+
// server-only metadata paths (Root Cause #76).
|
|
3
|
+
import { ROUTES } from "../../../../next/routing/route-map.js";
|
|
1
4
|
export function buildRobots({ siteUrl }) {
|
|
2
5
|
return {
|
|
3
6
|
rules: [
|
|
@@ -12,7 +15,24 @@ export function buildRobots({ siteUrl }) {
|
|
|
12
15
|
"/auth/",
|
|
13
16
|
"/checkout/",
|
|
14
17
|
"/cart/",
|
|
15
|
-
|
|
18
|
+
/*
|
|
19
|
+
* The one entry here that is a PAGE rather than a subtree prefix —
|
|
20
|
+
* its twelve siblings end in "/" because they disallow a whole tree,
|
|
21
|
+
* and `/wishlist` is a single route. So it genuinely is a route
|
|
22
|
+
* reference and takes the constant; the earlier
|
|
23
|
+
* eslint-disable here was treating a real finding as noise.
|
|
24
|
+
*/
|
|
25
|
+
ROUTES.USER.WISHLIST,
|
|
26
|
+
/*
|
|
27
|
+
* Admin-only tool under a public prefix. Belongs here for the same
|
|
28
|
+
* reason /admin/ does, and takes the CONSTANT rather than a literal
|
|
29
|
+
* so a route rename cannot leave this entry pointing at nothing.
|
|
30
|
+
*
|
|
31
|
+
* 🛑 A Disallow stops the crawl, which means the page's own
|
|
32
|
+
* `noindex` is never read — the layout's server-side redirect is
|
|
33
|
+
* what actually guarantees there is no indexable content here.
|
|
34
|
+
*/
|
|
35
|
+
ROUTES.PUBLIC.TOOL_STICKER_TRACER,
|
|
16
36
|
"/preview/",
|
|
17
37
|
"/track/",
|
|
18
38
|
"/unauthorized/",
|
|
@@ -117,7 +117,7 @@ function staticPages(baseUrl) {
|
|
|
117
117
|
page(String(ROUTES.PUBLIC.AUCTIONS), "daily", 0.9),
|
|
118
118
|
page(String(ROUTES.PUBLIC.CATEGORIES), "weekly", 0.8),
|
|
119
119
|
page(String(ROUTES.PUBLIC.BRANDS), "weekly", 0.7),
|
|
120
|
-
page(String(ROUTES.
|
|
120
|
+
page(String(ROUTES.BLOG.LIST), "daily", 0.7),
|
|
121
121
|
page(String(ROUTES.PUBLIC.EVENTS), "daily", 0.7),
|
|
122
122
|
page(String(ROUTES.PUBLIC.SELLERS), "weekly", 0.6),
|
|
123
123
|
page(String(ROUTES.PUBLIC.ABOUT), "monthly", 0.5),
|
|
@@ -141,6 +141,12 @@ function staticPages(baseUrl) {
|
|
|
141
141
|
page(String(ROUTES.PUBLIC.DIGITAL_CODES), "daily", 0.6),
|
|
142
142
|
page(String(ROUTES.PUBLIC.LIVE), "hourly", 0.7),
|
|
143
143
|
page(String(ROUTES.PUBLIC.ART), "weekly", 0.6),
|
|
144
|
+
/*
|
|
145
|
+
* `daily`, matching the other one-of-a-kind types rather than `/art`'s
|
|
146
|
+
* weekly: most spares are quantity 1, so the page turns over as fast as
|
|
147
|
+
* classifieds do.
|
|
148
|
+
*/
|
|
149
|
+
page(String(ROUTES.PUBLIC.SPARES), "daily", 0.6),
|
|
144
150
|
page(String(ROUTES.PUBLIC.FEES), "monthly", 0.4),
|
|
145
151
|
page(String(ROUTES.PUBLIC.HOW_AUCTIONS_WORK), "monthly", 0.4),
|
|
146
152
|
page(String(ROUTES.PUBLIC.HOW_PRE_ORDERS_WORK), "monthly", 0.4),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { productImageUrls } from "../../../../features/products/schemas/firestore.js";
|
|
1
2
|
/** Maps the shared fields from a raw Firestore ProductDocument. */
|
|
2
3
|
export function mapBaseListingFields(doc) {
|
|
3
4
|
return {
|
|
@@ -10,8 +11,9 @@ export function mapBaseListingFields(doc) {
|
|
|
10
11
|
// bypassing <GatedPrice> entirely — and it had zero readers, so it was
|
|
11
12
|
// pure exposure. Clients format from `price` through the gate.
|
|
12
13
|
currency: doc.currency ?? "INR",
|
|
13
|
-
mainImage: doc.mainImage || doc.images?.[0] || null,
|
|
14
|
-
|
|
14
|
+
mainImage: doc.mainImage || doc.images?.[0]?.url || null,
|
|
15
|
+
// A6: the client listing shape is still `string[]`; project, never mirror.
|
|
16
|
+
images: productImageUrls(doc.images),
|
|
15
17
|
storeId: doc.storeId,
|
|
16
18
|
storeName: doc.storeName ?? null,
|
|
17
19
|
category: doc.categorySlugs?.[0] ?? doc.category ?? "",
|
|
@@ -55,14 +55,26 @@ export const getProductFeaturesForStore = cache(async (storeId) => safeRead(() =
|
|
|
55
55
|
// Export names in stores/data.ts stay identical so consumers need no changes.
|
|
56
56
|
export function makeGetStoreListingsInitial(type, pageSize) {
|
|
57
57
|
return cache(async (storeId, page = 1) => {
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
/*
|
|
59
|
+
* 🛑 `safeRead`, not `.catch(() => null)`. This factory backs every
|
|
60
|
+
* per-type store listing tab, so a swallowed failure renders a seller's
|
|
61
|
+
* page as "no listings" — which is Root Cause #59's exact shape, where a
|
|
62
|
+
* `FAILED_PRECONDITION` from a missing composite index was indistinguishable
|
|
63
|
+
* from an empty catalogue and stayed invisible for weeks.
|
|
64
|
+
*
|
|
65
|
+
* Same `null` fallback and same empty render; the difference is that the
|
|
66
|
+
* failure now lands in `serverErrors` as a `DEGRADED_READ`.
|
|
67
|
+
*/
|
|
68
|
+
const result = await safeRead(() => productRepository.list({
|
|
60
69
|
filters: `storeId==${storeId},status==published,listingType==${type}`,
|
|
61
70
|
sorts: "-createdAt",
|
|
62
71
|
page,
|
|
63
72
|
pageSize,
|
|
64
|
-
})
|
|
65
|
-
|
|
73
|
+
}), {
|
|
74
|
+
route: `store-listing:${type}`,
|
|
75
|
+
key: "products.listByStoreAndType",
|
|
76
|
+
fallback: null,
|
|
77
|
+
});
|
|
66
78
|
return { items: result?.items ?? [], total: result?.total ?? 0 };
|
|
67
79
|
});
|
|
68
80
|
}
|
|
@@ -37,7 +37,7 @@ import type { PublicSiteSettings } from "../../../shared/features/site-settings/
|
|
|
37
37
|
* was traced to a call site; anything without one belongs in the private list,
|
|
38
38
|
* because an unused public field is pure attack surface.
|
|
39
39
|
*/
|
|
40
|
-
export declare const PUBLIC_SITE_SETTINGS_FIELDS: readonly ["contact", "payment", "listings", "notificationChannels", "announcementBar", "navConfig", "actionConfig", "background", "watermark", "disabledRoutes", "chat"];
|
|
40
|
+
export declare const PUBLIC_SITE_SETTINGS_FIELDS: readonly ["contact", "payment", "listings", "notificationChannels", "announcementBar", "navConfig", "actionConfig", "background", "watermark", "disabledRoutes", "chat", "search"];
|
|
41
41
|
/** Everything else, with the reason it stays server-side. */
|
|
42
42
|
export declare const PRIVATE_SITE_SETTINGS_FIELDS: readonly ["id", "createdAt", "updatedAt", "credentials", "emailSettings", "legalPages", "commissions", "emi", "gst", "laborRate", "adSettings", "integrations", "platformLimits", "auctionConfig", "siteName", "tagline", "motto", "logo", "favicon", "seo", "socialLinks", "features", "shipping", "returns", "faq", "aboutContent", "navbarConfig", "footerConfig", "theme", "featuredResults", "messaging"];
|
|
43
43
|
export interface ToPublicSiteSettingsOptions {
|
|
@@ -37,6 +37,20 @@ export const PUBLIC_SITE_SETTINGS_FIELDS = [
|
|
|
37
37
|
// render a "Message seller" CTA at all. Narrowed to `enabled` only; there is
|
|
38
38
|
// nothing else in the group.
|
|
39
39
|
"chat",
|
|
40
|
+
/*
|
|
41
|
+
* useSearchIndex — the kill switch for the browser-side search artifact.
|
|
42
|
+
*
|
|
43
|
+
* Public because the reader is a GUEST's search box: search is the one
|
|
44
|
+
* surface that must work before anyone signs in, so a server-only flag
|
|
45
|
+
* could not reach the visitor it governs. Publishing it discloses one
|
|
46
|
+
* boolean meaning "site search currently falls back to the server path",
|
|
47
|
+
* which is observable from the outside anyway by watching which request
|
|
48
|
+
* the page makes.
|
|
49
|
+
*
|
|
50
|
+
* 🛑 It fails OPEN on absence (`!== false`), so a settings fetch that fails
|
|
51
|
+
* leaves search working rather than dark — see the schema note.
|
|
52
|
+
*/
|
|
53
|
+
"search",
|
|
40
54
|
];
|
|
41
55
|
/** Everything else, with the reason it stays server-side. */
|
|
42
56
|
export const PRIVATE_SITE_SETTINGS_FIELDS = [
|
|
@@ -112,5 +126,17 @@ export function toPublicSiteSettings(doc, opts) {
|
|
|
112
126
|
effectiveWatermark: opts?.effectiveWatermark,
|
|
113
127
|
// D9 — undefined reads as OFF, never a default-true `??`.
|
|
114
128
|
chat: { enabled: doc.chat?.enabled === true },
|
|
129
|
+
/*
|
|
130
|
+
* 🛑 `!== false`, the opposite of the line above it, and the two sit
|
|
131
|
+
* together deliberately so the difference is visible rather than looking
|
|
132
|
+
* like one of them is a mistake.
|
|
133
|
+
*
|
|
134
|
+
* `chat` is a feature nobody has turned on yet; absent means off. This is
|
|
135
|
+
* a kill switch on a path that is already the primary one; absent means
|
|
136
|
+
* ON, and only an explicit `false` disables it. Normalised here rather
|
|
137
|
+
* than at the reader so there is one place that decides, and a client
|
|
138
|
+
* cannot accidentally re-derive it with `??`.
|
|
139
|
+
*/
|
|
140
|
+
search: { indexEnabled: doc.search?.indexEnabled !== false },
|
|
115
141
|
};
|
|
116
142
|
}
|