@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { useSearchParams } from "next/navigation.js";
|
|
4
5
|
import { useAuth } from "../../../react/contexts/SessionContext.js";
|
|
5
6
|
import { useConversationThread, useSendMessage, useMarkConversationRead, useBlockConversation, } from "../hooks/useMessages.js";
|
|
6
7
|
import { Div } from "../../../ui/components/Div.js";
|
|
@@ -10,6 +11,10 @@ import { Button } from "../../../ui/components/Button.js";
|
|
|
10
11
|
import { FieldTextarea } from "../../../ui/forms/FieldTextarea.js";
|
|
11
12
|
import { EmptyState } from "../../../ui/components/EmptyState.js";
|
|
12
13
|
import { MediaImage } from "../../media/MediaImage.js";
|
|
14
|
+
import { TextLink } from "../../../ui/components/TextLink.js";
|
|
15
|
+
import { pluginFor } from "../../../_internal/shared/listing-types/_registry.js";
|
|
16
|
+
import { isListingType } from "../../../_internal/shared/listing-types/feature-flags.js";
|
|
17
|
+
import { formatCurrency } from "../../../utils/number.formatter.js";
|
|
13
18
|
function newClientMessageId() {
|
|
14
19
|
// crypto.randomUUID is available in every browser this app targets; a
|
|
15
20
|
// retry reuses the SAME id generated at compose time, not a fresh one per
|
|
@@ -22,7 +27,32 @@ function MessageBubble({ message, isSelf }) {
|
|
|
22
27
|
if (message.deletedAt) {
|
|
23
28
|
return (_jsx(Row, { justify: isSelf ? "end" : "start", children: _jsx(Text, { size: "sm", color: "muted", className: "italic", children: "Message deleted" }) }));
|
|
24
29
|
}
|
|
25
|
-
return (_jsx(Row, { justify: isSelf ? "end" : "start", children: _jsxs(Stack, { gap: "xs", surface: isSelf ? "interactive" : "muted", padding: "sm", rounded: "lg", className: "max-w-[75%]", children: [message.productRef && (
|
|
30
|
+
return (_jsx(Row, { justify: isSelf ? "end" : "start", children: _jsxs(Stack, { gap: "xs", surface: isSelf ? "interactive" : "muted", padding: "sm", rounded: "lg", className: "max-w-[75%]", children: [message.productRef && (
|
|
31
|
+
/*
|
|
32
|
+
* A LINK, and it shows the price.
|
|
33
|
+
*
|
|
34
|
+
* `MessageProductRef` captures `price` and this block ignored it —
|
|
35
|
+
* a declared field with no reader (Root Cause #51's shape) — and the
|
|
36
|
+
* card was not clickable, so the one thing a buyer and seller both
|
|
37
|
+
* want from it (open the item) was missing. The snapshot is taken at
|
|
38
|
+
* send time on purpose, so it keeps reading correctly after the
|
|
39
|
+
* listing changes or is deleted.
|
|
40
|
+
*
|
|
41
|
+
* No `GatedPrice` here: chat requires auth, so there is no signed-out
|
|
42
|
+
* viewer to gate, and the price shown is the one the buyer was
|
|
43
|
+
* looking at when they asked.
|
|
44
|
+
*/
|
|
45
|
+
_jsx(TextLink, { variant: "inherit", href: String(
|
|
46
|
+
/*
|
|
47
|
+
* Narrowed, not cast. The snapshot stores `listingType` as a
|
|
48
|
+
* plain `string` (a message written before the field existed has
|
|
49
|
+
* none), and anything unrecognised falls back to the `standard`
|
|
50
|
+
* route — the correct reading for those older rows and for a type
|
|
51
|
+
* that has since been removed.
|
|
52
|
+
*/
|
|
53
|
+
pluginFor(isListingType(message.productRef.listingType)
|
|
54
|
+
? message.productRef.listingType
|
|
55
|
+
: "standard").detailRoute(message.productRef.productId)), layout: "flex-col", rounded: "md", children: _jsxs(Row, { gap: "sm", surface: "card", padding: "xs", rounded: "md", align: "center", children: [message.productRef.image && (_jsx(Div, { className: "relative h-10 w-10 flex-shrink-0", rounded: "default", overflow: "hidden", children: _jsx(MediaImage, { src: message.productRef.image, alt: message.productRef.title, size: "thumbnail" }) })), _jsxs(Stack, { gap: "none", className: "min-w-0", children: [_jsx(Text, { size: "xs", weight: "semibold", className: "truncate", children: message.productRef.title }), typeof message.productRef.price === "number" && (_jsx(Text, { size: "xs", color: "muted", children: formatCurrency(message.productRef.price, "INR") }))] })] }) })), _jsx(Text, { size: "sm", className: "whitespace-pre-wrap break-words", children: message.body })] }) }));
|
|
26
56
|
}
|
|
27
57
|
export function ConversationThreadView({ conversationId }) {
|
|
28
58
|
const { user, loading } = useAuth();
|
|
@@ -31,6 +61,17 @@ export function ConversationThreadView({ conversationId }) {
|
|
|
31
61
|
const markRead = useMarkConversationRead();
|
|
32
62
|
const block = useBlockConversation();
|
|
33
63
|
const [draft, setDraft] = useState("");
|
|
64
|
+
/*
|
|
65
|
+
* The listing the buyer arrived from, attached to the NEXT message and then
|
|
66
|
+
* cleared — so the card appears once, on the message that asked about it,
|
|
67
|
+
* rather than on every subsequent reply in the thread.
|
|
68
|
+
*
|
|
69
|
+
* Read from `?product=` rather than held on the conversation because the
|
|
70
|
+
* schema is explicit that a product belongs to a message: one thread per
|
|
71
|
+
* pair of people, however many items they discuss.
|
|
72
|
+
*/
|
|
73
|
+
const searchParams = useSearchParams();
|
|
74
|
+
const [attachedProductId, setAttachedProductId] = useState(() => searchParams.get("product") ?? undefined);
|
|
34
75
|
const markedRef = useRef(false);
|
|
35
76
|
const bottomRef = useRef(null);
|
|
36
77
|
useEffect(() => {
|
|
@@ -57,8 +98,10 @@ export function ConversationThreadView({ conversationId }) {
|
|
|
57
98
|
if (!trimmed)
|
|
58
99
|
return;
|
|
59
100
|
const clientMessageId = newClientMessageId();
|
|
60
|
-
send({ body: trimmed, clientMessageId });
|
|
101
|
+
send({ body: trimmed, clientMessageId, productId: attachedProductId });
|
|
61
102
|
setDraft("");
|
|
103
|
+
// Once attached, it is spent — the next message is a plain reply.
|
|
104
|
+
setAttachedProductId(undefined);
|
|
62
105
|
};
|
|
63
106
|
// Newest-first from the API, so reverse for display (oldest at top).
|
|
64
107
|
const items = data ? [...data.items].reverse() : [];
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
export interface MessageSellerButtonProps {
|
|
2
2
|
storeId: string;
|
|
3
|
+
/**
|
|
4
|
+
* The listing this button was clicked from, carried into the thread so the
|
|
5
|
+
* buyer's first message renders as a PRODUCT CARD.
|
|
6
|
+
*
|
|
7
|
+
* 🛑 Without it the whole card pipeline is unreachable. `sendMessage` builds
|
|
8
|
+
* a `MessageProductRef` from a `productId`, `MessageBubble` renders it, and
|
|
9
|
+
* `POST /api/messages/[conversationId]` accepts it — but the ONLY caller of
|
|
10
|
+
* this button is the product detail page, which had the id right there and
|
|
11
|
+
* never passed it. So a buyer landed in a bare thread and had to TYPE which
|
|
12
|
+
* item they meant: a block of words where a card belongs. Root Cause #103's
|
|
13
|
+
* shape — a feature complete in every direction except the one that puts
|
|
14
|
+
* data in.
|
|
15
|
+
*/
|
|
16
|
+
productId?: string;
|
|
3
17
|
/** Render nothing when the viewer owns this store — comparing storeId
|
|
4
18
|
* client-side is an optional convenience; the server refuses it either way. */
|
|
5
19
|
isOwnStore?: boolean;
|
|
@@ -14,4 +28,4 @@ export interface MessageSellerButtonProps {
|
|
|
14
28
|
* Absent entirely when chat is off or the viewer is the store's own owner —
|
|
15
29
|
* never rendered-but-disabled, same discipline as the nav icon.
|
|
16
30
|
*/
|
|
17
|
-
export declare function MessageSellerButton({ storeId, isOwnStore, className }: MessageSellerButtonProps): import("react").JSX.Element | null;
|
|
31
|
+
export declare function MessageSellerButton({ storeId, productId, isOwnStore, className }: MessageSellerButtonProps): import("react").JSX.Element | null;
|
|
@@ -16,7 +16,7 @@ import { ACTIONS } from "../../../_internal/shared/actions/action-registry.js";
|
|
|
16
16
|
* Absent entirely when chat is off or the viewer is the store's own owner —
|
|
17
17
|
* never rendered-but-disabled, same discipline as the nav icon.
|
|
18
18
|
*/
|
|
19
|
-
export function MessageSellerButton({ storeId, isOwnStore, className }) {
|
|
19
|
+
export function MessageSellerButton({ storeId, productId, isOwnStore, className }) {
|
|
20
20
|
const router = useRouter();
|
|
21
21
|
const { user } = useAuth();
|
|
22
22
|
const { data: settings } = useSiteSettings();
|
|
@@ -26,7 +26,15 @@ export function MessageSellerButton({ storeId, isOwnStore, className }) {
|
|
|
26
26
|
return (_jsx(Button, { action: ACTIONS.PRODUCT["message-seller"], size: "sm", isLoading: isPending, className: className, onClick: () => {
|
|
27
27
|
mutate({ storeId }, {
|
|
28
28
|
onSuccess: (conversation) => {
|
|
29
|
-
|
|
29
|
+
/*
|
|
30
|
+
* `?product=` rather than a new conversation per listing. The
|
|
31
|
+
* schema is explicit that a product attaches to a MESSAGE, never
|
|
32
|
+
* to the thread — "a buyer with three questions about three items
|
|
33
|
+
* wants one thread, not three" — so the id rides in the URL and
|
|
34
|
+
* the composer attaches it to the next message sent.
|
|
35
|
+
*/
|
|
36
|
+
const href = String(ROUTES.USER.MESSAGE_THREAD(conversation.id));
|
|
37
|
+
router.push(productId ? `${href}?product=${encodeURIComponent(productId)}` : href);
|
|
30
38
|
},
|
|
31
39
|
});
|
|
32
40
|
} }));
|
|
@@ -44,6 +44,21 @@ export interface MessageProductRef {
|
|
|
44
44
|
productId: string;
|
|
45
45
|
title: string;
|
|
46
46
|
image?: string;
|
|
47
|
+
/**
|
|
48
|
+
* 🛑 Required for the card to LINK anywhere correct.
|
|
49
|
+
*
|
|
50
|
+
* Nine listing types have five different detail routes
|
|
51
|
+
* (`/auctions/…`, `/pre-orders/…`, `/prize-draws/…`, `/classified/…`, …) and
|
|
52
|
+
* `pluginFor(type).detailRoute()` is the only thing that knows which. A card
|
|
53
|
+
* that hardcodes `/products/{slug}` sends an auction to the standard product
|
|
54
|
+
* page — which is Root Cause #48 exactly: a doc→card mapper dropping
|
|
55
|
+
* `listingType` and the link going wrong because of the one field it lost.
|
|
56
|
+
*
|
|
57
|
+
* Optional only because a message sent before this field existed has none;
|
|
58
|
+
* `normalizeListingType` resolves an absent value to `"standard"`, which is
|
|
59
|
+
* the correct reading for those rows.
|
|
60
|
+
*/
|
|
61
|
+
listingType?: string;
|
|
47
62
|
/** Omitted for a guest-gated listing snapshot taken while signed out is not
|
|
48
63
|
* possible here — chat requires auth — but still optional: a product can be
|
|
49
64
|
* archived/deleted between send and render. */
|
|
@@ -18,8 +18,10 @@ export function useOrders(params = {}, opts) {
|
|
|
18
18
|
sp.set("sort", params.sort);
|
|
19
19
|
if (params.page)
|
|
20
20
|
sp.set("page", String(params.page));
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
// `pageSize` is what the route prefers; it keeps reading `perPage` only for
|
|
22
|
+
// links built before the rename, so there is no reason to emit the old name.
|
|
23
|
+
if (params.pageSize)
|
|
24
|
+
sp.set("pageSize", String(params.pageSize));
|
|
23
25
|
const qs = sp.toString();
|
|
24
26
|
// ORDER_ENDPOINTS.LIST ("/api/orders") has no GET route handler — every
|
|
25
27
|
// real caller of this hook wants the current user's own orders, served by
|
|
@@ -2,7 +2,7 @@ import type { JsonValue } from "../../../schemas/types";
|
|
|
2
2
|
import type { DocumentReference, WriteBatch } from "firebase-admin/firestore";
|
|
3
3
|
import type { FirebaseSieveResult, SieveModel } from "../../../providers/db-firebase";
|
|
4
4
|
import { BaseRepository, parseSieveDateValue } from "../../../providers/db-firebase";
|
|
5
|
-
import { type OrderCreateInput, type OrderDocument, type OrderRefundEvent } from "../schemas";
|
|
5
|
+
import { type OrderCreateInput, type OrderDocument, type OrderPlain, type OrderRefundEvent } from "../schemas";
|
|
6
6
|
import { type HistoryActor, type FieldChange } from "../../../_internal/shared/history/index";
|
|
7
7
|
import type { OrderStatus, PaymentStatus } from "../types";
|
|
8
8
|
import { type PaymentReviewQueueMode } from "../constants/payment-window";
|
|
@@ -26,7 +26,6 @@ export interface OrderWriteContext {
|
|
|
26
26
|
}
|
|
27
27
|
declare class OrderRepository extends BaseRepository<OrderDocument> {
|
|
28
28
|
constructor();
|
|
29
|
-
private decryptOrder;
|
|
30
29
|
/**
|
|
31
30
|
* Declared, not hand-rolled.
|
|
32
31
|
*
|
|
@@ -39,8 +38,20 @@ declare class OrderRepository extends BaseRepository<OrderDocument> {
|
|
|
39
38
|
* call.
|
|
40
39
|
*/
|
|
41
40
|
protected piiFields: readonly ["userName", "userEmail", "sellerEmail"];
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
/** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
|
|
42
|
+
revealOrder(doc: OrderDocument): OrderPlain;
|
|
43
|
+
/** As `revealOrder`, for a list read. */
|
|
44
|
+
revealOrders(docs: readonly OrderDocument[]): OrderPlain[];
|
|
45
|
+
/**
|
|
46
|
+
* Masked PII — **the default for any surface that only needs to identify a
|
|
47
|
+
* row to a human.** Decrypts first, then masks: the mask helpers refuse
|
|
48
|
+
* ciphertext by design, so passing a stored field straight in would return
|
|
49
|
+
* "Anonymous" for every row.
|
|
50
|
+
*/
|
|
51
|
+
maskedOrder(doc: OrderDocument): OrderPlain;
|
|
52
|
+
/** As `maskedOrder`, for a list read. */
|
|
53
|
+
maskedOrders(docs: readonly OrderDocument[]): OrderPlain[];
|
|
54
|
+
createOrder(input: OrderCreateInput): Promise<OrderPlain>;
|
|
44
55
|
findByUser(userId: string): Promise<OrderDocument[]>;
|
|
45
56
|
findByProduct(productId: string): Promise<OrderDocument[]>;
|
|
46
57
|
findByStatus(status: OrderStatus): Promise<OrderDocument[]>;
|
|
@@ -3,7 +3,7 @@ import { planSearchTxt, beginSearchWindow, emptySearchResult, } from "../../../u
|
|
|
3
3
|
import { normalizeError } from "../../../errors/normalize.js";
|
|
4
4
|
import { DatabaseError, NotFoundError } from "../../../errors/index.js";
|
|
5
5
|
import { BaseRepository, prepareForFirestore, parseSieveDateValue, } from "../../../providers/db-firebase/index.js";
|
|
6
|
-
import {
|
|
6
|
+
import { maskPii, revealPii, ORDER_PII_FIELDS, } from "../../../security/index.js";
|
|
7
7
|
import { serverTimestamp, arrayUnion } from "../../../contracts/field-ops.js";
|
|
8
8
|
import { createOrderId, ORDER_COLLECTION, ORDER_TRACKED_FIELDS, OrderStatusValues, } from "../schemas/index.js";
|
|
9
9
|
import { withHistory } from "../../../_internal/shared/history/index.js";
|
|
@@ -37,18 +37,49 @@ class OrderRepository extends BaseRepository {
|
|
|
37
37
|
*/
|
|
38
38
|
this.piiFields = ORDER_PII_FIELDS;
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
/*
|
|
41
|
+
* 🛑 `mapDoc` is NOT overridden, and that absence IS the change.
|
|
42
|
+
*
|
|
43
|
+
* It used to decrypt on every read, so ciphertext never left the database
|
|
44
|
+
* and every caller handled plaintext without ever saying so. Following
|
|
45
|
+
* `SiteSettingsRepository`: reads return what Firestore holds, and plaintext
|
|
46
|
+
* requires one of the two named methods below.
|
|
47
|
+
*
|
|
48
|
+
* A convention would not hold this. `OrderDocument`'s PII fields are
|
|
49
|
+
* `Encrypted<string>`, assignable to nothing that wants a plain `string`, so
|
|
50
|
+
* a reader that skips both accessors is a compile error naming file and line.
|
|
51
|
+
*/
|
|
52
|
+
/** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
|
|
53
|
+
revealOrder(doc) {
|
|
54
|
+
return revealPii(doc, ORDER_PII_FIELDS);
|
|
44
55
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return this.
|
|
56
|
+
/** As `revealOrder`, for a list read. */
|
|
57
|
+
revealOrders(docs) {
|
|
58
|
+
return docs.map((d) => this.revealOrder(d));
|
|
48
59
|
}
|
|
49
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Masked PII — **the default for any surface that only needs to identify a
|
|
62
|
+
* row to a human.** Decrypts first, then masks: the mask helpers refuse
|
|
63
|
+
* ciphertext by design, so passing a stored field straight in would return
|
|
64
|
+
* "Anonymous" for every row.
|
|
65
|
+
*/
|
|
66
|
+
maskedOrder(doc) {
|
|
67
|
+
return maskPii(doc, ORDER_PII_FIELDS);
|
|
68
|
+
}
|
|
69
|
+
/** As `maskedOrder`, for a list read. */
|
|
70
|
+
maskedOrders(docs) {
|
|
71
|
+
return docs.map((d) => this.maskedOrder(d));
|
|
72
|
+
}
|
|
73
|
+
/*
|
|
74
|
+
* 🛑 NOT an `override`. It returns the plaintext it was handed rather than
|
|
75
|
+
* re-reading (a read-after-write costs a Firestore read per order), so the
|
|
76
|
+
* return is `OrderPlain` — not assignable to the base's `Promise<T>`, and
|
|
77
|
+
* correctly so, because the two differ.
|
|
78
|
+
*/
|
|
79
|
+
async createOrder(input) {
|
|
50
80
|
const orderDate = new Date();
|
|
51
81
|
const id = createOrderId(input.quantity, orderDate);
|
|
82
|
+
// Plain in, ciphertext out — `applyWriteHooks` encrypts below.
|
|
52
83
|
const orderData = {
|
|
53
84
|
...input,
|
|
54
85
|
orderDate,
|
|
@@ -116,6 +147,7 @@ class OrderRepository extends BaseRepository {
|
|
|
116
147
|
});
|
|
117
148
|
// `null` means no tracked field actually changed — write the patch as-is
|
|
118
149
|
// so an untracked update never grows the array.
|
|
150
|
+
// Plain: this is a write payload and `update` encrypts.
|
|
119
151
|
return this.update(orderId, (withEntry ?? patch));
|
|
120
152
|
}
|
|
121
153
|
async updateStatus(orderId, status, additionalData, ctx) {
|
|
@@ -172,7 +204,7 @@ class OrderRepository extends BaseRepository {
|
|
|
172
204
|
.orderBy(ORDER_FIELDS.CREATED_AT, "asc")
|
|
173
205
|
.limit(200)
|
|
174
206
|
.get();
|
|
175
|
-
return snap.docs.map((doc) =>
|
|
207
|
+
return snap.docs.map((doc) => ({ id: doc.id, ...doc.data() }));
|
|
176
208
|
}
|
|
177
209
|
async updatePaymentStatus(orderId, paymentStatus, paymentId, ctx) {
|
|
178
210
|
return this.updateWithHistory(orderId, {
|
|
@@ -202,7 +234,7 @@ class OrderRepository extends BaseRepository {
|
|
|
202
234
|
.where(ORDER_FIELDS.ORDER_DATE, ">=", new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000))
|
|
203
235
|
.orderBy(ORDER_FIELDS.ORDER_DATE, "desc")
|
|
204
236
|
.get();
|
|
205
|
-
return snapshot.docs.map((doc) =>
|
|
237
|
+
return snapshot.docs.map((doc) => ({
|
|
206
238
|
id: doc.id,
|
|
207
239
|
...doc.data(),
|
|
208
240
|
}));
|
|
@@ -412,7 +444,7 @@ class OrderRepository extends BaseRepository {
|
|
|
412
444
|
.where("paymentBatchId", "==", batchId)
|
|
413
445
|
.limit(20)
|
|
414
446
|
.get();
|
|
415
|
-
return snap.docs.map((d) =>
|
|
447
|
+
return snap.docs.map((d) => ({ id: d.id, ...d.data() }));
|
|
416
448
|
}
|
|
417
449
|
/**
|
|
418
450
|
* Fetch every order recorded against a single gateway payment id (e.g. a
|
|
@@ -428,7 +460,7 @@ class OrderRepository extends BaseRepository {
|
|
|
428
460
|
.where(ORDER_FIELDS.PAYMENT_ID, "==", paymentId)
|
|
429
461
|
.limit(20)
|
|
430
462
|
.get();
|
|
431
|
-
return snap.docs.map((d) =>
|
|
463
|
+
return snap.docs.map((d) => ({ id: d.id, ...d.data() }));
|
|
432
464
|
}
|
|
433
465
|
/**
|
|
434
466
|
* Cloud Functions: find pending orders created before a timeout threshold.
|
|
@@ -447,7 +479,7 @@ class OrderRepository extends BaseRepository {
|
|
|
447
479
|
return snap.docs.map((d) => ({
|
|
448
480
|
id: d.id,
|
|
449
481
|
ref: d.ref,
|
|
450
|
-
data:
|
|
482
|
+
data: { id: d.id, ...d.data() },
|
|
451
483
|
}));
|
|
452
484
|
}
|
|
453
485
|
/**
|
|
@@ -470,7 +502,7 @@ class OrderRepository extends BaseRepository {
|
|
|
470
502
|
.map((d) => ({
|
|
471
503
|
id: d.id,
|
|
472
504
|
ref: d.ref,
|
|
473
|
-
data:
|
|
505
|
+
data: { id: d.id, ...d.data() },
|
|
474
506
|
}))
|
|
475
507
|
.filter((entry) => !entry.data.paymentProofUrl);
|
|
476
508
|
}
|
|
@@ -495,7 +527,7 @@ class OrderRepository extends BaseRepository {
|
|
|
495
527
|
.map((d) => ({
|
|
496
528
|
id: d.id,
|
|
497
529
|
ref: d.ref,
|
|
498
|
-
data:
|
|
530
|
+
data: { id: d.id, ...d.data() },
|
|
499
531
|
}))
|
|
500
532
|
.filter((entry) => !!entry.data.paymentProofUrl && !entry.data.paymentReviewOutcome);
|
|
501
533
|
}
|
|
@@ -537,7 +569,7 @@ class OrderRepository extends BaseRepository {
|
|
|
537
569
|
.limit(PAYMENT_REVIEW_QUEUE_SCAN_LIMIT)
|
|
538
570
|
.get();
|
|
539
571
|
const matches = snap.docs
|
|
540
|
-
.map((d) =>
|
|
572
|
+
.map((d) => ({ id: d.id, ...d.data() }))
|
|
541
573
|
.filter((order) => MANUAL_PAYMENT_METHODS.includes(order.paymentMethod ?? ""))
|
|
542
574
|
.filter((order) => mode === "awaiting_proof"
|
|
543
575
|
? !order.paymentProofUrl
|
|
@@ -573,7 +605,7 @@ class OrderRepository extends BaseRepository {
|
|
|
573
605
|
.map((d) => ({
|
|
574
606
|
id: d.id,
|
|
575
607
|
ref: d.ref,
|
|
576
|
-
data:
|
|
608
|
+
data: { id: d.id, ...d.data() },
|
|
577
609
|
}))
|
|
578
610
|
.filter((o) => !o.data.emiEnabled || o.data.emiComplete);
|
|
579
611
|
}
|
|
@@ -596,7 +628,7 @@ class OrderRepository extends BaseRepository {
|
|
|
596
628
|
.map((d) => ({
|
|
597
629
|
id: d.id,
|
|
598
630
|
ref: d.ref,
|
|
599
|
-
data:
|
|
631
|
+
data: { id: d.id, ...d.data() },
|
|
600
632
|
}))
|
|
601
633
|
.filter((o) => !o.data.emiEnabled || o.data.emiComplete);
|
|
602
634
|
}
|
|
@@ -616,7 +648,7 @@ class OrderRepository extends BaseRepository {
|
|
|
616
648
|
return snap.docs.map((d) => ({
|
|
617
649
|
id: d.id,
|
|
618
650
|
ref: d.ref,
|
|
619
|
-
data:
|
|
651
|
+
data: { id: d.id, ...d.data() },
|
|
620
652
|
}));
|
|
621
653
|
}
|
|
622
654
|
/**
|
|
@@ -8,6 +8,7 @@ import type { ListingType } from "../../products/types";
|
|
|
8
8
|
import type { StatusChangeEntry } from "../../../_internal/shared/history/index";
|
|
9
9
|
import type { ReturnReason } from "../../../_internal/shared/features/orders/return-reasons";
|
|
10
10
|
import type { ReturnCustodyState } from "../../../_internal/shared/features/returns/custody";
|
|
11
|
+
import type { Encrypted, Plaintext } from "../../../security/encrypted";
|
|
11
12
|
export interface OrderSourceStandard {
|
|
12
13
|
path: "standard";
|
|
13
14
|
listPrice: number;
|
|
@@ -320,14 +321,24 @@ export interface AppliedOrderDiscount {
|
|
|
320
321
|
scope?: "admin" | "seller";
|
|
321
322
|
storeId?: string;
|
|
322
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* `OrderDocument` with its PII as plain `string` — what the named repository
|
|
326
|
+
* accessors return, and what a WRITE path accepts (the repository encrypts).
|
|
327
|
+
*
|
|
328
|
+
* `Plaintext<T>` is the one definition of this shape; see `security/encrypted.ts`.
|
|
329
|
+
* It is deliberately NOT distinguishable from a MASKED value — `maskPii`
|
|
330
|
+
* returns plain strings too, and no type can express "these characters are
|
|
331
|
+
* asterisks". The distinction is which named method you called.
|
|
332
|
+
*/
|
|
333
|
+
export type OrderPlain = Plaintext<OrderDocument>;
|
|
323
334
|
export interface OrderDocument extends BaseDocument {
|
|
324
335
|
/** Word-prefix search tokens. Derived on write; never fed by a PII field. */
|
|
325
336
|
searchTxt?: string[];
|
|
326
337
|
productId: string;
|
|
327
338
|
productTitle: string;
|
|
328
339
|
userId: string;
|
|
329
|
-
userName: string
|
|
330
|
-
userEmail: string
|
|
340
|
+
userName: Encrypted<string>;
|
|
341
|
+
userEmail: Encrypted<string>;
|
|
331
342
|
storeId?: string;
|
|
332
343
|
storeName?: string;
|
|
333
344
|
items?: OrderDocumentItem[];
|
|
@@ -778,9 +789,9 @@ export declare const ORDER_UPDATABLE_FIELDS: readonly ["notes", "shippingAddress
|
|
|
778
789
|
* which is every single write — and exhaust the FIFO cap within days.
|
|
779
790
|
*/
|
|
780
791
|
export declare const ORDER_TRACKED_FIELDS: readonly ["status", "paymentStatus", "paymentReviewOutcome", "trackingNumber", "cancellationReason"];
|
|
781
|
-
export type OrderCreateInput = Omit<
|
|
792
|
+
export type OrderCreateInput = Omit<OrderPlain, "id" | "createdAt" | "updatedAt" | "orderDate">;
|
|
782
793
|
export type OrderUpdateInput = Partial<Pick<OrderDocument, (typeof ORDER_UPDATABLE_FIELDS)[number]>>;
|
|
783
|
-
export type OrderAdminUpdateInput = Partial<Omit<
|
|
794
|
+
export type OrderAdminUpdateInput = Partial<Omit<OrderPlain, "id" | "createdAt">>;
|
|
784
795
|
export declare const orderQueryHelpers: {
|
|
785
796
|
readonly byUser: (userId: string) => readonly ["userId", "==", string];
|
|
786
797
|
readonly byStore: (storeId: string) => readonly ["storeId", "==", string];
|
|
@@ -59,10 +59,10 @@ export declare const emiInstallmentSchema: z.ZodObject<{
|
|
|
59
59
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
60
60
|
}, z.ZodTypeAny, "passthrough">;
|
|
61
61
|
transactionId?: string | undefined;
|
|
62
|
+
proofUrl?: string | undefined;
|
|
62
63
|
paidAt?: string | Date | z.objectOutputType<{
|
|
63
64
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
64
65
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
65
|
-
proofUrl?: string | undefined;
|
|
66
66
|
reminderSentAt?: string | Date | z.objectOutputType<{
|
|
67
67
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
68
68
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
@@ -74,10 +74,10 @@ export declare const emiInstallmentSchema: z.ZodObject<{
|
|
|
74
74
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
75
75
|
}, z.ZodTypeAny, "passthrough">;
|
|
76
76
|
transactionId?: string | undefined;
|
|
77
|
+
proofUrl?: string | undefined;
|
|
77
78
|
paidAt?: string | Date | z.objectInputType<{
|
|
78
79
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
79
80
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
80
|
-
proofUrl?: string | undefined;
|
|
81
81
|
reminderSentAt?: string | Date | z.objectInputType<{
|
|
82
82
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
83
83
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
@@ -380,10 +380,10 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
380
380
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
381
381
|
}, z.ZodTypeAny, "passthrough">;
|
|
382
382
|
transactionId?: string | undefined;
|
|
383
|
+
proofUrl?: string | undefined;
|
|
383
384
|
paidAt?: string | Date | z.objectOutputType<{
|
|
384
385
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
385
386
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
386
|
-
proofUrl?: string | undefined;
|
|
387
387
|
reminderSentAt?: string | Date | z.objectOutputType<{
|
|
388
388
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
389
389
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
@@ -395,10 +395,10 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
395
395
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
396
396
|
}, z.ZodTypeAny, "passthrough">;
|
|
397
397
|
transactionId?: string | undefined;
|
|
398
|
+
proofUrl?: string | undefined;
|
|
398
399
|
paidAt?: string | Date | z.objectInputType<{
|
|
399
400
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
400
401
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
401
|
-
proofUrl?: string | undefined;
|
|
402
402
|
reminderSentAt?: string | Date | z.objectInputType<{
|
|
403
403
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
404
404
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
@@ -640,10 +640,10 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
640
640
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
641
641
|
}, z.ZodTypeAny, "passthrough">;
|
|
642
642
|
transactionId?: string | undefined;
|
|
643
|
+
proofUrl?: string | undefined;
|
|
643
644
|
paidAt?: string | Date | z.objectOutputType<{
|
|
644
645
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
645
646
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
646
|
-
proofUrl?: string | undefined;
|
|
647
647
|
reminderSentAt?: string | Date | z.objectOutputType<{
|
|
648
648
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
649
649
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
@@ -788,10 +788,10 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
788
788
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
789
789
|
}, z.ZodTypeAny, "passthrough">;
|
|
790
790
|
transactionId?: string | undefined;
|
|
791
|
+
proofUrl?: string | undefined;
|
|
791
792
|
paidAt?: string | Date | z.objectInputType<{
|
|
792
793
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
793
794
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
794
|
-
proofUrl?: string | undefined;
|
|
795
795
|
reminderSentAt?: string | Date | z.objectInputType<{
|
|
796
796
|
toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
|
|
797
797
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
@@ -1041,15 +1041,15 @@ export declare const orderListParamsSchema: z.ZodObject<{
|
|
|
1041
1041
|
}, "strip", z.ZodTypeAny, {
|
|
1042
1042
|
sort?: string | undefined;
|
|
1043
1043
|
page?: number | undefined;
|
|
1044
|
-
perPage?: number | undefined;
|
|
1045
1044
|
userId?: string | undefined;
|
|
1046
1045
|
paymentStatus?: string | undefined;
|
|
1046
|
+
perPage?: number | undefined;
|
|
1047
1047
|
orderStatus?: "pending" | "delivered" | "confirmed" | "shipped" | "processing" | "return_requested" | "cancelled" | "refunded" | "returned" | undefined;
|
|
1048
1048
|
}, {
|
|
1049
1049
|
sort?: string | undefined;
|
|
1050
1050
|
page?: number | undefined;
|
|
1051
|
-
perPage?: number | undefined;
|
|
1052
1051
|
userId?: string | undefined;
|
|
1053
1052
|
paymentStatus?: string | undefined;
|
|
1053
|
+
perPage?: number | undefined;
|
|
1054
1054
|
orderStatus?: "pending" | "delivered" | "confirmed" | "shipped" | "processing" | "return_requested" | "cancelled" | "refunded" | "returned" | undefined;
|
|
1055
1055
|
}>;
|
|
@@ -312,7 +312,7 @@ export interface OrderListResponse {
|
|
|
312
312
|
items: Order[];
|
|
313
313
|
total: number;
|
|
314
314
|
page: number;
|
|
315
|
-
|
|
315
|
+
pageSize: number;
|
|
316
316
|
totalPages: number;
|
|
317
317
|
}
|
|
318
318
|
export interface OrderListParams {
|
|
@@ -321,5 +321,5 @@ export interface OrderListParams {
|
|
|
321
321
|
paymentStatus?: PaymentStatus;
|
|
322
322
|
sort?: string;
|
|
323
323
|
page?: number;
|
|
324
|
-
|
|
324
|
+
pageSize?: number;
|
|
325
325
|
}
|
|
@@ -41,8 +41,21 @@ export interface PartDetailPageViewProps {
|
|
|
41
41
|
listingsTruncated?: boolean;
|
|
42
42
|
/** Where "see all listings" goes — a real search, not a fabricated filter. */
|
|
43
43
|
allListingsHref: string;
|
|
44
|
+
/**
|
|
45
|
+
* Listings naming THIS exact glossary entry, via `partGlossaryId` — spares
|
|
46
|
+
* and any other individually-sold component carrying it.
|
|
47
|
+
*
|
|
48
|
+
* 🛑 A SEPARATE section from `listings` above, not a narrower version of it.
|
|
49
|
+
* `listings` is a fuzzy name search across the GENERAL catalogue
|
|
50
|
+
* (`GENERIC_PRODUCT_LISTING_TYPES`), which `spares` is deliberately excluded
|
|
51
|
+
* from (`inGeneralCatalogue: false`) — so a spare of this exact part could
|
|
52
|
+
* never appear there no matter how precisely it was titled. This section is
|
|
53
|
+
* the one place that gap is closed.
|
|
54
|
+
*/
|
|
55
|
+
exactListings?: readonly PartListingRow[];
|
|
56
|
+
exactListingsTruncated?: boolean;
|
|
44
57
|
/** A model's own page, when the composition resolved to a category. */
|
|
45
58
|
hrefForModel: (categoryId: string) => string;
|
|
46
59
|
hrefForClassification: (slot: string) => string;
|
|
47
60
|
}
|
|
48
|
-
export declare function PartDetailPageView({ part, usedBy, listings, listingsTruncated, allListingsHref, hrefForModel, hrefForClassification, }: PartDetailPageViewProps): React.JSX.Element;
|
|
61
|
+
export declare function PartDetailPageView({ part, usedBy, listings, listingsTruncated, allListingsHref, exactListings, exactListingsTruncated, hrefForModel, hrefForClassification, }: PartDetailPageViewProps): React.JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Section, Container, Stack, Row, Div, Heading, Text, Span, TextLink, Badge, } from "../../../ui/index.js";
|
|
3
3
|
import { PART_SLOT_LABEL, } from "../schemas/firestore.js";
|
|
4
|
-
export function PartDetailPageView({ part, usedBy, listings, listingsTruncated, allListingsHref, hrefForModel, hrefForClassification, }) {
|
|
4
|
+
export function PartDetailPageView({ part, usedBy, listings, listingsTruncated, allListingsHref, exactListings = [], exactListingsTruncated, hrefForModel, hrefForClassification, }) {
|
|
5
5
|
const classification = PART_SLOT_LABEL[part.slot] ?? part.classification ?? part.slot;
|
|
6
6
|
/*
|
|
7
7
|
* 🛑 Only 23 of 753 parts carry a code, and that is a fact about the sources
|
|
@@ -16,5 +16,5 @@ export function PartDetailPageView({ part, usedBy, listings, listingsTruncated,
|
|
|
16
16
|
/* 49 of 259 compositions did not join to a category.
|
|
17
17
|
A link to a page that does not exist is worse than
|
|
18
18
|
plain text, so the name renders unlinked. */
|
|
19
|
-
_jsx(Text, { color: "primary", children: m.name })), m.system && (_jsxs(Span, { size: "xs", color: "muted", children: [" ", "\u00B7 ", m.system] }))] }), m.productCode && (_jsx(Text, { size: "xs", color: "faint", className: "flex-shrink-0", children: m.productCode }))] }, m.id))) }))] }), _jsxs(Stack, { gap: "sm", className: "min-w-0", children: [_jsxs(Row, { justify: "between", align: "center", wrap: true, gap: "sm", className: "min-w-0", children: [_jsxs(Heading, { level: 2, size: "lg", children: ["Listings", listingsTruncated && (_jsxs(Span, { size: "sm", color: "muted", children: [" ", "(", listings.length, "+)"] }))] }), listings.length > 0 && (_jsx(TextLink, { href: allListingsHref, children: "See all listings \u2192" }))] }), listings.length === 0 ? (_jsxs(Stack, { gap: "xs", className: "min-w-0", children: [_jsx(Text, { color: "muted", size: "sm", children: "Nobody is selling this part right now." }), _jsx(TextLink, { href: allListingsHref, children: "Search the catalogue \u2192" })] })) : (_jsx(Stack, { gap: "xs", className: "min-w-0", children: listings.map((l) => (_jsxs(Div, { surface: "card", padding: "sm", rounded: "md", border: "subtle", className: "min-w-0", children: [_jsx(TextLink, { href: l.href, children: l.title }), l.condition && (_jsx(Text, { size: "xs", color: "muted", children: l.condition }))] }, l.id))) }))] }), part.source && (_jsxs(Text, { size: "xs", color: "faint", children: ["Source: ", part.source] }))] }) }) }));
|
|
19
|
+
_jsx(Text, { color: "primary", children: m.name })), m.system && (_jsxs(Span, { size: "xs", color: "muted", children: [" ", "\u00B7 ", m.system] }))] }), m.productCode && (_jsx(Text, { size: "xs", color: "faint", className: "flex-shrink-0", children: m.productCode }))] }, m.id))) }))] }), exactListings.length > 0 && (_jsxs(Stack, { gap: "sm", className: "min-w-0", children: [_jsxs(Heading, { level: 2, size: "lg", children: ["Buy this part", exactListingsTruncated && (_jsxs(Span, { size: "sm", color: "muted", children: [" ", "(", exactListings.length, "+)"] }))] }), _jsx(Stack, { gap: "xs", className: "min-w-0", children: exactListings.map((l) => (_jsxs(Div, { surface: "card", padding: "sm", rounded: "md", border: "subtle", className: "min-w-0", children: [_jsx(TextLink, { href: l.href, children: l.title }), l.condition && (_jsx(Text, { size: "xs", color: "muted", children: l.condition }))] }, l.id))) })] })), _jsxs(Stack, { gap: "sm", className: "min-w-0", children: [_jsxs(Row, { justify: "between", align: "center", wrap: true, gap: "sm", className: "min-w-0", children: [_jsxs(Heading, { level: 2, size: "lg", children: ["Listings", listingsTruncated && (_jsxs(Span, { size: "sm", color: "muted", children: [" ", "(", listings.length, "+)"] }))] }), listings.length > 0 && (_jsx(TextLink, { href: allListingsHref, children: "See all listings \u2192" }))] }), listings.length === 0 ? (_jsxs(Stack, { gap: "xs", className: "min-w-0", children: [_jsx(Text, { color: "muted", size: "sm", children: "Nobody is selling this part right now." }), _jsx(TextLink, { href: allListingsHref, children: "Search the catalogue \u2192" })] })) : (_jsx(Stack, { gap: "xs", className: "min-w-0", children: listings.map((l) => (_jsxs(Div, { surface: "card", padding: "sm", rounded: "md", border: "subtle", className: "min-w-0", children: [_jsx(TextLink, { href: l.href, children: l.title }), l.condition && (_jsx(Text, { size: "xs", color: "muted", children: l.condition }))] }, l.id))) }))] }), part.source && (_jsxs(Text, { size: "xs", color: "faint", children: ["Source: ", part.source] }))] }) }) }));
|
|
20
20
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* D12 — the parts
|
|
2
|
+
* D12 — the Beyblade parts gallery index, and one classification's listing.
|
|
3
3
|
*
|
|
4
4
|
* ── 🛑 THE INDEX COSTS ZERO FIRESTORE READS ────────────────────────────────
|
|
5
5
|
*
|
|
@@ -20,8 +20,17 @@ import React from "react";
|
|
|
20
20
|
import { type PartGlossaryDocument, type PartSlot } from "../schemas/firestore";
|
|
21
21
|
export interface PartsIndexPageViewProps {
|
|
22
22
|
hrefForClassification: (slot: string) => string;
|
|
23
|
+
/**
|
|
24
|
+
* The search box, as a SLOT.
|
|
25
|
+
*
|
|
26
|
+
* 🛑 Not rendered directly, because this view is a Server Component and
|
|
27
|
+
* the box is a Client Component that fetches. Keeping it a slot also keeps
|
|
28
|
+
* the page's "ZERO Firestore reads" property literally true — the box
|
|
29
|
+
* reads a CDN object, never Firestore, and the index page stays static.
|
|
30
|
+
*/
|
|
31
|
+
renderSearch?: () => React.ReactNode;
|
|
23
32
|
}
|
|
24
|
-
export declare function PartsIndexPageView({ hrefForClassification }: PartsIndexPageViewProps): React.JSX.Element;
|
|
33
|
+
export declare function PartsIndexPageView({ hrefForClassification, renderSearch, }: PartsIndexPageViewProps): React.JSX.Element;
|
|
25
34
|
export interface PartClassificationPageViewProps {
|
|
26
35
|
slot: PartSlot;
|
|
27
36
|
parts: readonly PartGlossaryDocument[];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Section, Container, Stack, Row, Div, Grid, Heading, Text, Span, TextLink, Badge, } from "../../../ui/index.js";
|
|
3
3
|
import { ALL_PART_SLOTS, PART_SLOT_LABEL, } from "../schemas/firestore.js";
|
|
4
|
-
export function PartsIndexPageView({ hrefForClassification }) {
|
|
5
|
-
return (_jsx(Section, { padding: "y-lg", children: _jsx(Container, { size: "lg", children: _jsxs(Stack, { gap: "lg", className: "min-w-0", children: [_jsxs(Stack, { gap: "xs", children: [_jsx(Heading, { level: 1, children: "
|
|
4
|
+
export function PartsIndexPageView({ hrefForClassification, renderSearch, }) {
|
|
5
|
+
return (_jsx(Section, { padding: "y-lg", children: _jsx(Container, { size: "lg", children: _jsxs(Stack, { gap: "lg", className: "min-w-0", children: [_jsxs(Stack, { gap: "xs", children: [_jsx(Heading, { level: 1, children: "Beyblade parts gallery" }), _jsxs(Text, { color: "muted", children: ["Every component we have a record of, by what it is. A code like", " ", _jsx(Span, { weight: "semibold", children: "RF" }), " or ", _jsx(Span, { weight: "semibold", children: "105" }), " means different things in different generations, so parts are grouped by their classification rather than by code."] })] }), renderSearch?.(), _jsx(Grid, { cols: "navTiles", gap: "sm", className: "min-w-0", children: ALL_PART_SLOTS.map((slot) => (_jsx(Div, { surface: "card", padding: "sm", rounded: "md", border: "subtle", className: "min-w-0", children: _jsx(TextLink, { href: hrefForClassification(slot), children: PART_SLOT_LABEL[slot] }) }, slot))) })] }) }) }));
|
|
6
6
|
}
|
|
7
7
|
/** `performance-tip--rf` → `rf`. The id's tail IS the URL segment. */
|
|
8
8
|
function tailOf(partId) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface PartsSearchBoxProps {
|
|
3
|
+
/** `siteSettings.search?.indexEnabled`. Read as `!== false`. */
|
|
4
|
+
indexEnabled?: boolean;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
/** Rows shown. A part search is a lookup, not a browse. */
|
|
7
|
+
limit?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function PartsSearchBox({ indexEnabled, placeholder, limit, }: PartsSearchBoxProps): React.JSX.Element;
|