@mohasinac/appkit 4.52.5 → 4.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +4 -4
- package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
- package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
- package/dist/_internal/client/scaffolds/AppShell.js +1 -1
- package/dist/_internal/server/features/auctions/actions.js +1 -1
- package/dist/_internal/server/features/auctions/og.d.ts +3 -1
- package/dist/_internal/server/features/auctions/og.js +3 -1
- package/dist/_internal/server/features/bundles/actions.js +1 -1
- package/dist/_internal/server/features/business-documents/download.d.ts +41 -0
- package/dist/_internal/server/features/business-documents/download.js +91 -0
- package/dist/_internal/server/features/categories/adapters.d.ts +1 -1
- package/dist/_internal/server/features/categories/adapters.js +10 -0
- package/dist/_internal/server/features/categories/data.js +23 -7
- package/dist/_internal/server/features/checkout/actions.d.ts +14 -0
- package/dist/_internal/server/features/checkout/actions.js +116 -15
- package/dist/_internal/server/features/checkout/bundle-expansion.js +17 -0
- package/dist/_internal/server/features/checkout/data.d.ts +37 -0
- package/dist/_internal/server/features/checkout/data.js +20 -3
- package/dist/_internal/server/features/checkout/group-rule-revalidation.d.ts +34 -0
- package/dist/_internal/server/features/checkout/group-rule-revalidation.js +124 -0
- package/dist/_internal/server/features/checkout/supplier-identity.d.ts +55 -0
- package/dist/_internal/server/features/checkout/supplier-identity.js +81 -0
- package/dist/_internal/server/features/classified/metadata.js +1 -1
- package/dist/_internal/server/features/classified/og.d.ts +3 -1
- package/dist/_internal/server/features/classified/og.js +3 -1
- package/dist/_internal/server/features/digital-code/metadata.js +1 -1
- package/dist/_internal/server/features/digital-code/og.d.ts +3 -1
- package/dist/_internal/server/features/digital-code/og.js +3 -1
- package/dist/_internal/server/features/digital-code/pool.d.ts +19 -4
- package/dist/_internal/server/features/digital-code/pool.js +19 -4
- package/dist/_internal/server/features/live/metadata.js +1 -1
- package/dist/_internal/server/features/live/og.d.ts +3 -1
- package/dist/_internal/server/features/live/og.js +3 -1
- package/dist/_internal/server/features/lottery/actions.js +9 -1
- package/dist/_internal/server/features/lottery/og.d.ts +40 -0
- package/dist/_internal/server/features/lottery/og.js +79 -0
- package/dist/_internal/server/features/messages/actions.js +5 -1
- package/dist/_internal/server/features/offers/adapters.js +17 -3
- package/dist/_internal/server/features/orders/actions.js +7 -2
- package/dist/_internal/server/features/parts/og.js +1 -1
- package/dist/_internal/server/features/pre-orders/og.d.ts +3 -1
- package/dist/_internal/server/features/pre-orders/og.js +3 -1
- package/dist/_internal/server/features/price-index/search.d.ts +18 -0
- package/dist/_internal/server/features/price-index/search.js +47 -7
- package/dist/_internal/server/features/prize-draws/og.d.ts +3 -1
- package/dist/_internal/server/features/prize-draws/og.js +3 -1
- package/dist/_internal/server/features/products/group-members.d.ts +26 -0
- package/dist/_internal/server/features/products/group-members.js +7 -1
- package/dist/_internal/server/features/products/og.d.ts +3 -1
- package/dist/_internal/server/features/products/og.js +3 -1
- package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
- package/dist/_internal/server/features/raffle/actions.js +25 -0
- package/dist/_internal/server/features/reviews/actions.js +1 -1
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
- package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
- package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
- package/dist/_internal/server/features/search/index-build/build.js +285 -0
- package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
- package/dist/_internal/server/features/search/index-build/sources.js +385 -0
- package/dist/_internal/server/features/search/scoped-sources.d.ts +26 -0
- package/dist/_internal/server/features/search/scoped-sources.js +252 -0
- package/dist/_internal/server/features/search/search-everything.d.ts +57 -0
- package/dist/_internal/server/features/search/search-everything.js +70 -20
- package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
- package/dist/_internal/server/features/search/search-sources.js +142 -7
- package/dist/_internal/server/features/seo/robots.js +21 -1
- package/dist/_internal/server/features/seo/sitemap.js +7 -1
- package/dist/_internal/server/features/shared/listing-adapters.js +4 -2
- package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
- package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
- package/dist/_internal/server/features/site-settings/adapters.js +26 -0
- package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
- package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
- package/dist/_internal/server/features/sticker-trace/adapters.d.ts +91 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +175 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
- package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
- package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
- package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
- package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +264 -0
- package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
- package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
- package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
- package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +143 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +311 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +154 -0
- package/dist/_internal/server/features/sticker-trace/storage.js +301 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
- package/dist/_internal/server/features/stores/adapters.js +16 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +25 -0
- package/dist/_internal/server/features/stores/tabs.js +122 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +25 -1
- package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
- package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
- package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
- package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
- package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
- package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
- package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
- package/dist/_internal/server/jobs/core/promotions.js +7 -4
- package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
- package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +1 -0
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
- package/dist/_internal/shared/actions/action-registry.js +29 -0
- package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
- package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
- package/dist/_internal/shared/checkout/rules/_defaults.js +0 -2
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +14 -1
- package/dist/_internal/shared/checkout/rules/_limits.js +14 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +2 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.js +9 -1
- package/dist/_internal/shared/checkout/rules/bundle.rule.js +13 -0
- package/dist/_internal/shared/checkout/rules/index.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/index.js +9 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.js +0 -1
- package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +26 -0
- package/dist/_internal/shared/checkout/rules/payment-gate.js +133 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +29 -8
- package/dist/_internal/shared/checkout/rules/spares.rule.d.ts +16 -0
- package/dist/_internal/shared/checkout/rules/spares.rule.js +5 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +26 -2
- package/dist/_internal/shared/config/schema.d.ts +122 -0
- package/dist/_internal/shared/features/cart/schema.js +3 -2
- package/dist/_internal/shared/features/events/config.d.ts +14 -0
- package/dist/_internal/shared/features/events/config.js +14 -0
- package/dist/_internal/shared/features/notifications/action-url.js +8 -0
- package/dist/_internal/shared/features/products/group-rules.d.ts +75 -0
- package/dist/_internal/shared/features/products/group-rules.js +142 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
- package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
- package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
- package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
- package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
- package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
- package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
- package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +35 -0
- package/dist/_internal/shared/listing-types/_registry.js +39 -1
- package/dist/_internal/shared/listing-types/art/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/art/config.js +3 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/auction/config.js +3 -0
- package/dist/_internal/shared/listing-types/availability.js +48 -0
- package/dist/_internal/shared/listing-types/capabilities.js +19 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/classified/config.js +3 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +3 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +10 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/live/config.js +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +3 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +3 -0
- package/dist/_internal/shared/listing-types/spares/config.d.ts +74 -0
- package/dist/_internal/shared/listing-types/spares/config.js +60 -0
- package/dist/_internal/shared/listing-types/spares/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/ctas.js +4 -0
- package/dist/_internal/shared/listing-types/spares/og.js +1 -0
- package/dist/_internal/shared/listing-types/spares/schema.d.ts +2 -0
- package/dist/_internal/shared/listing-types/spares/schema.js +3 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/standard/config.js +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +3 -0
- package/dist/_internal/shared/media/limits.d.ts +12 -2
- package/dist/_internal/shared/media/limits.js +12 -2
- package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
- package/dist/_internal/shared/search/artifact-url.js +119 -0
- package/dist/_internal/shared/search/index-record.d.ts +68 -0
- package/dist/_internal/shared/search/index-record.js +96 -0
- package/dist/_internal/shared/search/match.d.ts +76 -0
- package/dist/_internal/shared/search/match.js +264 -0
- package/dist/_internal/shared/search/to-groups.d.ts +52 -0
- package/dist/_internal/shared/search/to-groups.js +141 -0
- package/dist/client.d.ts +16 -9
- package/dist/client.js +16 -6
- package/dist/configs/eslint.js +22 -2
- package/dist/constants/api-endpoints.d.ts +107 -15
- package/dist/constants/api-endpoints.js +60 -5
- package/dist/constants/cache-invalidation.js +3 -1
- package/dist/constants/field-names.d.ts +13 -1
- package/dist/constants/field-names.js +42 -1
- package/dist/contracts/repository.d.ts +8 -7
- package/dist/contracts/search.d.ts +2 -2
- package/dist/contracts/table.d.ts +3 -3
- package/dist/contracts/table.js +3 -3
- package/dist/core/contact-submissions.repository.js +2 -2
- package/dist/core/integration-keys.js +7 -1
- package/dist/core/newsletter.repository.js +2 -2
- package/dist/core/site-config.js +1 -1
- package/dist/errors/error-codes.d.ts +30 -0
- package/dist/errors/error-codes.js +30 -0
- package/dist/errors/error-display-map.js +40 -1
- package/dist/features/about/components/PolicyPageView.d.ts +22 -2
- package/dist/features/about/components/PolicyPageView.js +14 -2
- package/dist/features/about/components/PublicProfileView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +42 -2
- package/dist/features/account/api/[userId]/addresses/route.js +1 -1
- package/dist/features/account/components/NotificationBell.js +1 -1
- package/dist/features/account/components/UserBidsView.js +1 -1
- package/dist/features/account/components/index.d.ts +0 -8
- package/dist/features/account/components/index.js +0 -4
- package/dist/features/account/hooks/useProfileStats.js +5 -1
- package/dist/features/addresses/repository/addresses.repository.d.ts +33 -6
- package/dist/features/addresses/repository/addresses.repository.js +86 -9
- package/dist/features/addresses/schemas/firestore.d.ts +17 -6
- package/dist/features/admin/actions/admin-actions.js +16 -1
- package/dist/features/admin/actions/notification-actions.js +15 -6
- package/dist/features/admin/api/bids/route.js +1 -1
- package/dist/features/admin/api/coupons/route.js +1 -1
- package/dist/features/admin/api/products/route.js +1 -1
- package/dist/features/admin/api/reviews/route.js +1 -1
- package/dist/features/admin/components/AdminAdEditorView.js +19 -5
- package/dist/features/admin/components/AdminAuditLogView.js +1 -1
- package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
- package/dist/features/admin/components/AdminBlogView.js +1 -1
- package/dist/features/admin/components/AdminBrandsView.js +17 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +19 -3
- package/dist/features/admin/components/AdminContactView.js +1 -1
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
- package/dist/features/admin/components/AdminNavigationView.js +1 -1
- package/dist/features/admin/components/AdminNewsletterView.js +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +9 -2
- package/dist/features/admin/components/AdminPageHeader.js +1 -1
- package/dist/features/admin/components/AdminPayoutsView.js +1 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
- package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
- package/dist/features/admin/components/AdminProductEditorView.js +41 -39
- package/dist/features/admin/components/AdminProductsView.js +10 -3
- package/dist/features/admin/components/AdminScammersView.js +1 -1
- package/dist/features/admin/components/AdminSectionsView.js +21 -5
- package/dist/features/admin/components/AdminSessionsView.js +1 -1
- package/dist/features/admin/components/AdminSidebar.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +39 -8
- package/dist/features/admin/components/AdminSparesView.d.ts +12 -0
- package/dist/features/admin/components/AdminSparesView.js +30 -0
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
- package/dist/features/admin/components/AdminTeamView.js +1 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
- package/dist/features/admin/components/AdminUsersView.js +10 -8
- package/dist/features/admin/components/DataListingView.d.ts +2 -1
- package/dist/features/admin/components/DataListingView.js +9 -4
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +7 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
- package/dist/features/admin/constants/filter-tabs.js +1 -0
- package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
- package/dist/features/admin/repository/site-settings.repository.js +8 -3
- package/dist/features/admin/schemas/firestore.d.ts +88 -3
- package/dist/features/admin/schemas/firestore.js +32 -0
- package/dist/features/admin/types/index.d.ts +1 -1
- package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
- package/dist/features/auctions/actions/bid-actions.js +16 -4
- package/dist/features/auctions/api/route.js +1 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
- package/dist/features/auctions/components/AuctionDetailPageView.js +4 -11
- package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
- package/dist/features/auctions/repository/bid.repository.js +114 -13
- package/dist/features/auctions/schemas/firestore.d.ts +24 -4
- package/dist/features/auctions/schemas/firestore.js +1 -0
- package/dist/features/auth/actions/profile-actions.js +30 -4
- package/dist/features/auth/components/index.d.ts +0 -1
- package/dist/features/auth/components/index.js +0 -1
- package/dist/features/auth/repository/session.repository.d.ts +17 -3
- package/dist/features/auth/repository/session.repository.js +46 -5
- package/dist/features/auth/repository/token.repository.d.ts +27 -4
- package/dist/features/auth/repository/token.repository.js +65 -11
- package/dist/features/auth/repository/user.repository.d.ts +46 -7
- package/dist/features/auth/repository/user.repository.js +128 -15
- package/dist/features/auth/schemas/firestore.d.ts +65 -12
- package/dist/features/auth/schemas/firestore.js +13 -0
- package/dist/features/before-after/api/route.js +1 -1
- package/dist/features/blog/components/BlogListView.js +16 -3
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/blog/schemas/index.d.ts +2 -2
- package/dist/features/business-documents/repository/business-documents.repository.d.ts +58 -0
- package/dist/features/business-documents/repository/business-documents.repository.js +54 -0
- package/dist/features/business-documents/schemas/firestore.d.ts +105 -0
- package/dist/features/business-documents/schemas/firestore.js +75 -0
- package/dist/features/cart/actions/cart-actions.js +83 -6
- package/dist/features/cart/api/route.js +1 -1
- package/dist/features/cart/repository/cart.repository.js +32 -4
- package/dist/features/cart/schemas/firestore.d.ts +20 -0
- package/dist/features/cart/schemas/index.d.ts +2 -2
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +1 -1
- package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
- package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
- package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
- package/dist/features/categories/api/[id]/price-guidance/route.d.ts +42 -0
- package/dist/features/categories/api/[id]/price-guidance/route.js +113 -0
- package/dist/features/categories/api/route.js +10 -10
- package/dist/features/categories/components/BrandDetailPageView.js +19 -3
- package/dist/features/categories/components/BrandDetailTabs.js +10 -0
- package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
- package/dist/features/categories/components/CategoryDetailPageView.js +170 -13
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -0
- package/dist/features/categories/components/CategoryGrid.js +10 -1
- package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
- package/dist/features/categories/components/PriceGuidanceHint.d.ts +29 -0
- package/dist/features/categories/components/PriceGuidanceHint.js +61 -0
- package/dist/features/categories/components/SubcategoryCardRow.d.ts +27 -0
- package/dist/features/categories/components/SubcategoryCardRow.js +98 -0
- package/dist/features/categories/components/index.d.ts +0 -2
- package/dist/features/categories/components/index.js +0 -1
- package/dist/features/categories/constants/category-tabs.d.ts +20 -25
- package/dist/features/categories/constants/category-tabs.js +22 -39
- package/dist/features/categories/repository/categories.repository.d.ts +13 -0
- package/dist/features/categories/repository/categories.repository.js +51 -1
- package/dist/features/categories/schemas/firestore.d.ts +22 -1
- package/dist/features/categories/schemas/firestore.js +10 -0
- package/dist/features/categories/schemas/index.d.ts +8 -2
- package/dist/features/categories/schemas/index.js +2 -0
- package/dist/features/categories/types/index.d.ts +8 -0
- package/dist/features/categories/utils/taxonomy-visual.d.ts +34 -0
- package/dist/features/categories/utils/taxonomy-visual.js +74 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +4 -9
- package/dist/features/collections/api/[slug]/route.js +3 -3
- package/dist/features/collections/api/route.js +1 -1
- package/dist/features/consultation/api/route.js +1 -1
- package/dist/features/consultation/repository/consultations.repository.js +1 -1
- package/dist/features/consultation/types/index.d.ts +1 -1
- package/dist/features/contact/components/ContactForm.js +1 -3
- package/dist/features/contact/components/ContactPageView.d.ts +33 -1
- package/dist/features/contact/components/ContactPageView.js +58 -28
- package/dist/features/corporate/api/route.js +1 -1
- package/dist/features/corporate/repository/corporate.repository.js +1 -1
- package/dist/features/corporate/types/index.d.ts +1 -1
- package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
- package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -9
- package/dist/features/events/actions/event-actions.d.ts +14 -0
- package/dist/features/events/actions/event-actions.js +82 -3
- package/dist/features/events/api/[id]/route.js +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +32 -8
- package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
- package/dist/features/events/components/EventRafflesSection.js +52 -3
- package/dist/features/events/components/SpinWheelView.d.ts +2 -2
- package/dist/features/events/components/SpinWheelView.js +41 -4
- package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
- package/dist/features/events/repository/event-entry.repository.js +41 -7
- package/dist/features/events/schemas/firestore.d.ts +17 -4
- package/dist/features/events/types/index.d.ts +37 -0
- package/dist/features/faq/repository/faqs.repository.js +1 -1
- package/dist/features/faq/schemas/index.d.ts +5 -2
- package/dist/features/faq/schemas/index.js +6 -0
- package/dist/features/faq/types/index.d.ts +0 -1
- package/dist/features/grouped/components/GroupedListingDetailView.js +9 -1
- package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
- package/dist/features/grouped/schemas/firestore.d.ts +5 -0
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +3 -3
- package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
- package/dist/features/homepage/api/carousel/route.js +4 -4
- package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
- package/dist/features/homepage/components/AnnouncementBar.js +13 -19
- package/dist/features/homepage/components/CollectionCardsSection.d.ts +28 -6
- package/dist/features/homepage/components/CollectionCardsSection.js +43 -8
- package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -6
- package/dist/features/homepage/components/HowItWorksSection.js +4 -4
- package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
- package/dist/features/homepage/components/PromoGrid.d.ts +31 -2
- package/dist/features/homepage/components/PromoGrid.js +12 -3
- package/dist/features/homepage/components/TestimonialsCarousel.d.ts +34 -2
- package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
- package/dist/features/homepage/components/index.d.ts +0 -22
- package/dist/features/homepage/components/index.js +0 -12
- package/dist/features/homepage/index.d.ts +0 -2
- package/dist/features/homepage/index.js +0 -2
- package/dist/features/homepage/lib/section-renderer.d.ts +9 -0
- package/dist/features/homepage/lib/section-renderer.js +202 -58
- package/dist/features/homepage/repository/homepage-sections.repository.d.ts +35 -3
- package/dist/features/homepage/repository/homepage-sections.repository.js +58 -8
- package/dist/features/homepage/schemas/firestore.d.ts +112 -3
- package/dist/features/homepage/schemas/firestore.js +32 -2
- package/dist/features/homepage/schemas/index.d.ts +46 -17
- package/dist/features/homepage/schemas/index.js +39 -27
- package/dist/features/homepage/server.d.ts +0 -3
- package/dist/features/homepage/server.js +0 -3
- package/dist/features/homepage/types/index.d.ts +0 -47
- package/dist/features/homepage/types/index.js +49 -0
- package/dist/features/layout/AppLayoutShell.d.ts +11 -0
- package/dist/features/layout/AppLayoutShell.js +65 -13
- package/dist/features/layout/BottomActionsContext.d.ts +16 -0
- package/dist/features/layout/BottomActionsContext.js +5 -0
- package/dist/features/layout/BottomChrome.js +48 -9
- package/dist/features/layout/BottomNavItem.js +1 -1
- package/dist/features/layout/BottomNavbar.d.ts +14 -0
- package/dist/features/layout/BottomNavbar.js +43 -3
- package/dist/features/layout/BottomSheet.js +1 -1
- package/dist/features/layout/MainNavbar.d.ts +11 -0
- package/dist/features/layout/NavbarLayout.d.ts +3 -0
- package/dist/features/layout/NavbarLayout.js +88 -11
- package/dist/features/layout/SideActionDock.d.ts +1 -0
- package/dist/features/layout/SideActionDock.js +219 -0
- package/dist/features/layout/TitleBarLayout.js +1 -1
- package/dist/features/layout/cta-anchor.d.ts +31 -0
- package/dist/features/layout/cta-anchor.js +31 -0
- package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
- package/dist/features/layout/hooks/useBottomActions.js +6 -1
- package/dist/features/layout/index.d.ts +9 -1
- package/dist/features/layout/index.js +9 -1
- package/dist/features/layout/useCtaReveal.d.ts +24 -0
- package/dist/features/layout/useCtaReveal.js +82 -0
- package/dist/features/layout/useHoldToOpen.d.ts +41 -0
- package/dist/features/layout/useHoldToOpen.js +84 -0
- package/dist/features/live/components/LiveItemDetailPageView.js +4 -9
- package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
- package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
- package/dist/features/lottery/schemas/firestore.d.ts +33 -5
- package/dist/features/loyalty/api/balance/route.js +1 -1
- package/dist/features/loyalty/api/history/route.js +1 -1
- package/dist/features/media/MediaImage.js +0 -1
- package/dist/features/media/MediaPickerModal.js +7 -1
- package/dist/features/media/hooks/useMedia.js +17 -0
- package/dist/features/media/modals/ImageEditor.js +5 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
- package/dist/features/media/repository/media-assets.repository.d.ts +65 -0
- package/dist/features/media/repository/media-assets.repository.js +31 -0
- package/dist/features/media/trust-signals.d.ts +85 -0
- package/dist/features/media/trust-signals.js +126 -0
- package/dist/features/media/upload/CameraCapture.js +16 -1
- package/dist/features/media/upload/ImageUpload.js +42 -4
- package/dist/features/media/upload/MediaUploadField.js +69 -13
- package/dist/features/media/upload/downscale-image.d.ts +56 -0
- package/dist/features/media/upload/downscale-image.js +150 -0
- package/dist/features/messages/components/ConversationThreadView.js +45 -2
- package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
- package/dist/features/messages/components/MessageSellerButton.js +10 -2
- package/dist/features/messages/schemas/firestore.d.ts +15 -0
- package/dist/features/orders/hooks/useOrders.js +4 -2
- package/dist/features/orders/repository/orders.repository.d.ts +15 -4
- package/dist/features/orders/repository/orders.repository.js +52 -20
- package/dist/features/orders/schemas/firestore.d.ts +15 -4
- package/dist/features/orders/schemas/index.d.ts +8 -8
- package/dist/features/orders/types/index.d.ts +2 -2
- package/dist/features/parts/components/PartDetailPageView.d.ts +14 -1
- package/dist/features/parts/components/PartDetailPageView.js +2 -2
- package/dist/features/parts/components/PartsIndexPageView.d.ts +11 -2
- package/dist/features/parts/components/PartsIndexPageView.js +2 -2
- package/dist/features/parts/components/PartsSearchBox.d.ts +9 -0
- package/dist/features/parts/components/PartsSearchBox.js +57 -0
- package/dist/features/parts/schemas/firestore.d.ts +149 -3
- package/dist/features/parts/schemas/firestore.js +184 -0
- package/dist/features/payments/repository/payments.repository.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +38 -6
- package/dist/features/payments/repository/payout.repository.js +84 -23
- package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
- package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
- package/dist/features/payments/schemas/firestore.d.ts +14 -3
- package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
- package/dist/features/pre-orders/api/[slug]/route.js +1 -1
- package/dist/features/pre-orders/api/admin/route.js +1 -1
- package/dist/features/pre-orders/api/route.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -11
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
- package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
- package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +3 -1
- package/dist/features/price-index/components/PriceIndexToolView.js +92 -13
- package/dist/features/products/api/[id]/route.js +1 -1
- package/dist/features/products/components/CompareOverlay.d.ts +18 -1
- package/dist/features/products/components/CompareOverlay.js +21 -2
- package/dist/features/products/components/CustomSectionTabContent.d.ts +31 -0
- package/dist/features/products/components/CustomSectionTabContent.js +29 -3
- package/dist/features/products/components/GroupMemberPicker.d.ts +19 -1
- package/dist/features/products/components/GroupMemberPicker.js +46 -8
- package/dist/features/products/components/GroupSettingsPanel.d.ts +11 -1
- package/dist/features/products/components/GroupSettingsPanel.js +91 -3
- package/dist/features/products/components/ListingBottomActions.js +4 -0
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +15 -1
- package/dist/features/products/components/PrizeDrawEntryActions.js +70 -8
- package/dist/features/products/components/ProductDetailPageView.js +75 -15
- package/dist/features/products/components/ProductForm.d.ts +13 -1
- package/dist/features/products/components/ProductForm.js +16 -2
- package/dist/features/products/components/ProductGalleryClient.js +2 -2
- package/dist/features/products/components/ProductGrid.js +12 -1
- package/dist/features/products/components/ProductsIndexListing.d.ts +16 -1
- package/dist/features/products/components/ProductsIndexListing.js +3 -3
- package/dist/features/products/components/ShowGroupSection.js +15 -2
- package/dist/features/products/components/SparesListView.d.ts +7 -0
- package/dist/features/products/components/SparesListView.js +39 -0
- package/dist/features/products/components/index.d.ts +0 -2
- package/dist/features/products/components/index.js +0 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
- package/dist/features/products/config/listing-type-listing-config.js +27 -2
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/constants/listing-tabs.d.ts +9 -0
- package/dist/features/products/constants/listing-tabs.js +3 -2
- package/dist/features/products/hooks/useProducts.js +2 -2
- package/dist/features/products/repository/products.repository.d.ts +98 -0
- package/dist/features/products/repository/products.repository.js +248 -18
- package/dist/features/products/schemas/firestore.d.ts +97 -4
- package/dist/features/products/schemas/firestore.js +104 -0
- package/dist/features/products/schemas/index.d.ts +12 -21
- package/dist/features/products/schemas/index.js +23 -6
- package/dist/features/products/types/index.d.ts +46 -2
- package/dist/features/products/utils/group-member-image.d.ts +39 -0
- package/dist/features/products/utils/group-member-image.js +3 -0
- package/dist/features/products/utils/listing-badge-variant.js +4 -0
- package/dist/features/promotions/api/route.js +1 -1
- package/dist/features/reviews/actions/review-actions.d.ts +6 -6
- package/dist/features/reviews/actions/review-actions.js +22 -8
- package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
- package/dist/features/reviews/repository/reviews.repository.js +63 -12
- package/dist/features/reviews/schemas/firestore.d.ts +13 -2
- package/dist/features/reviews/schemas/index.d.ts +2 -2
- package/dist/features/scams/actions/scam-actions.js +16 -4
- package/dist/features/scams/components/ScamProfileView.js +1 -1
- package/dist/features/search/components/EntityTypeahead.d.ts +44 -0
- package/dist/features/search/components/EntityTypeahead.js +92 -0
- package/dist/features/search/components/Search.d.ts +12 -1
- package/dist/features/search/components/Search.js +47 -3
- package/dist/features/search/components/SearchFacetRail.d.ts +11 -0
- package/dist/features/search/components/SearchFacetRail.js +92 -0
- package/dist/features/search/components/SearchResultsClient.d.ts +33 -0
- package/dist/features/search/components/SearchResultsClient.js +103 -0
- package/dist/features/search/components/SearchResultsPageView.d.ts +15 -1
- package/dist/features/search/components/SearchResultsPageView.js +3 -2
- package/dist/features/search/components/index.d.ts +0 -6
- package/dist/features/search/components/index.js +0 -3
- package/dist/features/search/hooks/useNavSuggestions.d.ts +13 -0
- package/dist/features/search/hooks/useScopedSearch.d.ts +34 -0
- package/dist/features/search/hooks/useScopedSearch.js +114 -0
- package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
- package/dist/features/search/hooks/useSearchIndex.js +172 -0
- package/dist/features/search/hooks/useSiteSearch.d.ts +26 -0
- package/dist/features/search/hooks/useSiteSearch.js +149 -0
- package/dist/features/search/index.d.ts +0 -4
- package/dist/features/search/index.js +0 -4
- package/dist/features/search/manifest.d.ts +12 -0
- package/dist/features/search/manifest.js +17 -2
- package/dist/features/search/server.d.ts +0 -3
- package/dist/features/search/server.js +0 -3
- package/dist/features/seller/actions/offer-actions.d.ts +5 -5
- package/dist/features/seller/actions/offer-actions.js +38 -8
- package/dist/features/seller/actions/seller-actions.js +34 -7
- package/dist/features/seller/api/coupons/route.js +1 -1
- package/dist/features/seller/api/products/route.js +1 -1
- package/dist/features/seller/api/store/route.js +1 -1
- package/dist/features/seller/components/SellerBidsView.js +1 -1
- package/dist/features/seller/components/SellerCouponsView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.d.ts +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +29 -1
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +35 -15
- package/dist/features/seller/components/SellerPayoutsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
- package/dist/features/seller/components/SellerProductShell.js +2 -2
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +0 -1
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/components/SellerSparesView.d.ts +17 -0
- package/dist/features/seller/components/SellerSparesView.js +6 -0
- package/dist/features/seller/components/SellerStorefrontView.js +0 -1
- package/dist/features/seller/components/index.d.ts +2 -4
- package/dist/features/seller/components/index.js +1 -2
- package/dist/features/seller/repository/offer.repository.d.ts +15 -3
- package/dist/features/seller/repository/offer.repository.js +43 -7
- package/dist/features/seller/schemas/firestore.d.ts +14 -3
- package/dist/features/seller/schemas/index.d.ts +4 -4
- package/dist/features/seller/schemas/order-forms.d.ts +39 -0
- package/dist/features/seller/schemas/order-forms.js +37 -0
- package/dist/features/shell/CommandPalette.js +1 -1
- package/dist/features/shell/FormShell.js +6 -2
- package/dist/features/shell/QuickFormDrawer.js +15 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
- package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
- package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
- package/dist/features/sticker-trace/constants/help-content.js +172 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
- package/dist/features/sticker-trace/schemas/firestore.d.ts +267 -0
- package/dist/features/sticker-trace/schemas/firestore.js +79 -0
- package/dist/features/sticker-trace/server.d.ts +8 -0
- package/dist/features/sticker-trace/server.js +51 -0
- package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
- package/dist/features/stores/actions/store-query-actions.js +7 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/route.js +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +7 -82
- package/dist/features/stores/components/StoreHeader.js +1 -2
- package/dist/features/stores/components/StoreNavTabs.js +17 -2
- package/dist/features/stores/components/StoreSparesPageView.d.ts +27 -0
- package/dist/features/stores/components/StoreSparesPageView.js +48 -0
- package/dist/features/stores/manifest.js +8 -4
- package/dist/features/stores/schemas/firestore.d.ts +19 -0
- package/dist/features/support/repository/support.repository.d.ts +14 -3
- package/dist/features/support/repository/support.repository.js +93 -13
- package/dist/features/support/schemas/firestore.d.ts +16 -5
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +96 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +4 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +478 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +54 -32
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +3 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +73 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +340 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
- package/dist/features/tester/seed-data/authored/index.js +24 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +1 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +57 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +77 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +58 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +284 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +558 -34
- package/dist/index.d.ts +27 -80
- package/dist/index.js +62 -115
- package/dist/next/api/routeHandler.js +9 -0
- package/dist/next/routing/require-record.d.ts +13 -0
- package/dist/next/routing/require-record.js +62 -0
- package/dist/next/routing/route-map.d.ts +46 -5
- package/dist/next/routing/route-map.js +70 -3
- package/dist/providers/db-firebase/base.d.ts +4 -2
- package/dist/providers/db-firebase/base.js +21 -5
- package/dist/providers/db-firebase/base.repository.d.ts +33 -9
- package/dist/providers/db-firebase/base.repository.js +55 -0
- package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
- package/dist/providers/db-firebase/rtdb-paths.js +12 -0
- package/dist/react/ErrorBoundary.js +6 -1
- package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
- package/dist/react/hooks/realtime-event-constants.js +8 -0
- package/dist/react/hooks/useEntityDelete.js +5 -1
- package/dist/react/hooks/useMessage.js +5 -1
- package/dist/repositories/index.d.ts +2 -2
- package/dist/repositories/index.js +6 -1
- package/dist/schemas/registry.d.ts +28 -26
- package/dist/schemas/registry.js +31 -14
- package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
- package/dist/security/blind-index-tokens.d.ts +54 -0
- package/dist/security/blind-index-tokens.js +152 -0
- package/dist/security/encrypted.d.ts +117 -0
- package/dist/security/encrypted.js +100 -0
- package/dist/security/index.d.ts +6 -3
- package/dist/security/index.js +17 -3
- package/dist/security/pii-accessors.d.ts +71 -0
- package/dist/security/pii-accessors.js +150 -0
- package/dist/security/pii-encrypt.d.ts +0 -8
- package/dist/security/pii-encrypt.js +22 -15
- package/dist/security/pii-mask.d.ts +18 -0
- package/dist/security/pii-mask.js +27 -0
- package/dist/security/settings-encryption.d.ts +35 -0
- package/dist/security/settings-encryption.js +91 -0
- package/dist/seed/_helpers/brand-rows.js +38 -14
- package/dist/seed/_helpers/category-forest.js +73 -7
- package/dist/seed/_helpers/category-images-generated.d.ts +25 -6
- package/dist/seed/_helpers/category-images-generated.js +81 -6
- package/dist/seed/_helpers/category-models.d.ts +1 -1
- package/dist/seed/_helpers/category-models.js +7 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +8 -0
- package/dist/seed/_helpers/category-parts.d.ts +1 -1
- package/dist/seed/_helpers/category-parts.js +50 -2
- package/dist/seed/_helpers/character-features.d.ts +1 -1
- package/dist/seed/_helpers/character-features.js +2 -1
- package/dist/seed/_helpers/franchise-rows.js +10 -2
- package/dist/seed/_helpers/media.d.ts +47 -0
- package/dist/seed/_helpers/media.js +34 -0
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
- package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
- package/dist/seed/addresses-seed-data.d.ts +2 -2
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +78 -0
- package/dist/seed/authenticity-knowledge-seed-data.js +10729 -0
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +23 -2
- package/dist/seed/categories-seed-data.js +124 -20
- package/dist/seed/events-seed-data.d.ts +2 -2
- package/dist/seed/events-seed-data.js +5 -0
- package/dist/seed/faq-seed-data.js +175 -5
- package/dist/seed/grouped-listings-seed-data.js +16 -0
- package/dist/seed/homepage-sections-seed-data.js +131 -26
- package/dist/seed/index.d.ts +3 -3
- package/dist/seed/index.js +3 -2
- package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
- package/dist/seed/manifest.js +3 -0
- package/dist/seed/media-assets-seed-data.d.ts +1 -1
- package/dist/seed/media-assets-seed-data.js +746 -196
- package/dist/seed/model-composition-seed-data.js +122 -6
- package/dist/seed/offers-seed-data.d.ts +2 -2
- package/dist/seed/offers-seed-data.js +1 -1
- package/dist/seed/orders-seed-data.d.ts +2 -2
- package/dist/seed/part-glossary-seed-data.d.ts +1 -1
- package/dist/seed/part-glossary-seed-data.js +37219 -463
- package/dist/seed/payouts-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.js +1 -1
- package/dist/seed/products-art-seed-data.js +7 -18
- package/dist/seed/products-auctions-seed-data.js +56 -47
- package/dist/seed/products-beyblade-x-seed-data.d.ts +2 -0
- package/dist/seed/products-beyblade-x-seed-data.js +441 -0
- package/dist/seed/products-catalogue-seed-data.d.ts +5 -5
- package/dist/seed/products-catalogue-seed-data.js +1500 -1240
- package/dist/seed/products-classifieds-seed-data.js +9 -27
- package/dist/seed/products-digital-codes-seed-data.js +9 -18
- package/dist/seed/products-live-items-seed-data.js +5 -13
- package/dist/seed/products-preorders-seed-data.js +67 -33
- package/dist/seed/products-prize-draws-seed-data.js +8 -17
- package/dist/seed/products-spares-seed-data.d.ts +2 -0
- package/dist/seed/products-spares-seed-data.js +368 -0
- package/dist/seed/products-standard-seed-data.js +39 -126
- package/dist/seed/products-stickers-seed-data.js +59 -15
- package/dist/seed/reviews-seed-data.d.ts +1 -2
- package/dist/seed/seed-purpose.js +7 -0
- package/dist/seed/sessions-seed-data.d.ts +2 -2
- package/dist/seed/sessions-seed-data.js +5 -0
- package/dist/seed/site-settings-seed-data.js +9 -1
- package/dist/seed/support-tickets-seed-data.d.ts +2 -2
- package/dist/seed/support-tickets-seed-data.js +1 -1
- package/dist/seed/users-seed-data.d.ts +2 -2
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seo/json-ld.d.ts +25 -0
- package/dist/seo/json-ld.js +33 -1
- package/dist/server-entry.d.ts +3 -1
- package/dist/server-entry.js +2 -2
- package/dist/server.d.ts +27 -12
- package/dist/server.js +86 -28
- package/dist/styles.css +438 -1
- package/dist/tailwind-input.css +31 -17
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Accordion.js +1 -1
- package/dist/ui/components/Breadcrumb.js +1 -1
- package/dist/ui/components/Button.js +7 -1
- package/dist/ui/components/DetailPageGallery.js +0 -2
- package/dist/ui/components/DetailPageHero.js +0 -1
- package/dist/ui/components/DetailPageTabs.js +1 -1
- package/dist/ui/components/Divider.js +3 -3
- package/dist/ui/components/FilterChipGroup.d.ts +11 -0
- package/dist/ui/components/FilterChipGroup.js +1 -1
- package/dist/ui/components/GatedPrice.js +5 -1
- package/dist/ui/components/HorizontalScroller.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -1
- package/dist/ui/components/ListingLayout.js +17 -11
- package/dist/ui/components/MediaTabs.style.css +81 -0
- package/dist/ui/components/OverflowRow.d.ts +92 -0
- package/dist/ui/components/OverflowRow.js +203 -0
- package/dist/ui/components/OverflowRow.style.css +235 -0
- package/dist/ui/components/Pagination.js +1 -1
- package/dist/ui/components/PendingValue.d.ts +45 -0
- package/dist/ui/components/PendingValue.js +7 -0
- package/dist/ui/components/Radio.style.css +119 -0
- package/dist/ui/components/RatingDisplay.js +2 -2
- package/dist/ui/components/RecordDetailModal.js +14 -1
- package/dist/ui/components/RowActionMenu.js +5 -1
- package/dist/ui/components/SettingsSection.js +0 -2
- package/dist/ui/components/SideDrawer.js +5 -1
- package/dist/ui/components/SideModal.js +9 -1
- package/dist/ui/components/SiteLogo.js +3 -0
- package/dist/ui/components/SiteMark.js +3 -0
- package/dist/ui/components/SortDropdown.js +1 -1
- package/dist/ui/components/SpecTable.d.ts +58 -0
- package/dist/ui/components/SpecTable.js +8 -0
- package/dist/ui/components/StarRating.js +1 -3
- package/dist/ui/components/SummaryCard.js +1 -1
- package/dist/ui/components/TabBarShell.d.ts +12 -1
- package/dist/ui/components/TabBarShell.js +3 -2
- package/dist/ui/components/Tabs.js +36 -24
- package/dist/ui/components/Toast.d.ts +3 -24
- package/dist/ui/components/Toast.js +2 -19
- package/dist/ui/components/TopBannerPortal.d.ts +15 -0
- package/dist/ui/components/TopBannerPortal.js +19 -0
- package/dist/ui/components/UnsavedChangesModal.js +5 -1
- package/dist/ui/components/index.style.css +2 -0
- package/dist/ui/components/row-collapse.d.ts +15 -0
- package/dist/ui/components/row-collapse.js +127 -0
- package/dist/ui/components/toast-context.d.ts +63 -0
- package/dist/ui/components/toast-context.js +48 -0
- package/dist/ui/components/top-banner-slot.d.ts +37 -0
- package/dist/ui/components/top-banner-slot.js +45 -0
- package/dist/ui/icons/icon-registry.d.ts +7 -0
- package/dist/ui/icons/icon-registry.js +25 -1
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +3 -0
- package/dist/utils/array.helper.d.ts +2 -2
- package/dist/utils/array.helper.js +5 -5
- package/dist/utils/id-generators.d.ts +6 -0
- package/dist/utils/id-generators.js +10 -0
- package/dist/utils/media-url.js +0 -2
- package/dist/utils/search-txt-builders.d.ts +28 -4
- package/dist/utils/search-txt-builders.js +41 -1
- package/dist/utils/search-txt-query.d.ts +12 -0
- package/dist/utils/search-txt-query.js +12 -0
- package/dist/validation/schemas.d.ts +8 -8
- package/package.json +6 -2
- package/scripts/dedupe-peer-deps.mjs +18 -0
- package/scripts/seed-cli.mjs +138 -26
- package/scripts/verify-css-build.mjs +118 -37
- package/dist/_internal/server/features/search/actions.d.ts +0 -7
- package/dist/_internal/server/features/search/actions.js +0 -21
- package/dist/_internal/server/features/search/data.d.ts +0 -15
- package/dist/_internal/server/features/search/data.js +0 -18
- package/dist/_internal/server/features/search/index.d.ts +0 -3
- package/dist/_internal/server/features/search/index.js +0 -2
- package/dist/features/account/components/UserAddressesView.d.ts +0 -13
- package/dist/features/account/components/UserAddressesView.js +0 -5
- package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
- package/dist/features/account/components/UserNotificationsView.js +0 -12
- package/dist/features/account/components/UserSettingsView.d.ts +0 -16
- package/dist/features/account/components/UserSettingsView.js +0 -13
- package/dist/features/account/components/UserSupportView.d.ts +0 -3
- package/dist/features/account/components/UserSupportView.js +0 -166
- package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
- package/dist/features/admin/components/DemoSeedView.js +0 -5
- package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
- package/dist/features/auth/components/AuthStatusPanel.js +0 -22
- package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
- package/dist/features/categories/components/CategoryProductsView.js +0 -21
- package/dist/features/homepage/api/[id]/route.d.ts +0 -23
- package/dist/features/homepage/api/[id]/route.js +0 -103
- package/dist/features/homepage/api/route.d.ts +0 -14
- package/dist/features/homepage/api/route.js +0 -140
- package/dist/features/homepage/api/sections/[id]/route.d.ts +0 -26
- package/dist/features/homepage/api/sections/[id]/route.js +0 -95
- package/dist/features/homepage/api/sections/route.d.ts +0 -13
- package/dist/features/homepage/api/sections/route.js +0 -82
- package/dist/features/homepage/components/AdvertisementBanner.d.ts +0 -14
- package/dist/features/homepage/components/AdvertisementBanner.js +0 -35
- package/dist/features/homepage/components/BeforeAfterCard.d.ts +0 -9
- package/dist/features/homepage/components/BeforeAfterCard.js +0 -73
- package/dist/features/homepage/components/FeaturedResultsSection.d.ts +0 -17
- package/dist/features/homepage/components/FeaturedResultsSection.js +0 -17
- package/dist/features/homepage/components/HeroBanner.d.ts +0 -7
- package/dist/features/homepage/components/HeroBanner.js +0 -43
- package/dist/features/homepage/components/HeroSection.d.ts +0 -7
- package/dist/features/homepage/components/HeroSection.js +0 -6
- package/dist/features/homepage/components/HomepageSkeleton.d.ts +0 -2
- package/dist/features/homepage/components/HomepageSkeleton.js +0 -21
- package/dist/features/homepage/components/HomepageView.d.ts +0 -25
- package/dist/features/homepage/components/HomepageView.js +0 -5
- package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
- package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
- package/dist/features/homepage/components/NewsletterBanner.d.ts +0 -23
- package/dist/features/homepage/components/NewsletterBanner.js +0 -37
- package/dist/features/homepage/components/SiteFeaturesSection.d.ts +0 -14
- package/dist/features/homepage/components/SiteFeaturesSection.js +0 -11
- package/dist/features/homepage/components/TrustBadges.d.ts +0 -6
- package/dist/features/homepage/components/TrustBadges.js +0 -46
- package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +0 -12
- package/dist/features/homepage/components/TrustIndicatorsSection.js +0 -11
- package/dist/features/homepage/hooks/useHomepage.d.ts +0 -11
- package/dist/features/homepage/hooks/useHomepage.js +0 -17
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +0 -2
- package/dist/features/homepage/hooks/useHomepageSections.js +0 -10
- package/dist/features/homepage/repository/homepage.repository.d.ts +0 -11
- package/dist/features/homepage/repository/homepage.repository.js +0 -25
- package/dist/features/layout/BottomActions.d.ts +0 -1
- package/dist/features/layout/BottomActions.js +0 -311
- package/dist/features/products/components/ProductsView.d.ts +0 -6
- package/dist/features/products/components/ProductsView.js +0 -5
- package/dist/features/search/actions/index.d.ts +0 -1
- package/dist/features/search/actions/index.js +0 -1
- package/dist/features/search/actions/search-actions.d.ts +0 -18
- package/dist/features/search/actions/search-actions.js +0 -43
- package/dist/features/search/api/route.d.ts +0 -22
- package/dist/features/search/api/route.js +0 -128
- package/dist/features/search/columns/index.d.ts +0 -17
- package/dist/features/search/columns/index.js +0 -49
- package/dist/features/search/components/SearchFiltersRow.d.ts +0 -22
- package/dist/features/search/components/SearchFiltersRow.js +0 -21
- package/dist/features/search/components/SearchResultsSection.d.ts +0 -53
- package/dist/features/search/components/SearchResultsSection.js +0 -35
- package/dist/features/search/components/SearchView.d.ts +0 -27
- package/dist/features/search/components/SearchView.js +0 -8
- package/dist/features/search/hooks/useSearch.d.ts +0 -21
- package/dist/features/search/hooks/useSearch.js +0 -33
- package/dist/features/search/repository/search.repository.d.ts +0 -14
- package/dist/features/search/repository/search.repository.js +0 -59
- package/dist/features/search/schemas/index.d.ts +0 -70
- package/dist/features/search/schemas/index.js +0 -36
- package/dist/features/search/types/index.d.ts +0 -48
- package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
- package/dist/features/seller/components/SellerStoreView.js +0 -8
- package/dist/features/stores/components/StoreScopedSearch.d.ts +0 -17
- package/dist/features/stores/components/StoreScopedSearch.js +0 -27
- package/dist/seed/defaults/homepage-sections.d.ts +0 -2
- package/dist/seed/defaults/homepage-sections.js +0 -60
- package/dist/seed/factories/homepage-section.factory.d.ts +0 -10
- package/dist/seed/factories/homepage-section.factory.js +0 -13
- /package/dist/{features/search/types/index.js → _internal/shared/listing-types/spares/og.d.ts} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { alwaysAvailable } from "../availability";
|
|
2
|
+
export declare const LISTING_TYPE: "spares";
|
|
3
|
+
export declare const capability: import("../capabilities").ListingTypeCapability;
|
|
4
|
+
export declare const config: {
|
|
5
|
+
listingType: "spares";
|
|
6
|
+
slugPrefix: string;
|
|
7
|
+
cartLine: "single-product";
|
|
8
|
+
detailRoute: (idOrSlug: string) => string;
|
|
9
|
+
badge: {
|
|
10
|
+
label: string;
|
|
11
|
+
className: string;
|
|
12
|
+
};
|
|
13
|
+
priceLabel: string;
|
|
14
|
+
typeLabel: string;
|
|
15
|
+
showsStockQuantity: boolean;
|
|
16
|
+
tabSlug: string;
|
|
17
|
+
pluralLabel: string;
|
|
18
|
+
chipLabel: string;
|
|
19
|
+
browseRoute: string;
|
|
20
|
+
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "spares";
|
|
23
|
+
hideDefault: "sold";
|
|
24
|
+
isAvailable: typeof alwaysAvailable;
|
|
25
|
+
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
26
|
+
sortOptions: readonly [{
|
|
27
|
+
readonly value: string;
|
|
28
|
+
readonly label: "Newest First";
|
|
29
|
+
}, {
|
|
30
|
+
readonly value: string;
|
|
31
|
+
readonly label: "Oldest First";
|
|
32
|
+
}, {
|
|
33
|
+
readonly value: string;
|
|
34
|
+
readonly label: "Price: Low to High";
|
|
35
|
+
}, {
|
|
36
|
+
readonly value: string;
|
|
37
|
+
readonly label: "Price: High to Low";
|
|
38
|
+
}, {
|
|
39
|
+
readonly value: string;
|
|
40
|
+
readonly label: "Name: A–Z";
|
|
41
|
+
}, {
|
|
42
|
+
readonly value: string;
|
|
43
|
+
readonly label: "Name: Z–A";
|
|
44
|
+
}, {
|
|
45
|
+
readonly value: string;
|
|
46
|
+
readonly label: "Featured First";
|
|
47
|
+
}, {
|
|
48
|
+
readonly value: string;
|
|
49
|
+
readonly label: "Promoted First";
|
|
50
|
+
}, {
|
|
51
|
+
readonly value: string;
|
|
52
|
+
readonly label: "Recently Updated";
|
|
53
|
+
}];
|
|
54
|
+
publicSortOptions: readonly [{
|
|
55
|
+
readonly value: string;
|
|
56
|
+
readonly label: "Newest First";
|
|
57
|
+
}, {
|
|
58
|
+
readonly value: string;
|
|
59
|
+
readonly label: "Oldest First";
|
|
60
|
+
}, {
|
|
61
|
+
readonly value: string;
|
|
62
|
+
readonly label: "Price: Low to High";
|
|
63
|
+
}, {
|
|
64
|
+
readonly value: string;
|
|
65
|
+
readonly label: "Price: High to Low";
|
|
66
|
+
}, {
|
|
67
|
+
readonly value: string;
|
|
68
|
+
readonly label: "Name: A–Z";
|
|
69
|
+
}, {
|
|
70
|
+
readonly value: string;
|
|
71
|
+
readonly label: "Name: Z–A";
|
|
72
|
+
}];
|
|
73
|
+
extraFacetKeys: readonly string[];
|
|
74
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { LISTING_TYPE_CAPABILITIES } from "../capabilities.js";
|
|
2
|
+
import { alwaysAvailable, STOCK_ONLY_UNAVAILABLE_CLAUSES, } from "../availability.js";
|
|
3
|
+
import { ROUTES } from "../../../../next/routing/route-map.js";
|
|
4
|
+
import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../../../../features/products/constants/sieve.js";
|
|
5
|
+
export const LISTING_TYPE = "spares";
|
|
6
|
+
export const capability = LISTING_TYPE_CAPABILITIES.spares;
|
|
7
|
+
export const config = {
|
|
8
|
+
listingType: LISTING_TYPE,
|
|
9
|
+
/*
|
|
10
|
+
* Singular, matching `sticker-` rather than the plural type name.
|
|
11
|
+
*
|
|
12
|
+
* 🛑 Matched by `startsWith`, so this exact string must open every seeded id
|
|
13
|
+
* or `audit-seed-listing-type`'s R3 fails on every row — that audit calls the
|
|
14
|
+
* shipped `detectListingTypeFromSlug` rather than re-deriving the map, which
|
|
15
|
+
* is how it caught five `stickers-` ids against a registered `sticker-`.
|
|
16
|
+
*/
|
|
17
|
+
slugPrefix: "spare-",
|
|
18
|
+
cartLine: "single-product",
|
|
19
|
+
detailRoute: (idOrSlug) => String(ROUTES.PUBLIC.PRODUCT_DETAIL(idOrSlug)),
|
|
20
|
+
badge: { label: "Spare Part", className: "bg-primary-700 text-white" },
|
|
21
|
+
priceLabel: "Price (₹)",
|
|
22
|
+
typeLabel: "Spares",
|
|
23
|
+
showsStockQuantity: true,
|
|
24
|
+
tabSlug: "spares",
|
|
25
|
+
pluralLabel: "Spares",
|
|
26
|
+
chipLabel: "Spares",
|
|
27
|
+
browseRoute: String(ROUTES.PUBLIC.SPARES),
|
|
28
|
+
/*
|
|
29
|
+
* 🛑 `false`, and it obliges the nav entry that lands in the same change.
|
|
30
|
+
*
|
|
31
|
+
* The rule for this flag is nav reachability, not taste: a type kept out of
|
|
32
|
+
* the general catalogue must own a page that `MAIN_NAV_ITEMS` links, or it is
|
|
33
|
+
* reachable from nowhere (Root Cause #61). `/spares` is that page.
|
|
34
|
+
*
|
|
35
|
+
* The reason to keep it out is the catalogue itself. A seller who strips one
|
|
36
|
+
* Beyblade lists eight parts, so a few disassembled items would outnumber
|
|
37
|
+
* every complete listing on `/products` — and a buyer looking for a loose
|
|
38
|
+
* attack ring wants a page where everything is a loose part, not one where
|
|
39
|
+
* they are scattered among bundles and sealed boxes.
|
|
40
|
+
*/
|
|
41
|
+
inGeneralCatalogue: false,
|
|
42
|
+
/*
|
|
43
|
+
* A sheet-plus-parts group is the shape this exists for on the sticker side,
|
|
44
|
+
* and the same shape sells a stripped bey: the whole item as the parent, each
|
|
45
|
+
* salvaged part as a child, buyer takes any mix.
|
|
46
|
+
*/
|
|
47
|
+
canJoinProductGroup: true,
|
|
48
|
+
iconKey: "spares",
|
|
49
|
+
hideDefault: "sold",
|
|
50
|
+
/*
|
|
51
|
+
* A spare runs out rather than ending — there is no time dimension at all, so
|
|
52
|
+
* the shared stock-only rules are the whole story. Usually quantity 1: it is
|
|
53
|
+
* one physical object the seller happens to have.
|
|
54
|
+
*/
|
|
55
|
+
isAvailable: alwaysAvailable,
|
|
56
|
+
unavailableClauses: STOCK_ONLY_UNAVAILABLE_CLAUSES,
|
|
57
|
+
sortOptions: STANDARD_SORT_OPTIONS,
|
|
58
|
+
publicSortOptions: STANDARD_PUBLIC_SORT_OPTIONS,
|
|
59
|
+
extraFacetKeys: [],
|
|
60
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ctas: readonly string[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "order";
|
|
21
23
|
hideDefault: "sold";
|
|
22
24
|
isAvailable: typeof alwaysAvailable;
|
|
23
25
|
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
@@ -19,6 +19,9 @@ export const config = {
|
|
|
19
19
|
browseRoute: String(ROUTES.PUBLIC.PRODUCTS),
|
|
20
20
|
// The general catalogue IS this type's page.
|
|
21
21
|
inGeneralCatalogue: true,
|
|
22
|
+
// the ordinary case — a complete item whose parts can be sold beside it
|
|
23
|
+
canJoinProductGroup: true,
|
|
24
|
+
iconKey: "order",
|
|
22
25
|
hideDefault: "sold",
|
|
23
26
|
// Runs out rather than ending — no time dimension, so the shared
|
|
24
27
|
// stock-only rules are the whole story for this type.
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "stickers";
|
|
21
23
|
hideDefault: "sold";
|
|
22
24
|
isAvailable: typeof alwaysAvailable;
|
|
23
25
|
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
@@ -22,6 +22,9 @@ export const config = {
|
|
|
22
22
|
browseRoute: String(ROUTES.PUBLIC.ART),
|
|
23
23
|
// /art ("Art & Stickers") is in MAIN_NAV_ITEMS and spans art + stickers.
|
|
24
24
|
inGeneralCatalogue: false,
|
|
25
|
+
// THE case this exists for: a sheet plus its individual cut-out stickers
|
|
26
|
+
canJoinProductGroup: true,
|
|
27
|
+
iconKey: "stickers",
|
|
25
28
|
hideDefault: "sold",
|
|
26
29
|
// Runs out rather than ending — no time dimension, so the shared
|
|
27
30
|
// stock-only rules are the whole story for this type.
|
|
@@ -13,8 +13,18 @@ export declare const MAX_IMAGE_BYTES: number;
|
|
|
13
13
|
export declare const MAX_PDF_BYTES: number;
|
|
14
14
|
export declare const MAX_VIDEO_BYTES: number;
|
|
15
15
|
export type MediaKind = "image" | "video" | "pdf";
|
|
16
|
-
/**
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Gallery images per listing.
|
|
18
|
+
*
|
|
19
|
+
* 24, raised from 10 on 2026-10-19 against measured competitor data
|
|
20
|
+
* (docs/research/competitor-crawl-2026-10/images.md): sampled maxima are
|
|
21
|
+
* raikagesbeybladestore 21, hobsoncollectibles 20, toycollectorsindia 31.
|
|
22
|
+
* 24 covers a pre-owned lot with headroom; 31 is a single outlier and sizing
|
|
23
|
+
* for it would be sizing for one listing.
|
|
24
|
+
*
|
|
25
|
+
* The market MEDIAN is 1-4, so this is a ceiling, not a target.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PRODUCT_MAX_IMAGES = 24;
|
|
18
28
|
/** Videos per listing. Bounded by `ProductDocument.video` being singular. */
|
|
19
29
|
export declare const PRODUCT_MAX_VIDEOS = 1;
|
|
20
30
|
/**
|
|
@@ -27,8 +27,18 @@ export const MAX_VIDEO_BYTES = 50 * MEGABYTE;
|
|
|
27
27
|
// The video cap is 1 because `ProductDocument.video` is a single field, not an
|
|
28
28
|
// array — raising it is a schema change, not a constant change.
|
|
29
29
|
// ---------------------------------------------------------------------------
|
|
30
|
-
/**
|
|
31
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Gallery images per listing.
|
|
32
|
+
*
|
|
33
|
+
* 24, raised from 10 on 2026-10-19 against measured competitor data
|
|
34
|
+
* (docs/research/competitor-crawl-2026-10/images.md): sampled maxima are
|
|
35
|
+
* raikagesbeybladestore 21, hobsoncollectibles 20, toycollectorsindia 31.
|
|
36
|
+
* 24 covers a pre-owned lot with headroom; 31 is a single outlier and sizing
|
|
37
|
+
* for it would be sizing for one listing.
|
|
38
|
+
*
|
|
39
|
+
* The market MEDIAN is 1-4, so this is a ceiling, not a target.
|
|
40
|
+
*/
|
|
41
|
+
export const PRODUCT_MAX_IMAGES = 24;
|
|
32
42
|
/** Videos per listing. Bounded by `ProductDocument.video` being singular. */
|
|
33
43
|
export const PRODUCT_MAX_VIDEOS = 1;
|
|
34
44
|
/**
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** `search-index/v{n}.json` — the version IS the cache key. */
|
|
2
|
+
export declare const SEARCH_INDEX_PREFIX = "search-index";
|
|
3
|
+
/**
|
|
4
|
+
* The manifest mirror's object name.
|
|
5
|
+
*
|
|
6
|
+
* 🛑 A MIRROR of `searchIndex/manifest` in Firestore, never the source of
|
|
7
|
+
* truth. The build writes Firestore first and this second, because the
|
|
8
|
+
* Firestore document is what the next build reads to decide its mode — a
|
|
9
|
+
* mirror that disagrees costs a stale client for 60 seconds, whereas a
|
|
10
|
+
* manifest the builder cannot trust costs a full rebuild.
|
|
11
|
+
*
|
|
12
|
+
* It exists so the client bootstrap is two plain `fetch`es and no Firebase
|
|
13
|
+
* SDK: pulling in the client SDK to read one small document would cost more
|
|
14
|
+
* bytes than the index it is pointing at.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SEARCH_MANIFEST_OBJECT = "search-index/manifest.json";
|
|
17
|
+
export declare function searchIndexObjectPath(version: number): string;
|
|
18
|
+
/** Public download URL for any object in the app's Storage bucket. */
|
|
19
|
+
export declare function firebaseDownloadUrl(bucket: string, objectPath: string): string;
|
|
20
|
+
export declare function searchManifestUrl(bucket: string): string;
|
|
21
|
+
export declare function searchArtifactUrl(bucket: string, version: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* What the client needs out of the manifest, and nothing more.
|
|
24
|
+
*
|
|
25
|
+
* Deliberately NOT the server's `SearchIndexManifest`: that one carries
|
|
26
|
+
* `dirty`, `lastFullAt` and `perType`, which are build bookkeeping. A client
|
|
27
|
+
* type that structurally accepts them would invite someone to render build
|
|
28
|
+
* state in the UI, and then the mirror could never drop a field.
|
|
29
|
+
*/
|
|
30
|
+
export interface SearchIndexManifestPublic {
|
|
31
|
+
readonly schema: number;
|
|
32
|
+
readonly version: number;
|
|
33
|
+
readonly builtAt: string;
|
|
34
|
+
readonly recordCount: number;
|
|
35
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: The browser and the builder must agree on where the search artifact
|
|
3
|
+
* lives, and the obvious URL for a public Storage object is the wrong
|
|
4
|
+
* one.
|
|
5
|
+
* WHAT: The two public URLs — the manifest and a versioned artifact — derived
|
|
6
|
+
* from the bucket name alone, with no Firebase SDK on either side.
|
|
7
|
+
*
|
|
8
|
+
* ## 🛑 The plain `GCS_HOST` URL does NOT work. Measured.
|
|
9
|
+
*
|
|
10
|
+
* It is the first one anyone reaches for and it returns **403**:
|
|
11
|
+
*
|
|
12
|
+
* GET https://{GCS_HOST}/<bucket>/search-index/v3.json -> 403
|
|
13
|
+
* GET https://{FIREBASE_STORAGE_HOST}/v0/b/<bucket>/o/
|
|
14
|
+
* search-index%2Fv3.json?alt=media -> 200
|
|
15
|
+
*
|
|
16
|
+
* (Both hosts are named by their constants rather than spelled out, because
|
|
17
|
+
* `audit-firestore-storage-urls` is strict-zero on the literals and does not
|
|
18
|
+
* strip comments. That is the correct constraint, not a nuisance: the hosts
|
|
19
|
+
* have exactly one declaration, in `utils/media-url.ts`, and this file
|
|
20
|
+
* imports it rather than becoming a second.)
|
|
21
|
+
*
|
|
22
|
+
* `storage.rules`'s `allow read: if true` is a **Firebase Storage** rule. It
|
|
23
|
+
* is evaluated by the Firebase download endpoint and has no bearing on the
|
|
24
|
+
* plain GCS JSON/XML API, which answers to IAM and object ACLs — neither of
|
|
25
|
+
* which grants `allUsers`. So the rule that makes this artifact public only
|
|
26
|
+
* applies on one of the two hosts.
|
|
27
|
+
*
|
|
28
|
+
* ## 🛑 Why this is NOT a `/media/<slug>` reference
|
|
29
|
+
*
|
|
30
|
+
* That audit's stated rule is "every MEDIA reference flows through
|
|
31
|
+
* `/media/<slug>`", and this is not media. Two reasons it must not be routed
|
|
32
|
+
* that way:
|
|
33
|
+
*
|
|
34
|
+
* 1. the proxy resolves a slug through a `mediaAssets/{slug}` Firestore read
|
|
35
|
+
* and then watermarks images — neither of which means anything for a JSON
|
|
36
|
+
* data file;
|
|
37
|
+
* 2. it would put a Vercel function in the path of a 405 KB download for
|
|
38
|
+
* every cold visitor. Root Cause #104 is precisely that bill — 52.52 GB
|
|
39
|
+
* of Fast Origin Transfer against a 10 GB allowance — and the whole point
|
|
40
|
+
* of an immutable version-addressed object is that nothing of ours serves
|
|
41
|
+
* it twice.
|
|
42
|
+
*
|
|
43
|
+
* Verified on the live bucket 2026-10-19, on the second host:
|
|
44
|
+
*
|
|
45
|
+
* Cache-Control: public, max-age=31536000, immutable (passed through)
|
|
46
|
+
* Access-Control-Allow-Origin: https://www.letitrip.in
|
|
47
|
+
* Vary: Origin
|
|
48
|
+
* Content-Length: 418830
|
|
49
|
+
*
|
|
50
|
+
* So the response is cacheable, CORS-readable and non-opaque — which is the
|
|
51
|
+
* whole precondition for the service worker rule and for being able to tell a
|
|
52
|
+
* 404 apart from an empty index.
|
|
53
|
+
*
|
|
54
|
+
* ## 🛑 The tracked CORS config had drifted from the live bucket
|
|
55
|
+
*
|
|
56
|
+
* Found while verifying the above. `appkit/firebase/base/storage-cors.json`
|
|
57
|
+
* is the tracked source of truth and `npm run storage:cors` applies it — but
|
|
58
|
+
* the live bucket had an origin (`letitrip-in-app.vercel.app`), a method
|
|
59
|
+
* (`POST`) and two response headers (`x-goog-resumable`,
|
|
60
|
+
* `x-goog-content-length-range`) the file did not, all of which the
|
|
61
|
+
* resumable-upload path uses. So running the script to "sync" it would have
|
|
62
|
+
* NARROWED the live config and broken uploads, in a repo where that command
|
|
63
|
+
* reads like the safe, idempotent thing to do.
|
|
64
|
+
*
|
|
65
|
+
* The file is now a strict SUPERSET of what was measured live, so applying it
|
|
66
|
+
* can only widen. The config was NOT re-applied as part of this work: GET
|
|
67
|
+
* from the app origins already worked, and re-applying is an upload-path
|
|
68
|
+
* change that has no business riding along with a search feature.
|
|
69
|
+
*
|
|
70
|
+
* ## The path must be percent-encoded WHOLE
|
|
71
|
+
*
|
|
72
|
+
* `/v0/b/<bucket>/o/<object>` takes the object name as ONE path segment, so
|
|
73
|
+
* the `/` inside `search-index/v3.json` has to become `%2F`. `encodeURIComponent`
|
|
74
|
+
* does exactly that; `encodeURI` does not, and would 404 in a way that reads
|
|
75
|
+
* like a missing artifact rather than a malformed URL.
|
|
76
|
+
*
|
|
77
|
+
* @tag domain:search
|
|
78
|
+
* @tag layer:shared
|
|
79
|
+
* @tag pattern:none
|
|
80
|
+
* @tag access:isomorphic
|
|
81
|
+
* @tag consumers:useSearchIndex,artifact-store,verify-search-serving
|
|
82
|
+
* @tag sideEffects:none
|
|
83
|
+
*/
|
|
84
|
+
/*
|
|
85
|
+
* The host comes from its ONE declaration. `utils/media-url.ts` is named in
|
|
86
|
+
* `audit-firestore-storage-urls`'s allowlist as the sole place these strings
|
|
87
|
+
* may appear, with every other module importing from it — so importing is
|
|
88
|
+
* the sanctioned mechanism here, not an exemption carved out for search.
|
|
89
|
+
*/
|
|
90
|
+
import { FIREBASE_STORAGE_HOST } from "../../../utils/media-url.js";
|
|
91
|
+
/** `search-index/v{n}.json` — the version IS the cache key. */
|
|
92
|
+
export const SEARCH_INDEX_PREFIX = "search-index";
|
|
93
|
+
/**
|
|
94
|
+
* The manifest mirror's object name.
|
|
95
|
+
*
|
|
96
|
+
* 🛑 A MIRROR of `searchIndex/manifest` in Firestore, never the source of
|
|
97
|
+
* truth. The build writes Firestore first and this second, because the
|
|
98
|
+
* Firestore document is what the next build reads to decide its mode — a
|
|
99
|
+
* mirror that disagrees costs a stale client for 60 seconds, whereas a
|
|
100
|
+
* manifest the builder cannot trust costs a full rebuild.
|
|
101
|
+
*
|
|
102
|
+
* It exists so the client bootstrap is two plain `fetch`es and no Firebase
|
|
103
|
+
* SDK: pulling in the client SDK to read one small document would cost more
|
|
104
|
+
* bytes than the index it is pointing at.
|
|
105
|
+
*/
|
|
106
|
+
export const SEARCH_MANIFEST_OBJECT = `${SEARCH_INDEX_PREFIX}/manifest.json`;
|
|
107
|
+
export function searchIndexObjectPath(version) {
|
|
108
|
+
return `${SEARCH_INDEX_PREFIX}/v${version}.json`;
|
|
109
|
+
}
|
|
110
|
+
/** Public download URL for any object in the app's Storage bucket. */
|
|
111
|
+
export function firebaseDownloadUrl(bucket, objectPath) {
|
|
112
|
+
return `https://${FIREBASE_STORAGE_HOST}/v0/b/${bucket}/o/${encodeURIComponent(objectPath)}?alt=media`;
|
|
113
|
+
}
|
|
114
|
+
export function searchManifestUrl(bucket) {
|
|
115
|
+
return firebaseDownloadUrl(bucket, SEARCH_MANIFEST_OBJECT);
|
|
116
|
+
}
|
|
117
|
+
export function searchArtifactUrl(bucket, version) {
|
|
118
|
+
return firebaseDownloadUrl(bucket, searchIndexObjectPath(version));
|
|
119
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bumped when the tuple or the envelope changes shape.
|
|
3
|
+
*
|
|
4
|
+
* 🛑 The client REFUSES an artifact whose schema it does not recognise and
|
|
5
|
+
* falls back to the server path, rather than rendering a half-understood one.
|
|
6
|
+
* That is why this is in the envelope and not implied by the URL.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SEARCH_INDEX_SCHEMA_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* The incremental build's watermark field.
|
|
11
|
+
*
|
|
12
|
+
* 🛑 ONE shared constant for the same reason `SEARCH_TXT_FIELD` is one:
|
|
13
|
+
* `updatedAt` is a CROSS-COLLECTION convention declared on `BaseDocument`, and
|
|
14
|
+
* `field-names.ts` repeats it in four separate per-feature blocks. A builder
|
|
15
|
+
* that queries THIRTEEN collections cannot honestly borrow any single
|
|
16
|
+
* feature's copy — `PRODUCT_FIELDS.UPDATED_AT` naming the field on a `faqs`
|
|
17
|
+
* query is a true string and a false statement.
|
|
18
|
+
*/
|
|
19
|
+
export declare const INDEX_UPDATED_AT_FIELD = "updatedAt";
|
|
20
|
+
/** One searchable kind. The artifact carries the table so the client needs no map. */
|
|
21
|
+
export interface SearchIndexType {
|
|
22
|
+
/** Stable key — `product`, `category`, `part`, … Also the i18n label key. */
|
|
23
|
+
readonly key: string;
|
|
24
|
+
/** `"/products/{s}"` — exactly one substitution, `{s}`, the record's slug. */
|
|
25
|
+
readonly hrefTemplate: string;
|
|
26
|
+
/** The indexable browse page, for the group's "see all" footer. */
|
|
27
|
+
readonly moreHref: string;
|
|
28
|
+
/** Type-level ranking nudge. A product outranks a review for the same score. */
|
|
29
|
+
readonly weight: number;
|
|
30
|
+
}
|
|
31
|
+
/** Tuple positions, named once so no call site indexes by magic number. */
|
|
32
|
+
export declare const REC_TYPE = 0;
|
|
33
|
+
export declare const REC_TITLE = 1;
|
|
34
|
+
export declare const REC_DETAIL = 2;
|
|
35
|
+
export declare const REC_SLUG = 3;
|
|
36
|
+
export declare const REC_FACETS = 4;
|
|
37
|
+
/**
|
|
38
|
+
* `[typeIdx, title, detail, slug, facets?]`
|
|
39
|
+
*
|
|
40
|
+
* `facets` is a compact pipe-joined string (`"lt:auction|br:takara-tomy"`) and
|
|
41
|
+
* is absent rather than empty when a record has none — an omitted trailing
|
|
42
|
+
* element costs two bytes, `""` costs four, times 3,730.
|
|
43
|
+
*/
|
|
44
|
+
export type SearchIndexRecord = readonly [
|
|
45
|
+
number,
|
|
46
|
+
string,
|
|
47
|
+
string,
|
|
48
|
+
string,
|
|
49
|
+
string?
|
|
50
|
+
];
|
|
51
|
+
export interface SearchIndexArtifact {
|
|
52
|
+
readonly schema: number;
|
|
53
|
+
/** Monotonic build number. The artifact is addressed by it and immutable. */
|
|
54
|
+
readonly version: number;
|
|
55
|
+
readonly builtAt: string;
|
|
56
|
+
readonly types: readonly SearchIndexType[];
|
|
57
|
+
readonly r: readonly SearchIndexRecord[];
|
|
58
|
+
}
|
|
59
|
+
/** Resolve a record's destination from the type table. */
|
|
60
|
+
export declare function hrefFor(artifact: Pick<SearchIndexArtifact, "types">, rec: SearchIndexRecord): string;
|
|
61
|
+
/**
|
|
62
|
+
* Parse the compact facet string into pairs.
|
|
63
|
+
*
|
|
64
|
+
* Returns an empty array for an absent or malformed field rather than
|
|
65
|
+
* throwing: a facet is a refinement, and a record whose facets cannot be read
|
|
66
|
+
* is still a record somebody should be able to find.
|
|
67
|
+
*/
|
|
68
|
+
export declare function facetsOf(rec: SearchIndexRecord): ReadonlyArray<readonly [string, string]>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: The public search index is one artifact fetched once per visitor and
|
|
3
|
+
* searched in the browser, so its shape is a wire format — every field
|
|
4
|
+
* costs bytes on every download, and every field that can be DERIVED
|
|
5
|
+
* instead of stored should be.
|
|
6
|
+
* WHAT: The record tuple, the type table, and the artifact envelope. Shared by
|
|
7
|
+
* the builder (server) and the matcher (browser) so the two cannot drift.
|
|
8
|
+
*
|
|
9
|
+
* ## 🛑 Why a tuple and not an object
|
|
10
|
+
*
|
|
11
|
+
* 3,730 records. An object repeats its keys on every row; a tuple does not.
|
|
12
|
+
* Measured on the real corpus: 373 KB raw / 63 KB gzip / 46 KB brotli as
|
|
13
|
+
* tuples. The readability cost is paid once, here, by naming the positions.
|
|
14
|
+
*
|
|
15
|
+
* ## What is deliberately ABSENT, and why each
|
|
16
|
+
*
|
|
17
|
+
* href derivable from `types[typeIdx].hrefTemplate`
|
|
18
|
+
* normalised derived once at load with the SAME `normalizeSearchText` the
|
|
19
|
+
* title write path uses — storing it would be a second copy of a
|
|
20
|
+
* string we already ship
|
|
21
|
+
* tokens derived by calling the SAME `aliasVariantsForName` /
|
|
22
|
+
* `partAliasTokens` that are already in the bundle. Shipping
|
|
23
|
+
* them would duplicate a corpus the client already has
|
|
24
|
+
* label 🛑 NOT on the type table. A human-readable group heading baked
|
|
25
|
+
* into the artifact is untranslatable, and this app is
|
|
26
|
+
* `[locale]`-routed with every other UI string going through the
|
|
27
|
+
* label system. The client maps `key` -> label at render time
|
|
28
|
+
* price § Guest price gating is a CLIENT gate; it reaches the rendered
|
|
29
|
+
* DOM and nothing else. This artifact is unauthenticated and
|
|
30
|
+
* immutable-cached, so no gate can reach it — an amount here is
|
|
31
|
+
* published to everyone, permanently, for that version
|
|
32
|
+
* PII same argument, one step worse. Includes blind-index digests: a
|
|
33
|
+
* deterministic per-person identifier is cross-referenceable
|
|
34
|
+
* even unbroken
|
|
35
|
+
*
|
|
36
|
+
* The last two are enforced, not merely documented — see
|
|
37
|
+
* scripts/audit-search-index-artifact.mjs.
|
|
38
|
+
*
|
|
39
|
+
* @tag domain:search
|
|
40
|
+
* @tag layer:shared
|
|
41
|
+
* @tag pattern:none
|
|
42
|
+
* @tag access:isomorphic
|
|
43
|
+
* @tag consumers:index-build,match,verify-search-local
|
|
44
|
+
* @tag sideEffects:none
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* Bumped when the tuple or the envelope changes shape.
|
|
48
|
+
*
|
|
49
|
+
* 🛑 The client REFUSES an artifact whose schema it does not recognise and
|
|
50
|
+
* falls back to the server path, rather than rendering a half-understood one.
|
|
51
|
+
* That is why this is in the envelope and not implied by the URL.
|
|
52
|
+
*/
|
|
53
|
+
export const SEARCH_INDEX_SCHEMA_VERSION = 1;
|
|
54
|
+
/**
|
|
55
|
+
* The incremental build's watermark field.
|
|
56
|
+
*
|
|
57
|
+
* 🛑 ONE shared constant for the same reason `SEARCH_TXT_FIELD` is one:
|
|
58
|
+
* `updatedAt` is a CROSS-COLLECTION convention declared on `BaseDocument`, and
|
|
59
|
+
* `field-names.ts` repeats it in four separate per-feature blocks. A builder
|
|
60
|
+
* that queries THIRTEEN collections cannot honestly borrow any single
|
|
61
|
+
* feature's copy — `PRODUCT_FIELDS.UPDATED_AT` naming the field on a `faqs`
|
|
62
|
+
* query is a true string and a false statement.
|
|
63
|
+
*/
|
|
64
|
+
export const INDEX_UPDATED_AT_FIELD = "updatedAt";
|
|
65
|
+
/** Tuple positions, named once so no call site indexes by magic number. */
|
|
66
|
+
export const REC_TYPE = 0;
|
|
67
|
+
export const REC_TITLE = 1;
|
|
68
|
+
export const REC_DETAIL = 2;
|
|
69
|
+
export const REC_SLUG = 3;
|
|
70
|
+
export const REC_FACETS = 4;
|
|
71
|
+
/** Resolve a record's destination from the type table. */
|
|
72
|
+
export function hrefFor(artifact, rec) {
|
|
73
|
+
const type = artifact.types[rec[REC_TYPE]];
|
|
74
|
+
if (!type)
|
|
75
|
+
return "/";
|
|
76
|
+
return type.hrefTemplate.replace("{s}", rec[REC_SLUG]);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parse the compact facet string into pairs.
|
|
80
|
+
*
|
|
81
|
+
* Returns an empty array for an absent or malformed field rather than
|
|
82
|
+
* throwing: a facet is a refinement, and a record whose facets cannot be read
|
|
83
|
+
* is still a record somebody should be able to find.
|
|
84
|
+
*/
|
|
85
|
+
export function facetsOf(rec) {
|
|
86
|
+
const raw = rec[REC_FACETS];
|
|
87
|
+
if (!raw)
|
|
88
|
+
return [];
|
|
89
|
+
const out = [];
|
|
90
|
+
for (const part of raw.split("|")) {
|
|
91
|
+
const i = part.indexOf(":");
|
|
92
|
+
if (i > 0)
|
|
93
|
+
out.push([part.slice(0, i), part.slice(i + 1)]);
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type SearchIndexArtifact, type SearchIndexRecord } from "./index-record";
|
|
2
|
+
export interface ResolvedEntity {
|
|
3
|
+
/** Index into `artifact.types`. */
|
|
4
|
+
readonly typeIdx: number;
|
|
5
|
+
readonly typeKey: string;
|
|
6
|
+
readonly title: string;
|
|
7
|
+
readonly detail: string;
|
|
8
|
+
readonly href: string;
|
|
9
|
+
readonly score: number;
|
|
10
|
+
/**
|
|
11
|
+
* The record's raw compact facet string (`"lt:auction|br:takara-tomy"`), or
|
|
12
|
+
* `""`. Carried on the hit so a facet rail can count what the CURRENT result
|
|
13
|
+
* set contains without going back to the artifact and re-finding each row.
|
|
14
|
+
*
|
|
15
|
+
* 🛑 Raw rather than parsed, on purpose. Parsing is `facetsOf(rec)` and it
|
|
16
|
+
* allocates an array per record; a rail counts over every hit on every
|
|
17
|
+
* keystroke, and most queries never render one. The consumer parses the
|
|
18
|
+
* handful it actually needs.
|
|
19
|
+
*/
|
|
20
|
+
readonly facets: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ResolveOptions {
|
|
23
|
+
readonly limit?: number;
|
|
24
|
+
/** Restrict to these type keys. Empty/absent means every type. */
|
|
25
|
+
readonly types?: readonly string[];
|
|
26
|
+
/** Require every one of these `k:v` facet pairs. */
|
|
27
|
+
readonly facets?: readonly string[];
|
|
28
|
+
}
|
|
29
|
+
/** One record's searchable text, prepared once at load. */
|
|
30
|
+
interface Prepared {
|
|
31
|
+
readonly rec: SearchIndexRecord;
|
|
32
|
+
readonly titleWords: readonly string[];
|
|
33
|
+
readonly titleFlat: string;
|
|
34
|
+
readonly detailWords: readonly string[];
|
|
35
|
+
readonly detailFlat: string;
|
|
36
|
+
/** Alias + misspelling forms of the TITLE. See `prepareIndex`. */
|
|
37
|
+
readonly aliasWords: readonly string[];
|
|
38
|
+
readonly aliasFlat: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Prepare an artifact for searching.
|
|
42
|
+
*
|
|
43
|
+
* 🛑 Call this ONCE per artifact, not per query. It normalises every title and
|
|
44
|
+
* detail up front — ~3,700 × 2 `normalizeSearchText` calls, a few milliseconds
|
|
45
|
+
* — so that the per-keystroke path does no allocation beyond the query's own
|
|
46
|
+
* terms. Doing it inside `search` would move that cost onto every keystroke,
|
|
47
|
+
* which is the one thing this design exists to avoid.
|
|
48
|
+
*/
|
|
49
|
+
export declare function prepareIndex(artifact: SearchIndexArtifact): readonly Prepared[];
|
|
50
|
+
/**
|
|
51
|
+
* Search a prepared artifact.
|
|
52
|
+
*
|
|
53
|
+
* Returns a flat, score-ordered list. Grouping by type is the caller's job —
|
|
54
|
+
* the dropdown and the results page group differently, and a tool wants
|
|
55
|
+
* neither.
|
|
56
|
+
*/
|
|
57
|
+
export declare function searchIndex(artifact: SearchIndexArtifact, prepared: readonly Prepared[], query: string, opts?: ResolveOptions): readonly ResolvedEntity[];
|
|
58
|
+
/**
|
|
59
|
+
* The named primitive the tools call.
|
|
60
|
+
*
|
|
61
|
+
* 🛑 `types` is a parameter from day one BECAUSE the tools exist. `/parts`
|
|
62
|
+
* wants parts, the price index wants category leaves, the authenticity
|
|
63
|
+
* typeahead wants canonical models — three consumers, three subsets. Adding
|
|
64
|
+
* the filter later would mean changing every call site that had already been
|
|
65
|
+
* written without it.
|
|
66
|
+
*
|
|
67
|
+
* 🛑 It must NOT be wired into `/tools/authenticity`'s VERDICT path. That
|
|
68
|
+
* engine's fuzzy matching is evidence — a near-miss fires a trademark-evasion
|
|
69
|
+
* warning — and this matcher's alias corpus is built from a counterfeit
|
|
70
|
+
* seller's own spellings. Feeding one into the other would silence the warning
|
|
71
|
+
* by construction. The typeahead may propose a canonical entity; the engine
|
|
72
|
+
* must still analyse what the user actually typed. Enforced by
|
|
73
|
+
* audit-entity-resolver-consumers R2.
|
|
74
|
+
*/
|
|
75
|
+
export declare function resolveEntity(artifact: SearchIndexArtifact, prepared: readonly Prepared[], query: string, opts?: ResolveOptions): readonly ResolvedEntity[];
|
|
76
|
+
export type { Prepared as PreparedIndex };
|