@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
|
@@ -26,7 +26,7 @@ export function buildDigitalCodeMetadata(product, opts) {
|
|
|
26
26
|
description,
|
|
27
27
|
url: canonical,
|
|
28
28
|
type: "website",
|
|
29
|
-
images: image ? [{ url: image }] : undefined,
|
|
29
|
+
images: image ? [{ url: typeof image === "string" ? image : image.url }] : undefined,
|
|
30
30
|
},
|
|
31
31
|
twitter: {
|
|
32
32
|
card: image ? "summary_large_image" : "summary",
|
|
@@ -10,7 +10,9 @@ interface DigitalCodeDocLike {
|
|
|
10
10
|
price?: number | null;
|
|
11
11
|
currency?: string | null;
|
|
12
12
|
mainImage?: string | null;
|
|
13
|
-
images?: (
|
|
13
|
+
images?: ({
|
|
14
|
+
url: string;
|
|
15
|
+
} | string | null | undefined)[] | null;
|
|
14
16
|
digitalCode?: {
|
|
15
17
|
codeDeliveryMethod?: string;
|
|
16
18
|
} | null;
|
|
@@ -9,7 +9,9 @@ export function renderDigitalCodeOg(doc, opts) {
|
|
|
9
9
|
return renderDigitalCodeOgImage({
|
|
10
10
|
title: doc?.title ?? "Digital Code",
|
|
11
11
|
deliveryMethod,
|
|
12
|
-
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
12
|
+
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
13
|
+
(typeof doc?.images?.[0] === "string" ? doc.images[0] : doc?.images?.[0]?.url) ||
|
|
14
|
+
null, opts.baseUrl),
|
|
13
15
|
}, opts.siteName);
|
|
14
16
|
}
|
|
15
17
|
export function renderDigitalCodeOgImage(data, siteName) {
|
|
@@ -20,10 +20,25 @@ import { type ProductCodeContentKind } from "../../../../features/products/schem
|
|
|
20
20
|
/**
|
|
21
21
|
* Where a delivered asset's bytes live.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
23
|
+
* No `mediaAssets` row is ever created for one — a row is what mints a
|
|
24
|
+
* `/media/{shortId}` slug, and that slug is served without authentication. No
|
|
25
|
+
* row, no slug, no public URL. That half was, and remains, true.
|
|
26
|
+
*
|
|
27
|
+
* 🛑 CORRECTED 2026-10-19. This block used to open with "deliberately OUTSIDE
|
|
28
|
+
* every prefix the public media proxy knows how to resolve", and that was
|
|
29
|
+
* FALSE from the day the proxy's raw-path fallback shipped: `/media/[...slug]`
|
|
30
|
+
* treats any multi-segment slug it cannot resolve through `mediaAssets` as a
|
|
31
|
+
* literal storage path, so `/media/private/digital-content/...` resolved and
|
|
32
|
+
* served. It did watermark, so no pristine original leaked — but a paid asset
|
|
33
|
+
* was reachable by anyone who guessed the object name, and the only thing
|
|
34
|
+
* standing in the way was `randomUUID()`.
|
|
35
|
+
*
|
|
36
|
+
* The proxy now refuses a raw path under `private/` outright
|
|
37
|
+
* (`PRIVATE_PREFIX` in `src/app/api/media/[...slug]/route.ts`), so the
|
|
38
|
+
* statement is true again — but it is true because of a check, not because of
|
|
39
|
+
* the prefix, and that distinction is the whole reason this comment was wrong
|
|
40
|
+
* for so long. An unenforced invariant written as a fact is worse than no
|
|
41
|
+
* comment: it is the reason nobody looked.
|
|
27
42
|
*/
|
|
28
43
|
export declare const DIGITAL_CONTENT_PREFIX = "private/digital-content";
|
|
29
44
|
/**
|
|
@@ -26,10 +26,25 @@ import { PRODUCT_COLLECTION, PRODUCT_CODES_SUBCOLLECTION, } from "../../../../fe
|
|
|
26
26
|
/**
|
|
27
27
|
* Where a delivered asset's bytes live.
|
|
28
28
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
29
|
+
* No `mediaAssets` row is ever created for one — a row is what mints a
|
|
30
|
+
* `/media/{shortId}` slug, and that slug is served without authentication. No
|
|
31
|
+
* row, no slug, no public URL. That half was, and remains, true.
|
|
32
|
+
*
|
|
33
|
+
* 🛑 CORRECTED 2026-10-19. This block used to open with "deliberately OUTSIDE
|
|
34
|
+
* every prefix the public media proxy knows how to resolve", and that was
|
|
35
|
+
* FALSE from the day the proxy's raw-path fallback shipped: `/media/[...slug]`
|
|
36
|
+
* treats any multi-segment slug it cannot resolve through `mediaAssets` as a
|
|
37
|
+
* literal storage path, so `/media/private/digital-content/...` resolved and
|
|
38
|
+
* served. It did watermark, so no pristine original leaked — but a paid asset
|
|
39
|
+
* was reachable by anyone who guessed the object name, and the only thing
|
|
40
|
+
* standing in the way was `randomUUID()`.
|
|
41
|
+
*
|
|
42
|
+
* The proxy now refuses a raw path under `private/` outright
|
|
43
|
+
* (`PRIVATE_PREFIX` in `src/app/api/media/[...slug]/route.ts`), so the
|
|
44
|
+
* statement is true again — but it is true because of a check, not because of
|
|
45
|
+
* the prefix, and that distinction is the whole reason this comment was wrong
|
|
46
|
+
* for so long. An unenforced invariant written as a fact is worse than no
|
|
47
|
+
* comment: it is the reason nobody looked.
|
|
33
48
|
*/
|
|
34
49
|
export const DIGITAL_CONTENT_PREFIX = "private/digital-content";
|
|
35
50
|
/**
|
|
@@ -29,7 +29,7 @@ export function buildLiveItemMetadata(product, opts) {
|
|
|
29
29
|
description,
|
|
30
30
|
url: canonical,
|
|
31
31
|
type: "website",
|
|
32
|
-
images: image ? [{ url: image }] : undefined,
|
|
32
|
+
images: image ? [{ url: typeof image === "string" ? image : image.url }] : undefined,
|
|
33
33
|
},
|
|
34
34
|
twitter: {
|
|
35
35
|
card: image ? "summary_large_image" : "summary",
|
|
@@ -10,7 +10,9 @@ interface LiveItemDocLike {
|
|
|
10
10
|
price?: number | null;
|
|
11
11
|
currency?: string | null;
|
|
12
12
|
mainImage?: string | null;
|
|
13
|
-
images?: (
|
|
13
|
+
images?: ({
|
|
14
|
+
url: string;
|
|
15
|
+
} | string | null | undefined)[] | null;
|
|
14
16
|
liveItem?: {
|
|
15
17
|
species?: string;
|
|
16
18
|
} | null;
|
|
@@ -4,7 +4,9 @@ export function renderLiveItemOg(doc, opts) {
|
|
|
4
4
|
return renderLiveItemOgImage({
|
|
5
5
|
title: doc?.title ?? "Live Listing",
|
|
6
6
|
species: doc?.liveItem?.species ?? null,
|
|
7
|
-
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
7
|
+
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
8
|
+
(typeof doc?.images?.[0] === "string" ? doc.images[0] : doc?.images?.[0]?.url) ||
|
|
9
|
+
null, opts.baseUrl),
|
|
8
10
|
}, opts.siteName);
|
|
9
11
|
}
|
|
10
12
|
export function renderLiveItemOgImage(data, siteName) {
|
|
@@ -117,7 +117,15 @@ export async function submitLotteryPullAction(input) {
|
|
|
117
117
|
});
|
|
118
118
|
return { assignedSlot: chosen, userLotteryNumber: nextNumber };
|
|
119
119
|
});
|
|
120
|
-
|
|
120
|
+
/*
|
|
121
|
+
* Create the entry document outside the transaction (acceptable — slot is
|
|
122
|
+
* already booked).
|
|
123
|
+
*
|
|
124
|
+
* Typed `LotteryEntryPlain`: this is PLAINTEXT from the session and the
|
|
125
|
+
* request body, and `createEntry` encrypts it. The document type now says
|
|
126
|
+
* `Encrypted<string>`, so annotating this `LotteryEntryDocument` is a
|
|
127
|
+
* compile error — correctly, because the values here are not ciphertext.
|
|
128
|
+
*/
|
|
121
129
|
const entryData = {
|
|
122
130
|
sourceType: data.sourceType,
|
|
123
131
|
...(data.sourceType === "event" ? { eventId: sourceId } : { productId: sourceId }),
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lottery OG image renderer.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this did not exist
|
|
5
|
+
*
|
|
6
|
+
* `lottery/[id]` was the single entry in `verify-og-coverage`'s
|
|
7
|
+
* `OG_KNOWN_GAPS` — the one public dynamic detail page shipping without an
|
|
8
|
+
* `opengraph-image.tsx`, carried as a baseline since 2026-05-23 with the note
|
|
9
|
+
* "OG image follows in a follow-up". Metadata already resolved
|
|
10
|
+
* (`buildLotteryMetadata`), so a shared link rendered a title and whatever the
|
|
11
|
+
* event's cover image happened to be, with none of the branded card every
|
|
12
|
+
* other listing type gets.
|
|
13
|
+
*
|
|
14
|
+
* ## 🛑 No money, and no per-slot prices
|
|
15
|
+
*
|
|
16
|
+
* An OG image is a public image URL with its contents burned into the pixels:
|
|
17
|
+
* no sign-in gate reaches it and no paywall markup describes it, which is why
|
|
18
|
+
* all eight money-bearing renderers were stripped (Root Cause #93). A lottery
|
|
19
|
+
* is the sharpest case in the codebase — `toClientLotteryConfig` is an
|
|
20
|
+
* allow-list that exists specifically to keep `price` and `weight` off every
|
|
21
|
+
* slot — so this renderer takes the CLIENT shape and reads only what that
|
|
22
|
+
* allow-list already permits: the slot count, and how many are still free.
|
|
23
|
+
*
|
|
24
|
+
* "6 of 200 slots left" is a fact about availability rather than a disclosed
|
|
25
|
+
* amount, and it is the half of the card that earns the click — exactly the
|
|
26
|
+
* line `renderPrizeDrawOg` draws for "Free entry".
|
|
27
|
+
*/
|
|
28
|
+
import type { ReactElement } from "react";
|
|
29
|
+
import type { LotteryEventClient } from "./data";
|
|
30
|
+
export interface LotteryOgData {
|
|
31
|
+
title: string;
|
|
32
|
+
imageUrl?: string | null;
|
|
33
|
+
slotsLabel?: string | null;
|
|
34
|
+
statusLabel?: string | null;
|
|
35
|
+
}
|
|
36
|
+
export declare function renderLotteryOg(event: LotteryEventClient | null | undefined, opts: {
|
|
37
|
+
siteName: string;
|
|
38
|
+
baseUrl?: string;
|
|
39
|
+
}): ReactElement;
|
|
40
|
+
export declare function renderLotteryOgImage(data: LotteryOgData, siteName: string): ReactElement;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lottery OG image renderer.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this did not exist
|
|
5
|
+
*
|
|
6
|
+
* `lottery/[id]` was the single entry in `verify-og-coverage`'s
|
|
7
|
+
* `OG_KNOWN_GAPS` — the one public dynamic detail page shipping without an
|
|
8
|
+
* `opengraph-image.tsx`, carried as a baseline since 2026-05-23 with the note
|
|
9
|
+
* "OG image follows in a follow-up". Metadata already resolved
|
|
10
|
+
* (`buildLotteryMetadata`), so a shared link rendered a title and whatever the
|
|
11
|
+
* event's cover image happened to be, with none of the branded card every
|
|
12
|
+
* other listing type gets.
|
|
13
|
+
*
|
|
14
|
+
* ## 🛑 No money, and no per-slot prices
|
|
15
|
+
*
|
|
16
|
+
* An OG image is a public image URL with its contents burned into the pixels:
|
|
17
|
+
* no sign-in gate reaches it and no paywall markup describes it, which is why
|
|
18
|
+
* all eight money-bearing renderers were stripped (Root Cause #93). A lottery
|
|
19
|
+
* is the sharpest case in the codebase — `toClientLotteryConfig` is an
|
|
20
|
+
* allow-list that exists specifically to keep `price` and `weight` off every
|
|
21
|
+
* slot — so this renderer takes the CLIENT shape and reads only what that
|
|
22
|
+
* allow-list already permits: the slot count, and how many are still free.
|
|
23
|
+
*
|
|
24
|
+
* "6 of 200 slots left" is a fact about availability rather than a disclosed
|
|
25
|
+
* amount, and it is the half of the card that earns the click — exactly the
|
|
26
|
+
* line `renderPrizeDrawOg` draws for "Free entry".
|
|
27
|
+
*/
|
|
28
|
+
import { renderOgLayout } from "../seo/og-layout.js";
|
|
29
|
+
import { resolveOgImageUrl } from "../seo/og.js";
|
|
30
|
+
/**
|
|
31
|
+
* The event's own status, as a human badge. `active` is deliberately absent:
|
|
32
|
+
* a live lottery is the default case, so a chip saying so costs a badge slot
|
|
33
|
+
* and tells the reader nothing they would not assume.
|
|
34
|
+
*/
|
|
35
|
+
const STATUS_BADGE_TEXT = {
|
|
36
|
+
draft: "Not yet open",
|
|
37
|
+
paused: "Paused",
|
|
38
|
+
ended: "Closed",
|
|
39
|
+
cancelled: "Cancelled",
|
|
40
|
+
};
|
|
41
|
+
export function renderLotteryOg(event, opts) {
|
|
42
|
+
const cfg = event?.lotteryConfig;
|
|
43
|
+
const slots = cfg?.slots ?? [];
|
|
44
|
+
/*
|
|
45
|
+
* Counted from the slot array rather than read from `totalSlots`, which is
|
|
46
|
+
* the mirror the admin write path derives FROM `slots.length` — and a mirror
|
|
47
|
+
* is the field most likely to disagree (Root Cause #42). The array is here
|
|
48
|
+
* either way, so counting it costs nothing.
|
|
49
|
+
*/
|
|
50
|
+
const total = slots.length;
|
|
51
|
+
const free = slots.filter((s) => !s.isBooked).length;
|
|
52
|
+
const slotsLabel = total > 0
|
|
53
|
+
? free > 0
|
|
54
|
+
? `${free.toLocaleString("en-IN")} of ${total.toLocaleString("en-IN")} slots left`
|
|
55
|
+
: `All ${total.toLocaleString("en-IN")} slots claimed`
|
|
56
|
+
: null;
|
|
57
|
+
const coverUrl = event?.coverImage && typeof event.coverImage.url === "string"
|
|
58
|
+
? event.coverImage.url
|
|
59
|
+
: (event?.coverImageUrl ?? null);
|
|
60
|
+
return renderLotteryOgImage({
|
|
61
|
+
title: event?.title ?? "Lottery",
|
|
62
|
+
imageUrl: resolveOgImageUrl(coverUrl, opts.baseUrl),
|
|
63
|
+
slotsLabel,
|
|
64
|
+
statusLabel: event?.status ? (STATUS_BADGE_TEXT[event.status] ?? null) : null,
|
|
65
|
+
}, opts.siteName);
|
|
66
|
+
}
|
|
67
|
+
export function renderLotteryOgImage(data, siteName) {
|
|
68
|
+
const badges = [data.statusLabel].filter((s) => Boolean(s));
|
|
69
|
+
return renderOgLayout({
|
|
70
|
+
title: data.title,
|
|
71
|
+
subtitle: data.slotsLabel ?? undefined,
|
|
72
|
+
imageUrl: data.imageUrl,
|
|
73
|
+
siteName: `${siteName} · Lottery`,
|
|
74
|
+
badges: badges.length > 0 ? badges : undefined,
|
|
75
|
+
// Violet, distinct from the prize-draw amber beside it in the nav — the two
|
|
76
|
+
// are different products and a shared accent makes shared links ambiguous.
|
|
77
|
+
theme: { accentColor: "#8b5cf6" },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
@@ -12,6 +12,7 @@ import { createMessage, listMessages, softDeleteMessage, deleteAllMessages, list
|
|
|
12
12
|
import { finalizeStagedMediaArray } from "../../../../features/media/finalize.js";
|
|
13
13
|
import { sendNotification } from "../../../../features/admin/actions/notification-actions.js";
|
|
14
14
|
import { productRepository } from "../../../../features/products/repository/products.repository.js";
|
|
15
|
+
import { normalizeListingType } from "../../../../features/products/utils/listing-type.js";
|
|
15
16
|
import { siteSettingsRepository } from "../../../../repositories/index.js";
|
|
16
17
|
const MESSAGE_MAX_LENGTH = 2000;
|
|
17
18
|
/**
|
|
@@ -159,8 +160,11 @@ export async function sendMessage(input) {
|
|
|
159
160
|
productRef = {
|
|
160
161
|
productId: product.id,
|
|
161
162
|
title: product.title,
|
|
162
|
-
image: product.images?.[0],
|
|
163
|
+
image: product.images?.[0]?.url,
|
|
163
164
|
price: product.price,
|
|
165
|
+
// Without this the card cannot pick the right detail route — see the
|
|
166
|
+
// field's own comment on `MessageProductRef`.
|
|
167
|
+
listingType: normalizeListingType(product),
|
|
164
168
|
};
|
|
165
169
|
}
|
|
166
170
|
// A missing/deleted product is not an error — the card simply doesn't
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
// Display masking only — `pii-mask.ts` is the crypto-FREE half that Root Cause
|
|
14
14
|
// #24 split out of `pii-encrypt.ts` precisely so it could be imported freely.
|
|
15
|
-
import {
|
|
15
|
+
import { offerRepository } from "../../../../features/seller/repository/offer.repository.js";
|
|
16
16
|
function toIsoOrUndefined(value) {
|
|
17
17
|
return value instanceof Date ? value.toISOString() : undefined;
|
|
18
18
|
}
|
|
@@ -21,11 +21,25 @@ function toIso(value) {
|
|
|
21
21
|
}
|
|
22
22
|
/** The three buyer keys, resolved per `buyerIdentity`. Absent keys stay absent. */
|
|
23
23
|
function buyerIdentityFields(doc, mode) {
|
|
24
|
+
/*
|
|
25
|
+
* 🛑 Both branches go through the repository's named accessors.
|
|
26
|
+
*
|
|
27
|
+
* `OfferRepository.mapDoc` no longer decrypts, so `doc.buyerName` and
|
|
28
|
+
* `doc.buyerEmail` are CIPHERTEXT here. Before this, `"full"` returned the
|
|
29
|
+
* `enc:v1:` blobs straight to the seller, and `"masked"` handed them to
|
|
30
|
+
* `maskName`/`maskEmail`, which refuse ciphertext by design and answer
|
|
31
|
+
* "Anonymous" / "***@***.***" — so neither mode worked, in opposite ways.
|
|
32
|
+
*
|
|
33
|
+
* `"full"` is the seller's own view of a buyer who made them an offer, which
|
|
34
|
+
* is a legitimate plaintext read; `"masked"` is everything else.
|
|
35
|
+
*/
|
|
24
36
|
if (mode === "full") {
|
|
25
|
-
|
|
37
|
+
const plain = offerRepository.revealOffer(doc);
|
|
38
|
+
return { buyerUid: doc.buyerUid, buyerName: plain.buyerName, buyerEmail: plain.buyerEmail };
|
|
26
39
|
}
|
|
27
40
|
if (mode === "masked") {
|
|
28
|
-
|
|
41
|
+
const masked = offerRepository.maskedOffer(doc);
|
|
42
|
+
return { buyerName: masked.buyerName, buyerEmail: masked.buyerEmail };
|
|
29
43
|
}
|
|
30
44
|
return {};
|
|
31
45
|
}
|
|
@@ -22,7 +22,7 @@ export async function createOrderAction(input) {
|
|
|
22
22
|
const parsed = createOrderSchema.safeParse(input);
|
|
23
23
|
if (!parsed.success)
|
|
24
24
|
throw new ValidationError(parsed.error.issues[0]?.message ?? "Invalid order input");
|
|
25
|
-
return orderRepository.
|
|
25
|
+
return orderRepository.createOrder({
|
|
26
26
|
...parsed.data,
|
|
27
27
|
userId: user.uid,
|
|
28
28
|
status: "pending",
|
|
@@ -211,7 +211,12 @@ export async function attachPaymentProofAction(orderId, proof) {
|
|
|
211
211
|
});
|
|
212
212
|
notifyAdminsOfPaymentProof({
|
|
213
213
|
id: orderId,
|
|
214
|
-
|
|
214
|
+
/*
|
|
215
|
+
* Revealed: this names the buyer to an admin who is about to verify
|
|
216
|
+
* their payment proof, so a mask would defeat the purpose. `order` comes
|
|
217
|
+
* from a repository read, which is ciphertext-by-default.
|
|
218
|
+
*/
|
|
219
|
+
userName: orderRepository.revealOrder(order).userName,
|
|
215
220
|
productTitle: order.productTitle,
|
|
216
221
|
totalPrice: order.totalPrice,
|
|
217
222
|
});
|
|
@@ -58,7 +58,7 @@ export function renderPartOg(part, usedByCount, opts) {
|
|
|
58
58
|
/** One classification's card. */
|
|
59
59
|
export function renderPartClassificationOg(slot, count, opts) {
|
|
60
60
|
const label = PART_SLOT_LABEL[slot] ?? slot;
|
|
61
|
-
return shell("
|
|
61
|
+
return shell("Beyblade parts gallery", label,
|
|
62
62
|
// `count` comes from the same bounded read the page renders, so the number
|
|
63
63
|
// on the card is the number on the page. A separate count query would be a
|
|
64
64
|
// second source that could disagree.
|
|
@@ -8,7 +8,9 @@ interface PreOrderDocLike {
|
|
|
8
8
|
title?: string | null;
|
|
9
9
|
preOrderReleaseDate?: Date | string | null;
|
|
10
10
|
mainImage?: string | null;
|
|
11
|
-
images?: (
|
|
11
|
+
images?: ({
|
|
12
|
+
url: string;
|
|
13
|
+
} | string | null | undefined)[] | null;
|
|
12
14
|
}
|
|
13
15
|
/** High-level OG renderer — accepts the raw pre-order document from `getPreOrderForDetail`. */
|
|
14
16
|
export declare function renderPreOrderOg(doc: PreOrderDocLike | null | undefined, opts: {
|
|
@@ -12,7 +12,9 @@ export function renderPreOrderOg(doc, opts) {
|
|
|
12
12
|
return renderPreOrderOgImage({
|
|
13
13
|
title: doc?.title ?? "Pre-Order",
|
|
14
14
|
releaseDateLabel,
|
|
15
|
-
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
15
|
+
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
16
|
+
(typeof doc?.images?.[0] === "string" ? doc.images[0] : doc?.images?.[0]?.url) ||
|
|
17
|
+
null, opts.baseUrl),
|
|
16
18
|
}, opts.siteName);
|
|
17
19
|
}
|
|
18
20
|
export function renderPreOrderOgImage(data, siteName) {
|
|
@@ -117,3 +117,21 @@ export interface PriceIndexSearchResponse {
|
|
|
117
117
|
* Cost: one `searchTxt` push-down query plus ONE multi-get. Both bounded.
|
|
118
118
|
*/
|
|
119
119
|
export declare function searchPriceIndex(rawQuery: string): Promise<PriceIndexSearchResponse>;
|
|
120
|
+
/**
|
|
121
|
+
* Tier 1 adoption — the client already resolved candidate leaves LOCALLY via
|
|
122
|
+
* the public search artifact (`useSiteSearch({ types: ["model", "category"] })`),
|
|
123
|
+
* at zero Firestore reads. This is the ONLY query this path still needs: one
|
|
124
|
+
* multi-get, bounded by however many ids the client resolved (capped the
|
|
125
|
+
* same as the search path, so a crafted request cannot demand an unbounded
|
|
126
|
+
* `getAll`).
|
|
127
|
+
*
|
|
128
|
+
* 🛑 Deliberately NOT filtering brand/bundle categoryType here — the CALLER
|
|
129
|
+
* already did that at index-build time (`PUBLIC_INDEX_SOURCES`'s category
|
|
130
|
+
* source only emits real listing leaves under the "model"/"category" type
|
|
131
|
+
* keys), so re-deriving the same filter from a bare id list would be a
|
|
132
|
+
* second, independently-maintained copy of a rule that already lives in one
|
|
133
|
+
* place. If that assumption is ever wrong, the cost is a band shown for a
|
|
134
|
+
* brand/bundle row — cosmetic, not a leak, since no money figure is ever
|
|
135
|
+
* attached to a document that does not already have sales recorded.
|
|
136
|
+
*/
|
|
137
|
+
export declare function getPriceIndexBandsForIds(rawIds: readonly string[]): Promise<PriceIndexSearchResult[]>;
|
|
@@ -154,8 +154,22 @@ export async function searchPriceIndex(rawQuery) {
|
|
|
154
154
|
return !t || t === "category" || t === "sublisting";
|
|
155
155
|
});
|
|
156
156
|
const page = listingRows.slice(0, PRICE_INDEX_SEARCH_LIMIT);
|
|
157
|
-
const
|
|
158
|
-
|
|
157
|
+
const results = await buildBandsForLeaves(page);
|
|
158
|
+
return {
|
|
159
|
+
...base,
|
|
160
|
+
results,
|
|
161
|
+
truncated: listingRows.length > PRICE_INDEX_SEARCH_LIMIT,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The ONE multi-get, shared by the search path above and the ids-only path
|
|
166
|
+
* below — the actual band-shaping logic (sort by sample size, omit an empty
|
|
167
|
+
* `bands` array, the "no sales recorded" vs "zero sales" distinction) must
|
|
168
|
+
* answer identically regardless of how the category list was resolved.
|
|
169
|
+
*/
|
|
170
|
+
async function buildBandsForLeaves(leaves) {
|
|
171
|
+
const bandsByLeaf = await priceIndexRepository.getManyForLeaves(leaves.map((c) => c.id));
|
|
172
|
+
return leaves.map((c) => {
|
|
159
173
|
const doc = bandsByLeaf.get(c.id);
|
|
160
174
|
const bands = doc
|
|
161
175
|
? Object.entries(doc.byListingType ?? {})
|
|
@@ -180,9 +194,35 @@ export async function searchPriceIndex(rawQuery) {
|
|
|
180
194
|
...(doc ? { windowDays: doc.windowDays, computedAt: toIso(doc.computedAt) } : {}),
|
|
181
195
|
};
|
|
182
196
|
});
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Tier 1 adoption — the client already resolved candidate leaves LOCALLY via
|
|
200
|
+
* the public search artifact (`useSiteSearch({ types: ["model", "category"] })`),
|
|
201
|
+
* at zero Firestore reads. This is the ONLY query this path still needs: one
|
|
202
|
+
* multi-get, bounded by however many ids the client resolved (capped the
|
|
203
|
+
* same as the search path, so a crafted request cannot demand an unbounded
|
|
204
|
+
* `getAll`).
|
|
205
|
+
*
|
|
206
|
+
* 🛑 Deliberately NOT filtering brand/bundle categoryType here — the CALLER
|
|
207
|
+
* already did that at index-build time (`PUBLIC_INDEX_SOURCES`'s category
|
|
208
|
+
* source only emits real listing leaves under the "model"/"category" type
|
|
209
|
+
* keys), so re-deriving the same filter from a bare id list would be a
|
|
210
|
+
* second, independently-maintained copy of a rule that already lives in one
|
|
211
|
+
* place. If that assumption is ever wrong, the cost is a band shown for a
|
|
212
|
+
* brand/bundle row — cosmetic, not a leak, since no money figure is ever
|
|
213
|
+
* attached to a document that does not already have sales recorded.
|
|
214
|
+
*/
|
|
215
|
+
export async function getPriceIndexBandsForIds(rawIds) {
|
|
216
|
+
const ids = [...new Set(rawIds.filter((id) => typeof id === "string" && id.length > 0))].slice(0, PRICE_INDEX_SEARCH_LIMIT);
|
|
217
|
+
if (ids.length === 0)
|
|
218
|
+
return [];
|
|
219
|
+
const docs = await categoriesRepository.getManyByIds(ids);
|
|
220
|
+
const leaves = docs.map((c) => ({
|
|
221
|
+
id: c.id,
|
|
222
|
+
name: c.name,
|
|
223
|
+
slug: c.slug,
|
|
224
|
+
path: c.path,
|
|
225
|
+
display: c.display,
|
|
226
|
+
}));
|
|
227
|
+
return buildBandsForLeaves(leaves);
|
|
188
228
|
}
|
|
@@ -17,7 +17,9 @@ interface PrizeDrawDocLike {
|
|
|
17
17
|
price?: number | null;
|
|
18
18
|
currency?: string | null;
|
|
19
19
|
mainImage?: string | null;
|
|
20
|
-
images?: (
|
|
20
|
+
images?: ({
|
|
21
|
+
url: string;
|
|
22
|
+
} | string | null | undefined)[] | null;
|
|
21
23
|
prizeRevealStatus?: "pending" | "open" | "closed" | null;
|
|
22
24
|
prizeMaxEntries?: number | null;
|
|
23
25
|
prizeCurrentEntries?: number | null;
|
|
@@ -19,7 +19,9 @@ export function renderPrizeDrawOg(doc, opts) {
|
|
|
19
19
|
return renderPrizeDrawOgImage({
|
|
20
20
|
title: doc?.title ?? doc?.name ?? "Prize Draw",
|
|
21
21
|
pricePerEntryLabel,
|
|
22
|
-
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
22
|
+
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
23
|
+
(typeof doc?.images?.[0] === "string" ? doc.images[0] : doc?.images?.[0]?.url) ||
|
|
24
|
+
null, opts.baseUrl),
|
|
23
25
|
revealStatus: doc?.prizeRevealStatus ?? null,
|
|
24
26
|
entriesLabel,
|
|
25
27
|
}, opts.siteName);
|
|
@@ -42,6 +42,16 @@ export interface PublicGroupMember {
|
|
|
42
42
|
groupTitle?: string;
|
|
43
43
|
/** Drives the stepper's `max`. */
|
|
44
44
|
availableQuantity: number;
|
|
45
|
+
/**
|
|
46
|
+
* Made to order — the stepper is UNCAPPED for this member.
|
|
47
|
+
*
|
|
48
|
+
* 🛑 This is an ALLOW-LIST projection: a field absent from this interface and
|
|
49
|
+
* from `toPublicGroupMember` below simply does not reach the picker, with no
|
|
50
|
+
* error anywhere. Without it the picker reads `availableQuantity: 0` on a
|
|
51
|
+
* print-on-demand member and caps the stepper at zero — the member renders,
|
|
52
|
+
* looks selectable, and cannot be chosen.
|
|
53
|
+
*/
|
|
54
|
+
madeToOrder?: boolean;
|
|
45
55
|
storeId: string;
|
|
46
56
|
storeName?: string;
|
|
47
57
|
status: string;
|
|
@@ -50,6 +60,22 @@ export interface PublicGroupMember {
|
|
|
50
60
|
* snapshot it for per-member GST proration at checkout. */
|
|
51
61
|
gstRate?: 0 | 5 | 12 | 18 | 28;
|
|
52
62
|
hsnCode?: string;
|
|
63
|
+
/**
|
|
64
|
+
* The group's OWN selection rules — present only on the PARENT row, since
|
|
65
|
+
* that is the only document that carries them.
|
|
66
|
+
*
|
|
67
|
+
* 🛑 Projected so `readGroupRules` has something real to read client-side.
|
|
68
|
+
* Without these the picker would silently see no rules on every page that
|
|
69
|
+
* derives them from this endpoint's own response (`ShowGroupSection`),
|
|
70
|
+
* which is a client-only regression of the exact kind E3 exists to close —
|
|
71
|
+
* a server-only rule reads as a broken button, and here it would be the
|
|
72
|
+
* reverse: a client that never finds out a rule exists at all.
|
|
73
|
+
*/
|
|
74
|
+
groupMinMembers?: number;
|
|
75
|
+
groupMaxMembers?: number;
|
|
76
|
+
groupMaxUnitsPerMember?: number;
|
|
77
|
+
groupRequiredMemberIds?: string[];
|
|
78
|
+
groupDiscountPercent?: number;
|
|
53
79
|
}
|
|
54
80
|
export declare function toPublicGroupMember(doc: ProductDocument): PublicGroupMember;
|
|
55
81
|
export declare function toPublicGroupMembers(docs: readonly ProductDocument[]): PublicGroupMember[];
|
|
@@ -22,18 +22,24 @@ export function toPublicGroupMember(doc) {
|
|
|
22
22
|
title: doc.title,
|
|
23
23
|
price: doc.price,
|
|
24
24
|
currency: doc.currency,
|
|
25
|
-
image: doc.images?.[0] ?? doc.mainImage,
|
|
25
|
+
image: doc.images?.[0]?.url ?? doc.mainImage,
|
|
26
26
|
condition: doc.condition,
|
|
27
27
|
listingType: normalizeListingType(doc),
|
|
28
28
|
isGroupParent: doc.isGroupParent,
|
|
29
29
|
groupTitle: doc.groupTitle,
|
|
30
30
|
availableQuantity: doc.availableQuantity ?? 0,
|
|
31
|
+
madeToOrder: doc.madeToOrder,
|
|
31
32
|
storeId: doc.storeId,
|
|
32
33
|
storeName: doc.storeName,
|
|
33
34
|
status: doc.status,
|
|
34
35
|
isSold: doc.isSold,
|
|
35
36
|
gstRate: doc.gstRate,
|
|
36
37
|
hsnCode: doc.hsnCode,
|
|
38
|
+
groupMinMembers: doc.groupMinMembers,
|
|
39
|
+
groupMaxMembers: doc.groupMaxMembers,
|
|
40
|
+
groupMaxUnitsPerMember: doc.groupMaxUnitsPerMember,
|
|
41
|
+
groupRequiredMemberIds: doc.groupRequiredMemberIds,
|
|
42
|
+
groupDiscountPercent: doc.groupDiscountPercent,
|
|
37
43
|
};
|
|
38
44
|
}
|
|
39
45
|
export function toPublicGroupMembers(docs) {
|
|
@@ -11,7 +11,9 @@ interface ProductDocLike {
|
|
|
11
11
|
title?: string | null;
|
|
12
12
|
price?: number | null;
|
|
13
13
|
mainImage?: string | null;
|
|
14
|
-
images?: (
|
|
14
|
+
images?: ({
|
|
15
|
+
url: string;
|
|
16
|
+
} | string | null | undefined)[] | null;
|
|
15
17
|
}
|
|
16
18
|
/** High-level OG renderer — accepts the raw product document from `getProductForDetail`. */
|
|
17
19
|
export declare function renderProductOg(doc: ProductDocLike | null | undefined, opts: OgOptions & {
|
|
@@ -6,7 +6,9 @@ export function renderProductOg(doc, opts) {
|
|
|
6
6
|
return renderProductOgImage({
|
|
7
7
|
title: doc?.title ?? "Product",
|
|
8
8
|
price: doc?.price ?? null,
|
|
9
|
-
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
9
|
+
imageUrl: resolveOgImageUrl(doc?.mainImage ||
|
|
10
|
+
(typeof doc?.images?.[0] === "string" ? doc.images[0] : doc?.images?.[0]?.url) ||
|
|
11
|
+
null, opts.baseUrl),
|
|
10
12
|
}, opts.siteName);
|
|
11
13
|
}
|
|
12
14
|
export function renderProductOgImage(data, siteName) {
|
|
@@ -10,3 +10,22 @@ import { type TriggerEventRaffleInput, type TriggerEventRaffleResult } from "../
|
|
|
10
10
|
import { type AssignSpinPrizeInput, type AssignSpinPrizeResult } from "../../jobs/core/assignSpinPrize";
|
|
11
11
|
export declare function triggerEventRaffleAction(input: TriggerEventRaffleInput): Promise<ActionResult<TriggerEventRaffleResult>>;
|
|
12
12
|
export declare function assignSpinPrizeAction(input: AssignSpinPrizeInput): Promise<ActionResult<AssignSpinPrizeResult>>;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a slug-or-id to the canonical event DOCUMENT ID.
|
|
15
|
+
*
|
|
16
|
+
* Exists for one caller — `POST /api/events/[id]/spin`, which must hash a
|
|
17
|
+
* guest's identity against a stable key BEFORE calling the spin action.
|
|
18
|
+
*
|
|
19
|
+
* 🛑 Why this is not just a nicety. Public URLs link by slug, so the route
|
|
20
|
+
* received a slug and did `hashGuestIdentity(slug, request)`, while
|
|
21
|
+
* `enterEvent` hashes on the resolved doc id. Two identities for one guest on
|
|
22
|
+
* one event. While the spin core's lookup was broken that was invisible (every
|
|
23
|
+
* spin 404'd); the moment the lookup was fixed it would have become a silent
|
|
24
|
+
* `spinMaxPerUser` bypass — exhaust your spins on `/events/<slug>/participate`
|
|
25
|
+
* and get a fresh allowance on `/events/<docId>/participate`.
|
|
26
|
+
*
|
|
27
|
+
* Returns `null` for an unknown event; the route then lets the spin action
|
|
28
|
+
* produce the single authoritative `event_not_found` rather than guessing at
|
|
29
|
+
* one here.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveEventIdAction(idOrSlug: string): Promise<ActionResult<string | null>>;
|