@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
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
/*
|
|
3
|
+
* WHY: One query, one matcher, two surfaces — the header dropdown and
|
|
4
|
+
* `/search` must not grow separate notions of what matches.
|
|
5
|
+
* WHAT: The client search hook. Runs the browser matcher over the loaded
|
|
6
|
+
* artifact and returns BOTH shapes: grouped results for the page and
|
|
7
|
+
* flat suggestion rows for the typeahead.
|
|
8
|
+
*
|
|
9
|
+
* ## 🛑 Synchronous per keystroke, and no debounce
|
|
10
|
+
*
|
|
11
|
+
* There is nothing to debounce — a debounce exists to avoid spending a
|
|
12
|
+
* network round trip per character, and this spends none. `searchIndex` is a
|
|
13
|
+
* linear scan over ~3,700 prepared records, measured sub-millisecond by
|
|
14
|
+
* `verify-search-local.mjs`. Adding a 250 ms debounce here would make the box
|
|
15
|
+
* feel SLOWER than the thing it replaced while costing nothing less.
|
|
16
|
+
*
|
|
17
|
+
* The one thing that is async is loading the artifact, once, and `active`
|
|
18
|
+
* gates that (see `useSearchIndex`).
|
|
19
|
+
*
|
|
20
|
+
* ## 🛑 No minimum query length either
|
|
21
|
+
*
|
|
22
|
+
* `useNavSuggestions` gates at 3 characters because each query is a real
|
|
23
|
+
* Firestore round trip and below that the result is dominated by whatever
|
|
24
|
+
* sorts first. Neither clause holds here: a one-character query costs the
|
|
25
|
+
* same nothing, and the matcher ranks rather than truncates. Typing "d" and
|
|
26
|
+
* seeing something is the behaviour a local index is FOR.
|
|
27
|
+
*
|
|
28
|
+
* ## It returns a result even when the index is not in play
|
|
29
|
+
*
|
|
30
|
+
* `status` distinguishes `idle` / `loading` / `ready` / `failed` / `disabled`,
|
|
31
|
+
* and the last two mean *the caller should fall back*, not *show nothing*.
|
|
32
|
+
* A caller that renders an empty state on `loading` is saying "nothing
|
|
33
|
+
* matched" about a question that has not been asked yet.
|
|
34
|
+
*
|
|
35
|
+
* @tag domain:search
|
|
36
|
+
* @tag layer:feature
|
|
37
|
+
* @tag pattern:hook
|
|
38
|
+
* @tag access:client
|
|
39
|
+
* @tag consumers:Search,SearchResultsClient
|
|
40
|
+
* @tag sideEffects:none
|
|
41
|
+
*/
|
|
42
|
+
import * as React from "react";
|
|
43
|
+
import { searchIndex } from "../../../_internal/shared/search/match.js";
|
|
44
|
+
import { countFacets, moreHrefResolver, toSearchResult, } from "../../../_internal/shared/search/to-groups.js";
|
|
45
|
+
import { parseSearchTxtQuery } from "../../../utils/search-txt.js";
|
|
46
|
+
import { useSearchIndex } from "./useSearchIndex.js";
|
|
47
|
+
/**
|
|
48
|
+
* How many hits the matcher is asked for.
|
|
49
|
+
*
|
|
50
|
+
* Generous because grouping happens AFTER: a cap of 20 on a query matching
|
|
51
|
+
* 400 products would starve every other group, since the list is
|
|
52
|
+
* score-ordered and products would fill it. 200 keeps the long tail of types
|
|
53
|
+
* reachable while staying trivial to sort.
|
|
54
|
+
*/
|
|
55
|
+
const MATCH_LIMIT = 200;
|
|
56
|
+
/**
|
|
57
|
+
* `typeKey` -> the five values the header dropdown's icon and badge maps
|
|
58
|
+
* understand.
|
|
59
|
+
*
|
|
60
|
+
* 🛑 A MAPPING rather than a widening of `NavSuggestionRecord["type"]`.
|
|
61
|
+
* That union is public API and is switched on by the dropdown's
|
|
62
|
+
* `DEFAULT_TYPE_ICONS` / `DEFAULT_TYPE_BADGES`; widening it to `string` would
|
|
63
|
+
* compile everywhere and silently render unstyled rows for the 16 index types
|
|
64
|
+
* those maps have never heard of (Root Cause #20). The real key travels
|
|
65
|
+
* alongside, in `typeKey`, for anything that wants it.
|
|
66
|
+
*/
|
|
67
|
+
function suggestionTypeFor(typeKey) {
|
|
68
|
+
switch (typeKey) {
|
|
69
|
+
case "blog":
|
|
70
|
+
return "blog";
|
|
71
|
+
case "event":
|
|
72
|
+
return "event";
|
|
73
|
+
case "category":
|
|
74
|
+
case "brand":
|
|
75
|
+
case "franchise":
|
|
76
|
+
case "bundle":
|
|
77
|
+
case "model":
|
|
78
|
+
case "part":
|
|
79
|
+
return "category";
|
|
80
|
+
case "store":
|
|
81
|
+
case "faq":
|
|
82
|
+
case "review":
|
|
83
|
+
case "scammer":
|
|
84
|
+
case "coupon":
|
|
85
|
+
case "group":
|
|
86
|
+
return "page";
|
|
87
|
+
default:
|
|
88
|
+
// Every listing type — product, auction, pre-order, … — plus anything
|
|
89
|
+
// added to the index later. A listing is the commonest row and the
|
|
90
|
+
// product icon is the right default for an unknown one.
|
|
91
|
+
return "product";
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export function useSiteSearch(query, { active, indexEnabled, types, facets, label }) {
|
|
95
|
+
const { status, index } = useSearchIndex({ active, indexEnabled });
|
|
96
|
+
/*
|
|
97
|
+
* 🛑 `types` and `facets` are arrays, so a caller passing a literal creates
|
|
98
|
+
* a new identity every render and would re-run the scan on every keystroke
|
|
99
|
+
* of an UNCHANGED filter. Keying the memo on the joined strings makes the
|
|
100
|
+
* dependency structural rather than referential.
|
|
101
|
+
*/
|
|
102
|
+
const typeKey = types ? types.join(",") : "";
|
|
103
|
+
const facetKey = facets ? facets.join(",") : "";
|
|
104
|
+
return React.useMemo(() => {
|
|
105
|
+
if (!index) {
|
|
106
|
+
return { status, result: null, suggestions: [], facets: [], builtAt: null };
|
|
107
|
+
}
|
|
108
|
+
const q = query.trim();
|
|
109
|
+
if (!q) {
|
|
110
|
+
return {
|
|
111
|
+
status,
|
|
112
|
+
result: null,
|
|
113
|
+
suggestions: [],
|
|
114
|
+
facets: [],
|
|
115
|
+
builtAt: index.builtAt,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const hits = searchIndex(index.artifact, index.prepared, q, {
|
|
119
|
+
limit: MATCH_LIMIT,
|
|
120
|
+
types: typeKey ? typeKey.split(",") : undefined,
|
|
121
|
+
facets: facetKey ? facetKey.split(",") : undefined,
|
|
122
|
+
});
|
|
123
|
+
/*
|
|
124
|
+
* Terms come from the SAME parser the matcher used, so a query that
|
|
125
|
+
* normalises away ("!!!") reports zero terms and the page can render its
|
|
126
|
+
* "no searchable words" state — which is a different thing from "nothing
|
|
127
|
+
* matched", and the distinction the server tier also draws via
|
|
128
|
+
* `plan.empty`.
|
|
129
|
+
*/
|
|
130
|
+
const terms = parseSearchTxtQuery(q);
|
|
131
|
+
return {
|
|
132
|
+
status,
|
|
133
|
+
result: toSearchResult(q, terms, hits, {
|
|
134
|
+
label,
|
|
135
|
+
moreHref: moreHrefResolver(index.artifact),
|
|
136
|
+
}),
|
|
137
|
+
suggestions: hits.slice(0, 8).map((h) => ({
|
|
138
|
+
objectID: h.href,
|
|
139
|
+
type: suggestionTypeFor(h.typeKey),
|
|
140
|
+
typeKey: h.typeKey,
|
|
141
|
+
title: h.title,
|
|
142
|
+
subtitle: h.detail || undefined,
|
|
143
|
+
url: h.href,
|
|
144
|
+
})),
|
|
145
|
+
facets: countFacets(hits),
|
|
146
|
+
builtAt: index.builtAt,
|
|
147
|
+
};
|
|
148
|
+
}, [index, status, query, typeKey, facetKey, label]);
|
|
149
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
export * from "./types/index.js";
|
|
2
|
-
export * from "./schemas/index.js";
|
|
3
|
-
export * from "./columns/index.js";
|
|
4
|
-
export * from "./hooks/useSearch.js";
|
|
5
1
|
export * from "./hooks/useNavSuggestions.js";
|
|
6
2
|
export * from "./components/index.js";
|
|
7
3
|
export { manifest } from "./manifest.js";
|
|
@@ -1,2 +1,14 @@
|
|
|
1
1
|
import type { FeatureManifest } from "../../contracts";
|
|
2
|
+
/**
|
|
3
|
+
* `default` is `SearchResultsClient`, which is what `[locale]/search/page.tsx`
|
|
4
|
+
* actually renders. It used to say `SearchView` — a component the route has
|
|
5
|
+
* never rendered, from the dead legacy `feat-search` subsystem — and A7
|
|
6
|
+
* (`audit-feature-manifest-routes`) is what this file is the fixed example
|
|
7
|
+
* for.
|
|
8
|
+
*
|
|
9
|
+
* `api/search` (the dead `SearchRepository`-backed GET handler) was removed
|
|
10
|
+
* from `apiRoutes` in the same Wave 10 commit that deleted the route itself
|
|
11
|
+
* — the manifest and the filesystem go empty together, not one claiming the
|
|
12
|
+
* other vanished a week early.
|
|
13
|
+
*/
|
|
2
14
|
export declare const manifest: FeatureManifest;
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `default` is `SearchResultsClient`, which is what `[locale]/search/page.tsx`
|
|
3
|
+
* actually renders. It used to say `SearchView` — a component the route has
|
|
4
|
+
* never rendered, from the dead legacy `feat-search` subsystem — and A7
|
|
5
|
+
* (`audit-feature-manifest-routes`) is what this file is the fixed example
|
|
6
|
+
* for.
|
|
7
|
+
*
|
|
8
|
+
* `api/search` (the dead `SearchRepository`-backed GET handler) was removed
|
|
9
|
+
* from `apiRoutes` in the same Wave 10 commit that deleted the route itself
|
|
10
|
+
* — the manifest and the filesystem go empty together, not one claiming the
|
|
11
|
+
* other vanished a week early.
|
|
12
|
+
*/
|
|
1
13
|
export const manifest = {
|
|
2
14
|
name: "search",
|
|
3
15
|
i18nNamespace: "search",
|
|
4
16
|
envKeys: [],
|
|
5
|
-
routes: [
|
|
17
|
+
routes: [
|
|
18
|
+
{ segment: "[locale]/search", exports: { default: "SearchResultsClient" } },
|
|
19
|
+
],
|
|
6
20
|
apiRoutes: [
|
|
7
|
-
{ segment: "api/search", methods: ["GET"] },
|
|
21
|
+
{ segment: "api/search/scoped", methods: ["GET"] },
|
|
22
|
+
{ segment: "api/search/suggestions", methods: ["GET"] },
|
|
8
23
|
{ segment: "api/categories/flat", methods: ["GET"] },
|
|
9
24
|
],
|
|
10
25
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Business logic for the Make-an-Offer feature lifecycle.
|
|
5
5
|
* Auth, rate-limiting, and input validation are handled by the calling server action.
|
|
6
6
|
*/
|
|
7
|
-
import type { OfferDocument } from "../schemas";
|
|
7
|
+
import type { OfferDocument, OfferPlain } from "../schemas";
|
|
8
8
|
/**
|
|
9
9
|
* How long an accepted offer stays claimable at its locked price. Shared by the
|
|
10
10
|
* seller-accept path, the buyer-accepts-counter path, and the expiry sweep so
|
|
@@ -28,11 +28,11 @@ export interface BuyerCounterInput {
|
|
|
28
28
|
counterAmount: number;
|
|
29
29
|
buyerNote?: string;
|
|
30
30
|
}
|
|
31
|
-
export declare function makeOffer(userId: string, userEmail: string, input: MakeOfferInput): Promise<
|
|
31
|
+
export declare function makeOffer(userId: string, userEmail: string, input: MakeOfferInput): Promise<OfferPlain>;
|
|
32
32
|
export declare function respondToOffer(userId: string, input: RespondToOfferInput): Promise<OfferDocument>;
|
|
33
33
|
export declare function acceptCounterOffer(userId: string, offerId: string): Promise<OfferDocument>;
|
|
34
|
-
export declare function counterOfferByBuyer(userId: string, userEmail: string, input: BuyerCounterInput): Promise<
|
|
34
|
+
export declare function counterOfferByBuyer(userId: string, userEmail: string, input: BuyerCounterInput): Promise<OfferPlain>;
|
|
35
35
|
export declare function withdrawOffer(userId: string, offerId: string): Promise<void>;
|
|
36
|
-
export declare function listBuyerOffers(userId: string): Promise<
|
|
37
|
-
export declare function listSellerOffers(userId: string): Promise<
|
|
36
|
+
export declare function listBuyerOffers(userId: string): Promise<OfferPlain[]>;
|
|
37
|
+
export declare function listSellerOffers(userId: string): Promise<OfferPlain[]>;
|
|
38
38
|
export declare function checkoutOffer(userId: string, offerId: string): Promise<CartDocument>;
|
|
@@ -12,7 +12,6 @@ import { sendNotification } from "../../admin/actions/notification-actions.js";
|
|
|
12
12
|
import { userRepository } from "../../auth/repository/user.repository.js";
|
|
13
13
|
import { storeRepository } from "../../stores/repository/store.repository.js";
|
|
14
14
|
import { cartRepository } from "../../cart/repository/cart.repository.js";
|
|
15
|
-
import { maskOfferForSeller } from "../../../security/index.js";
|
|
16
15
|
import { ERROR_MESSAGES, AuthorizationError, ValidationError, NotFoundError, OFFER_ERROR_CODES, } from "../../../errors/index.js";
|
|
17
16
|
import { canMakeOffer } from "../../../_internal/shared/listing-types/capabilities.js";
|
|
18
17
|
import { normalizeListingType } from "../../products/utils/listing-type.js";
|
|
@@ -122,17 +121,27 @@ export async function makeOffer(userId, userEmail, input) {
|
|
|
122
121
|
if (alreadyActive)
|
|
123
122
|
throw new ValidationError(ERROR_MESSAGES.OFFER.ACTIVE_OFFER_EXISTS);
|
|
124
123
|
const profile = await userRepository.findById(userId);
|
|
124
|
+
/*
|
|
125
|
+
* 🛑 REVEALED. `createOffer` encrypts `buyerEmail` (`OFFER_PII_FIELDS`), so
|
|
126
|
+
* the ciphertext this read returns would have been encrypted a second time
|
|
127
|
+
* and become permanently unreadable — the seller could never see who made
|
|
128
|
+
* the offer. The sibling `bid-actions.ts:223,481` was fixed for exactly this;
|
|
129
|
+
* this line is the same shape, missed.
|
|
130
|
+
*
|
|
131
|
+
* `userEmail` (the parameter) is already plaintext, so it needs no unwrap.
|
|
132
|
+
*/
|
|
133
|
+
const profilePlain = profile ? userRepository.revealUser(profile) : null;
|
|
125
134
|
const buyerDisplayName = profile?.displayName ?? "Buyer";
|
|
126
135
|
if (!product.storeId)
|
|
127
136
|
throw new ValidationError("Product is not associated with a store.");
|
|
128
|
-
const offer = await offerRepository.
|
|
137
|
+
const offer = await offerRepository.createOffer({
|
|
129
138
|
productId,
|
|
130
139
|
productTitle: product.title,
|
|
131
140
|
productSlug: product.slug,
|
|
132
141
|
productImageUrl: product.mainImage,
|
|
133
142
|
buyerUid: userId,
|
|
134
143
|
buyerName: buyerDisplayName,
|
|
135
|
-
buyerEmail:
|
|
144
|
+
buyerEmail: profilePlain?.email ?? userEmail ?? "",
|
|
136
145
|
storeId: product.storeId,
|
|
137
146
|
storeName: product.storeName ?? "",
|
|
138
147
|
offerAmount,
|
|
@@ -284,14 +293,24 @@ export async function counterOfferByBuyer(userId, userEmail, input) {
|
|
|
284
293
|
// single-field equality served by the automatic index.
|
|
285
294
|
const chainRoot = offer.chainRootOfferId ?? offer.id;
|
|
286
295
|
const nextRound = (offer.counterRound ?? 1) + 1;
|
|
287
|
-
|
|
296
|
+
/*
|
|
297
|
+
* 🛑 A NINTH double-encryption site, found by the nominal brand.
|
|
298
|
+
*
|
|
299
|
+
* A buyer counter creates a NEW offer document carrying the previous round's
|
|
300
|
+
* buyer identity forward. `offer` came from a read, so those two fields are
|
|
301
|
+
* ciphertext — and `createOffer` encrypts `buyerName`/`buyerEmail` again
|
|
302
|
+
* (`OFFER_PII_FIELDS`), so round 2 onward stored a permanently unreadable
|
|
303
|
+
* buyer. Rounds 1 was fine, which is why nothing looked wrong.
|
|
304
|
+
*/
|
|
305
|
+
const offerPlain = offerRepository.revealOffer(offer);
|
|
306
|
+
const newOffer = await offerRepository.createOffer({
|
|
288
307
|
productId: offer.productId,
|
|
289
308
|
productTitle: offer.productTitle,
|
|
290
309
|
productSlug: offer.productSlug,
|
|
291
310
|
productImageUrl: offer.productImageUrl,
|
|
292
311
|
buyerUid: userId,
|
|
293
|
-
buyerName:
|
|
294
|
-
buyerEmail:
|
|
312
|
+
buyerName: offerPlain.buyerName,
|
|
313
|
+
buyerEmail: offerPlain.buyerEmail,
|
|
295
314
|
storeId: offer.storeId,
|
|
296
315
|
storeName: offer.storeName,
|
|
297
316
|
offerAmount: counterAmount,
|
|
@@ -349,14 +368,25 @@ export async function withdrawOffer(userId, offerId) {
|
|
|
349
368
|
// --- Read ------------------------------------------------------------------
|
|
350
369
|
export async function listBuyerOffers(userId) {
|
|
351
370
|
const result = await offerRepository.findByBuyer(userId);
|
|
352
|
-
|
|
371
|
+
/*
|
|
372
|
+
* REVEALED: these are the buyer's OWN offers, so showing them their own name
|
|
373
|
+
* and email in full is the canonical legitimate plaintext read. The seller's
|
|
374
|
+
* view of the same documents goes through `maskedOffer` instead.
|
|
375
|
+
*/
|
|
376
|
+
return result.items.map((o) => offerRepository.revealOffer(o));
|
|
353
377
|
}
|
|
354
378
|
export async function listSellerOffers(userId) {
|
|
355
379
|
const store = await storeRepository.findByOwnerId(userId);
|
|
356
380
|
if (!store)
|
|
357
381
|
return [];
|
|
358
382
|
const result = await offerRepository.findByStore(store.id);
|
|
359
|
-
|
|
383
|
+
/*
|
|
384
|
+
* `maskedOffer`, not `maskOfferForSeller`. The latter calls `maskName`,
|
|
385
|
+
* which refuses ciphertext by design and answers "Anonymous" — and
|
|
386
|
+
* `findByStore` returns raw documents. So the seller's own offers list
|
|
387
|
+
* showed every buyer as Anonymous. `maskedOffer` decrypts first, then masks.
|
|
388
|
+
*/
|
|
389
|
+
return result.items.map((o) => offerRepository.maskedOffer(o));
|
|
360
390
|
}
|
|
361
391
|
// --- Buyer: Checkout accepted offer ----------------------------------------
|
|
362
392
|
export async function checkoutOffer(userId, offerId) {
|
|
@@ -257,7 +257,7 @@ export async function requestPayout(userId, userName, userEmail, input) {
|
|
|
257
257
|
const earnings = await computeSellerEarnings(userId);
|
|
258
258
|
if (earnings.netAmount <= 0 || earnings.eligibleOrders.length === 0)
|
|
259
259
|
throw new ValidationError("No eligible earnings available for payout.");
|
|
260
|
-
const payout = await payoutRepository.
|
|
260
|
+
const payout = await payoutRepository.createPayout({
|
|
261
261
|
storeId: userId,
|
|
262
262
|
sellerName: userName,
|
|
263
263
|
sellerEmail: userEmail,
|
|
@@ -288,6 +288,16 @@ export async function bulkSellerOrder(userId, userRole, userDisplayName, userEma
|
|
|
288
288
|
const userDoc = await userRepository.findById(userId);
|
|
289
289
|
if (!userDoc)
|
|
290
290
|
throw new AuthorizationError("User not found");
|
|
291
|
+
/*
|
|
292
|
+
* 🛑 REVEALED before building a payout — the same active corruption the two
|
|
293
|
+
* payout crons had. `findById` is ciphertext-by-default and `createPayout`
|
|
294
|
+
* encrypts `upiId` again (`PAYOUT_PII_FIELDS`), so the seller-initiated path
|
|
295
|
+
* wrote a permanently unreadable payee address too.
|
|
296
|
+
*
|
|
297
|
+
* `payoutDetails` is encrypted by `encryptPayoutDetails`, a separate scheme
|
|
298
|
+
* from the `piiFields` path, which is why `revealUser` unwraps it explicitly.
|
|
299
|
+
*/
|
|
300
|
+
const userPlain = userRepository.revealUser(userDoc);
|
|
291
301
|
if (!userDoc.payoutDetails?.isConfigured) {
|
|
292
302
|
throw new ValidationError("Payout details are not set up. Please configure your payout method before requesting a payout.");
|
|
293
303
|
}
|
|
@@ -337,7 +347,7 @@ export async function bulkSellerOrder(userId, userRole, userDisplayName, userEma
|
|
|
337
347
|
const grossAmount = ordersTaxableValue(eligible);
|
|
338
348
|
const bulkSiteSettings = await siteSettingsRepository.getSingleton();
|
|
339
349
|
const bulkDeduction = computePayoutDeduction(grossAmount, bulkSiteSettings.commissions);
|
|
340
|
-
const payoutDoc = await payoutRepository.
|
|
350
|
+
const payoutDoc = await payoutRepository.createPayout({
|
|
341
351
|
storeId: userId,
|
|
342
352
|
sellerName: userDisplayName,
|
|
343
353
|
sellerEmail: userEmail,
|
|
@@ -351,14 +361,31 @@ export async function bulkSellerOrder(userId, userRole, userDisplayName, userEma
|
|
|
351
361
|
gstAmount: bulkDeduction.gstOnFee,
|
|
352
362
|
gstRate: bulkSiteSettings.commissions.gstPercent / 100,
|
|
353
363
|
currency: getDefaultCurrency(),
|
|
354
|
-
paymentMethod:
|
|
364
|
+
paymentMethod: userPlain.payoutDetails?.method === "upi"
|
|
355
365
|
? "upi"
|
|
356
366
|
: "bank_transfer",
|
|
357
|
-
upiId:
|
|
358
|
-
?
|
|
367
|
+
upiId: userPlain.payoutDetails?.method === "upi"
|
|
368
|
+
? userPlain.payoutDetails.upiId
|
|
359
369
|
: undefined,
|
|
360
|
-
|
|
361
|
-
|
|
370
|
+
/*
|
|
371
|
+
* 🛑 Only the MASKED subset, matching both payout crons.
|
|
372
|
+
*
|
|
373
|
+
* This used to copy the whole `bankAccount`, including the real
|
|
374
|
+
* `accountNumber` that `encryptPayoutDetails` had encrypted on the user
|
|
375
|
+
* document. `PAYOUT_PII_FIELDS` does not list it and
|
|
376
|
+
* `encryptPayoutBankAccount` is a no-op, so the ciphertext was stored
|
|
377
|
+
* verbatim on the payout where nothing would ever unwrap it — and
|
|
378
|
+
* revealing it instead would store a real account number in the clear.
|
|
379
|
+
* A payout does not need the full number; it needs to identify the account.
|
|
380
|
+
*/
|
|
381
|
+
bankAccount: userPlain.payoutDetails?.method === "bank_transfer" &&
|
|
382
|
+
userPlain.payoutDetails.bankAccount
|
|
383
|
+
? {
|
|
384
|
+
accountHolderName: userPlain.payoutDetails.bankAccount.accountHolderName,
|
|
385
|
+
accountNumberMasked: userPlain.payoutDetails.bankAccount.accountNumberMasked,
|
|
386
|
+
ifscCode: userPlain.payoutDetails.bankAccount.ifscCode,
|
|
387
|
+
bankName: userPlain.payoutDetails.bankAccount.bankName,
|
|
388
|
+
}
|
|
362
389
|
: undefined,
|
|
363
390
|
notes: `Payout request for ${eligible.length} custom-shipped delivered order(s)`,
|
|
364
391
|
});
|
|
@@ -48,7 +48,7 @@ export const GET = createRouteHandler({
|
|
|
48
48
|
filters: combinedFilters,
|
|
49
49
|
sort,
|
|
50
50
|
page,
|
|
51
|
-
|
|
51
|
+
pageSize: pageSize,
|
|
52
52
|
});
|
|
53
53
|
const totalPages = Math.max(1, Math.ceil(result.total / pageSize));
|
|
54
54
|
// Keep same response shape as local route so useSellerProducts hook needs no changes
|
|
@@ -106,7 +106,7 @@ export function SellerBidsView({ endpoint = SELLER_ENDPOINTS.BIDS }) {
|
|
|
106
106
|
sortOptions: SORT_OPTIONS,
|
|
107
107
|
initialView: "list",
|
|
108
108
|
columns,
|
|
109
|
-
mapRows: (response) => toRecordArray(response.
|
|
109
|
+
mapRows: (response) => toRecordArray(response.items).map((item, idx) => ({
|
|
110
110
|
id: toStringValue(item.id, `bid-${idx}`),
|
|
111
111
|
productTitle: toStringValue(item.productTitle, "Unknown auction"),
|
|
112
112
|
productId: toStringValue(item.productId, ""),
|
|
@@ -68,7 +68,7 @@ export function SellerCouponsView({ onCreateClick, onEditClick, onToggle, onDele
|
|
|
68
68
|
{ value: "code", label: "Code A–Z" },
|
|
69
69
|
],
|
|
70
70
|
hideTableView: true,
|
|
71
|
-
mapRows: (response) => toRecordArray(response.
|
|
71
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
|
|
72
72
|
id: toStringValue(item.id, `coupon-${index}`),
|
|
73
73
|
raw: item,
|
|
74
74
|
isActive: getIsActive(item),
|
|
@@ -53,7 +53,7 @@ export interface SellerListingTypeSpec {
|
|
|
53
53
|
* because standard / auction / pre-order / prize-draw do NOT have one — their
|
|
54
54
|
* store routes redirect into the multi-type `SellerProductsView`.
|
|
55
55
|
*/
|
|
56
|
-
export type SellerListingTypeKey = "art" | "stickers" | "classified" | "digital-code" | "live";
|
|
56
|
+
export type SellerListingTypeKey = "art" | "stickers" | "classified" | "digital-code" | "live" | "spares";
|
|
57
57
|
export declare const SELLER_LISTING_TYPE_SPECS: Record<SellerListingTypeKey, SellerListingTypeSpec>;
|
|
58
58
|
export interface SellerListingTypeViewProps {
|
|
59
59
|
onCreateClick?: () => void;
|
|
@@ -87,6 +87,26 @@ export const SELLER_LISTING_TYPE_SPECS = {
|
|
|
87
87
|
}),
|
|
88
88
|
extraColumns: [textCell("size", "Size")],
|
|
89
89
|
},
|
|
90
|
+
spares: {
|
|
91
|
+
editRoute: (id) => String(ROUTES.STORE.SPARES_EDIT(id)),
|
|
92
|
+
newRoute: String(ROUTES.STORE.SPARES_NEW),
|
|
93
|
+
createLabel: "List a Spare",
|
|
94
|
+
bulkKey: "spares",
|
|
95
|
+
deleteLabel: "Spare Listing",
|
|
96
|
+
searchPlaceholder: "Search spares by part or colour...",
|
|
97
|
+
emptyLabel: "No spares listed yet — list a part you have going spare",
|
|
98
|
+
/*
|
|
99
|
+
* Colourway, not size. Two listings of the same part code are told apart by
|
|
100
|
+
* COLOUR here — a red Cross Dranzer and a navy one are different objects to
|
|
101
|
+
* a buyer rebuilding a specific top, which is the user's own framing
|
|
102
|
+
* ("sell it to someone who wants it in the same colour"). `printMeta.size`
|
|
103
|
+
* is meaningless on a moulded component.
|
|
104
|
+
*/
|
|
105
|
+
extraFields: (item) => ({
|
|
106
|
+
colourway: toStringValue(item.colourway, ""),
|
|
107
|
+
}),
|
|
108
|
+
extraColumns: [textCell("colourway", "Colourway")],
|
|
109
|
+
},
|
|
90
110
|
classified: {
|
|
91
111
|
editRoute: (id) => String(ROUTES.STORE.CLASSIFIED_EDIT(id)),
|
|
92
112
|
newRoute: String(ROUTES.STORE.CLASSIFIED_NEW),
|
|
@@ -230,7 +250,15 @@ export function SellerListingTypeView({ type, onCreateClick, onEditClick, onDele
|
|
|
230
250
|
// four options where its four siblings offered five.
|
|
231
251
|
sortOptions: [...plugin.sortOptions],
|
|
232
252
|
columns,
|
|
233
|
-
mapRows: (response) =>
|
|
253
|
+
mapRows: (response) =>
|
|
254
|
+
/*
|
|
255
|
+
* `items` only. The `?? response.products` fallback is gone because both
|
|
256
|
+
* endpoints this config reads (`/api/admin/products`, `/api/store/products`)
|
|
257
|
+
* now emit the canonical key — verified before removing it. A defence
|
|
258
|
+
* against a shape that no longer exists reads as though the shape still
|
|
259
|
+
* might, which is how two spellings stay alive forever.
|
|
260
|
+
*/
|
|
261
|
+
toRecordArray(response.items).map((item, index) => ({
|
|
234
262
|
id: toStringValue(item.id, `${type}-${index}`),
|
|
235
263
|
title: toStringValue(item.productTitle ?? item.title, "Untitled"),
|
|
236
264
|
price: toCurrency(item.price),
|
|
@@ -398,7 +398,7 @@ export function SellerOrdersView({ orderDetailApiBase = SELLER_ENDPOINTS.ORDERS,
|
|
|
398
398
|
endpoint: SELLER_ENDPOINTS.ORDERS,
|
|
399
399
|
sortOptions: SORT_OPTIONS,
|
|
400
400
|
columns,
|
|
401
|
-
mapRows: (response) => toRecordArray(response.
|
|
401
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => {
|
|
402
402
|
const itemsArr = Array.isArray(item.items) ? item.items : [];
|
|
403
403
|
/*
|
|
404
404
|
* Same legacy fallback as AdminOrdersView: `items[]` is canonical and
|
|
@@ -46,9 +46,17 @@ const payoutSettingsDraftSchema = z.object({
|
|
|
46
46
|
ifscCode: annotate(z.string(), { section: "method", quick: true, order: 5, row: "pair" }),
|
|
47
47
|
bankName: annotate(z.string(), { section: "method", quick: true, order: 6, row: "pair" }),
|
|
48
48
|
accountType: annotate(z.enum(["savings", "current"]), { section: "method", quick: true, order: 7, row: "pair" }),
|
|
49
|
+
// The three fields that identify the SUPPLIER OF RECORD on this store's
|
|
50
|
+
// invoices. A seller with a GSTIN invoices under it; one without
|
|
51
|
+
// invoices under LetItRip's (resolveSupplierIdentity).
|
|
52
|
+
//
|
|
53
|
+
// `pan` and `businessType` were removed 2026-10-19: neither exists on
|
|
54
|
+
// StoreDocument or UserDocument and the route stripped them, so a
|
|
55
|
+
// seller who entered a PAN was told it saved and it went nowhere.
|
|
56
|
+
// An input that provably cannot persist is worse than no input.
|
|
49
57
|
gstin: annotate(z.string(), { section: "tax", sectionLabel: "Tax Info", order: 1, row: "pair" }),
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
legalName: annotate(z.string(), { section: "tax", order: 2, row: "pair" }),
|
|
59
|
+
registeredAddress: annotate(z.string(), { section: "tax", order: 3, row: "full" }),
|
|
52
60
|
autoPayout: annotate(z.boolean(), {
|
|
53
61
|
section: "preferences", sectionLabel: "Preferences", order: 1, row: "quarter",
|
|
54
62
|
}),
|
|
@@ -110,8 +118,8 @@ const DEFAULT_DRAFT = {
|
|
|
110
118
|
bankName: "",
|
|
111
119
|
accountType: "savings",
|
|
112
120
|
gstin: "",
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
legalName: "",
|
|
122
|
+
registeredAddress: "",
|
|
115
123
|
autoPayout: true,
|
|
116
124
|
minimumThreshold: "",
|
|
117
125
|
emiEnabled: false,
|
|
@@ -142,9 +150,22 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
142
150
|
ifscCode: details.bankAccount?.ifscCode ?? "",
|
|
143
151
|
bankName: details.bankAccount?.bankName ?? "",
|
|
144
152
|
accountType: details.bankAccount?.accountType ?? "savings",
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
153
|
+
/*
|
|
154
|
+
* 🛑 Flat fields, NOT `res.data.taxInfo.*`.
|
|
155
|
+
*
|
|
156
|
+
* `taxInfo` is a key the route has never returned, so these three
|
|
157
|
+
* inputs were ALWAYS blank on load no matter what had been saved —
|
|
158
|
+
* and the save side posted a `taxInfo` object that the route's
|
|
159
|
+
* `z.object()` schema silently stripped. A seller could type their
|
|
160
|
+
* GSTIN, get a success toast, reload, and find it gone.
|
|
161
|
+
*
|
|
162
|
+
* The route now declares and persists `gstin` / `legalName` /
|
|
163
|
+
* `registeredAddress` on the STORE, because the GSTIN decides who
|
|
164
|
+
* is the supplier of record on that store's invoices.
|
|
165
|
+
*/
|
|
166
|
+
gstin: res?.data?.gstin ?? "",
|
|
167
|
+
legalName: res?.data?.legalName ?? "",
|
|
168
|
+
registeredAddress: res?.data?.registeredAddress ?? "",
|
|
148
169
|
autoPayout: res?.data?.preferences?.autoPayout ?? true,
|
|
149
170
|
minimumThreshold: res?.data?.preferences?.minimumThreshold
|
|
150
171
|
? String(res.data.preferences.minimumThreshold)
|
|
@@ -184,11 +205,11 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
184
205
|
pricesIncludeGst: draft.pricesIncludeGst,
|
|
185
206
|
supportsShippingProtection: draft.supportsShippingProtection,
|
|
186
207
|
supportsSaleProtection: draft.supportsSaleProtection,
|
|
187
|
-
taxInfo
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
208
|
+
// Flat, matching the route's schema. A nested `taxInfo` object was
|
|
209
|
+
// stripped by `z.object()` and never reached Firestore.
|
|
210
|
+
gstin: draft.gstin.trim(),
|
|
211
|
+
legalName: draft.legalName.trim(),
|
|
212
|
+
registeredAddress: draft.registeredAddress.trim(),
|
|
192
213
|
preferences: {
|
|
193
214
|
autoPayout: draft.autoPayout,
|
|
194
215
|
minimumThreshold: Math.round(parseFloat(draft.minimumThreshold || "0") * 100) / 100,
|
|
@@ -244,8 +265,8 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
244
265
|
{
|
|
245
266
|
id: "tax",
|
|
246
267
|
label: "Tax Info",
|
|
247
|
-
fields: ["gstin", "
|
|
248
|
-
render: ({ values, onChange }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Heading, { level: 3, className: "mb-2", children: "Tax Information" }), _jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "sm", children: "Optional
|
|
268
|
+
fields: ["gstin", "legalName", "registeredAddress"],
|
|
269
|
+
render: ({ values, onChange }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Heading, { level: 3, className: "mb-2", children: "Tax Information" }), _jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "sm", children: "Optional. Enter a GSTIN and your orders are invoiced under your own registration; leave it blank and they are invoiced under LetItRip's." }), _jsx(FormField, { name: "gstin", label: "GSTIN (optional)", type: "text", value: values.gstin, onChange: (v) => onChange({ gstin: v.toUpperCase() }), placeholder: "e.g. 22AAAAA0000A1Z5", helpText: "15-character Goods and Services Tax Identification Number.", disabled: busy }), _jsx(FormField, { name: "legalName", label: "Registered legal name (optional)", type: "text", value: values.legalName, onChange: (v) => onChange({ legalName: v }), placeholder: "e.g. Arena Collectibles Pvt Ltd", helpText: "The entity name that appears on the invoice. Leave blank to use your store name.", disabled: busy }), _jsx(FormField, { name: "registeredAddress", label: "Registered address (optional)", type: "text", value: values.registeredAddress, onChange: (v) => onChange({ registeredAddress: v }), placeholder: "Address as registered against your GSTIN", helpText: "Printed on invoices issued under your GSTIN.", disabled: busy })] })),
|
|
249
270
|
},
|
|
250
271
|
{
|
|
251
272
|
id: "preferences",
|
|
@@ -258,7 +279,6 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
258
279
|
const { shellCtx, setFieldError, clearErrors, validate } = useFormShellState(payoutSettingsDraftSchema, { sections: sectionMeta, onGoToSection: goToSection, fieldToSectionIndex });
|
|
259
280
|
useEffect(() => {
|
|
260
281
|
validate(draft);
|
|
261
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
262
282
|
}, [draft, validate]);
|
|
263
283
|
return (_jsx(StackedViewShell, { portal: "seller", title: "Payout Settings", sections: [
|
|
264
284
|
_jsxs(Div, { children: [error && _jsx(Alert, { variant: "error", className: "mb-4", children: error }), success && _jsx(Alert, { variant: "success", className: "mb-4", children: "Payout details saved." }), _jsxs(FormShellContext.Provider, { value: shellCtx, children: [_jsx(FormErrorSummary, {}), _jsx(SectionForm, { sections: sections, values: draft, onChange: update, onSubmit: handleSave, schema: payoutSettingsDraftSchema, openIds: openIds, onOpenChange: setOpenIds, submitLabel: "Save Payout Details", isLoading: busy })] })] }, "payout"),
|
|
@@ -105,7 +105,7 @@ export function SellerPayoutsView({ children, ...props }) {
|
|
|
105
105
|
{ value: sortBy("createdAt", "DESC"), label: "Newest" },
|
|
106
106
|
{ value: sortBy("createdAt", "ASC"), label: "Oldest" },
|
|
107
107
|
],
|
|
108
|
-
mapRows: (response) => toRecordArray(response.
|
|
108
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => {
|
|
109
109
|
const id = toStringValue(item.id, `payout-${index}`);
|
|
110
110
|
rawByIdRef.current[id] = item;
|
|
111
111
|
return {
|