@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
|
@@ -31,6 +31,36 @@ export declare const OFFER_ERROR_CODES: {
|
|
|
31
31
|
readonly CHECKOUT_EXPIRED: "OFFER_CHECKOUT_EXPIRED";
|
|
32
32
|
readonly WRONG_STATE: "OFFER_WRONG_STATE";
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Event prize-draw refusals — the spin wheel and the raffle draw.
|
|
36
|
+
*
|
|
37
|
+
* These exist because every refusal on those two surfaces used to render as the
|
|
38
|
+
* single string "Spin failed. Please try again.": the client threw a native
|
|
39
|
+
* `Error`, so `normalizeError` produced no code, so `toUserMessage` could only
|
|
40
|
+
* return its fallback. A closed window, an exhausted per-user cap and a
|
|
41
|
+
* misconfigured event were indistinguishable to the person spinning, and a
|
|
42
|
+
* 401 never opened the login modal.
|
|
43
|
+
*
|
|
44
|
+
* Statuses live beside the reasons in
|
|
45
|
+
* `_internal/server/jobs/core/event-draw-reasons.ts`; `audit-error-display-i18n`
|
|
46
|
+
* requires a matching `errors.codes.*` key in `messages/en.json` for every
|
|
47
|
+
* value below.
|
|
48
|
+
*/
|
|
49
|
+
export declare const EVENT_DRAW_ERROR_CODES: {
|
|
50
|
+
readonly IDENTITY_REQUIRED: "EVENT_IDENTITY_REQUIRED";
|
|
51
|
+
readonly LOGIN_REQUIRED: "EVENT_LOGIN_REQUIRED";
|
|
52
|
+
readonly EVENT_NOT_FOUND: "EVENT_NOT_FOUND";
|
|
53
|
+
readonly EVENT_NOT_ACTIVE: "EVENT_NOT_ACTIVE";
|
|
54
|
+
readonly SPIN_NO_PRIZES: "SPIN_NO_PRIZES";
|
|
55
|
+
readonly SPIN_OUTSIDE_WINDOW: "SPIN_OUTSIDE_WINDOW";
|
|
56
|
+
readonly SPIN_ALREADY_USED: "SPIN_ALREADY_USED";
|
|
57
|
+
readonly NOT_A_SPIN_WHEEL: "EVENT_NOT_A_SPIN_WHEEL";
|
|
58
|
+
readonly RAFFLE_NOT_A_RAFFLE: "RAFFLE_NOT_A_RAFFLE";
|
|
59
|
+
readonly RAFFLE_ALREADY_DRAWN: "RAFFLE_ALREADY_DRAWN";
|
|
60
|
+
readonly RAFFLE_NO_ELIGIBLE_ENTRIES: "RAFFLE_NO_ELIGIBLE_ENTRIES";
|
|
61
|
+
/** A reason the status map has never heard of — a bug in the core, mapped 500. */
|
|
62
|
+
readonly UNKNOWN_REASON: "EVENT_DRAW_UNKNOWN_REASON";
|
|
63
|
+
};
|
|
34
64
|
export declare const ERROR_CODES: {
|
|
35
65
|
readonly AUTH_INVALID_CREDENTIALS: "AUTH_001";
|
|
36
66
|
readonly AUTH_TOKEN_EXPIRED: "AUTH_002";
|
|
@@ -31,6 +31,36 @@ export const OFFER_ERROR_CODES = {
|
|
|
31
31
|
CHECKOUT_EXPIRED: "OFFER_CHECKOUT_EXPIRED",
|
|
32
32
|
WRONG_STATE: "OFFER_WRONG_STATE",
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Event prize-draw refusals — the spin wheel and the raffle draw.
|
|
36
|
+
*
|
|
37
|
+
* These exist because every refusal on those two surfaces used to render as the
|
|
38
|
+
* single string "Spin failed. Please try again.": the client threw a native
|
|
39
|
+
* `Error`, so `normalizeError` produced no code, so `toUserMessage` could only
|
|
40
|
+
* return its fallback. A closed window, an exhausted per-user cap and a
|
|
41
|
+
* misconfigured event were indistinguishable to the person spinning, and a
|
|
42
|
+
* 401 never opened the login modal.
|
|
43
|
+
*
|
|
44
|
+
* Statuses live beside the reasons in
|
|
45
|
+
* `_internal/server/jobs/core/event-draw-reasons.ts`; `audit-error-display-i18n`
|
|
46
|
+
* requires a matching `errors.codes.*` key in `messages/en.json` for every
|
|
47
|
+
* value below.
|
|
48
|
+
*/
|
|
49
|
+
export const EVENT_DRAW_ERROR_CODES = {
|
|
50
|
+
IDENTITY_REQUIRED: "EVENT_IDENTITY_REQUIRED",
|
|
51
|
+
LOGIN_REQUIRED: "EVENT_LOGIN_REQUIRED",
|
|
52
|
+
EVENT_NOT_FOUND: "EVENT_NOT_FOUND",
|
|
53
|
+
EVENT_NOT_ACTIVE: "EVENT_NOT_ACTIVE",
|
|
54
|
+
SPIN_NO_PRIZES: "SPIN_NO_PRIZES",
|
|
55
|
+
SPIN_OUTSIDE_WINDOW: "SPIN_OUTSIDE_WINDOW",
|
|
56
|
+
SPIN_ALREADY_USED: "SPIN_ALREADY_USED",
|
|
57
|
+
NOT_A_SPIN_WHEEL: "EVENT_NOT_A_SPIN_WHEEL",
|
|
58
|
+
RAFFLE_NOT_A_RAFFLE: "RAFFLE_NOT_A_RAFFLE",
|
|
59
|
+
RAFFLE_ALREADY_DRAWN: "RAFFLE_ALREADY_DRAWN",
|
|
60
|
+
RAFFLE_NO_ELIGIBLE_ENTRIES: "RAFFLE_NO_ELIGIBLE_ENTRIES",
|
|
61
|
+
/** A reason the status map has never heard of — a bug in the core, mapped 500. */
|
|
62
|
+
UNKNOWN_REASON: "EVENT_DRAW_UNKNOWN_REASON",
|
|
63
|
+
};
|
|
34
64
|
export const ERROR_CODES = {
|
|
35
65
|
// Authentication
|
|
36
66
|
AUTH_INVALID_CREDENTIALS: "AUTH_001",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { normalizeError } from "./normalize.js";
|
|
2
|
-
import { ERROR_CODES, BID_ERROR_CODES, OFFER_ERROR_CODES } from "./error-codes.js";
|
|
2
|
+
import { ERROR_CODES, BID_ERROR_CODES, OFFER_ERROR_CODES, EVENT_DRAW_ERROR_CODES, } from "./error-codes.js";
|
|
3
3
|
import { HTTP_ERROR_CODES } from "./error-mapping.js";
|
|
4
4
|
const k = (code) => `errors.codes.${code}`;
|
|
5
5
|
export const ERROR_DISPLAY_MAP = {
|
|
@@ -172,6 +172,45 @@ export const ERROR_DISPLAY_MAP = {
|
|
|
172
172
|
[OFFER_ERROR_CODES.WRONG_STATE]: {
|
|
173
173
|
messageKey: k(OFFER_ERROR_CODES.WRONG_STATE),
|
|
174
174
|
},
|
|
175
|
+
// ---------- Event prize draws (spin wheel + raffle) ----------
|
|
176
|
+
// No `field` on any of these: the spin wheel is a button, not a form, and the
|
|
177
|
+
// raffle draw is an admin action. There is no input to route an error onto.
|
|
178
|
+
[EVENT_DRAW_ERROR_CODES.IDENTITY_REQUIRED]: {
|
|
179
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.IDENTITY_REQUIRED),
|
|
180
|
+
},
|
|
181
|
+
[EVENT_DRAW_ERROR_CODES.LOGIN_REQUIRED]: {
|
|
182
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.LOGIN_REQUIRED),
|
|
183
|
+
},
|
|
184
|
+
[EVENT_DRAW_ERROR_CODES.EVENT_NOT_FOUND]: {
|
|
185
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.EVENT_NOT_FOUND),
|
|
186
|
+
},
|
|
187
|
+
[EVENT_DRAW_ERROR_CODES.EVENT_NOT_ACTIVE]: {
|
|
188
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.EVENT_NOT_ACTIVE),
|
|
189
|
+
},
|
|
190
|
+
[EVENT_DRAW_ERROR_CODES.SPIN_NO_PRIZES]: {
|
|
191
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.SPIN_NO_PRIZES),
|
|
192
|
+
},
|
|
193
|
+
[EVENT_DRAW_ERROR_CODES.SPIN_OUTSIDE_WINDOW]: {
|
|
194
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.SPIN_OUTSIDE_WINDOW),
|
|
195
|
+
},
|
|
196
|
+
[EVENT_DRAW_ERROR_CODES.SPIN_ALREADY_USED]: {
|
|
197
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.SPIN_ALREADY_USED),
|
|
198
|
+
},
|
|
199
|
+
[EVENT_DRAW_ERROR_CODES.NOT_A_SPIN_WHEEL]: {
|
|
200
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.NOT_A_SPIN_WHEEL),
|
|
201
|
+
},
|
|
202
|
+
[EVENT_DRAW_ERROR_CODES.RAFFLE_NOT_A_RAFFLE]: {
|
|
203
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.RAFFLE_NOT_A_RAFFLE),
|
|
204
|
+
},
|
|
205
|
+
[EVENT_DRAW_ERROR_CODES.RAFFLE_ALREADY_DRAWN]: {
|
|
206
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.RAFFLE_ALREADY_DRAWN),
|
|
207
|
+
},
|
|
208
|
+
[EVENT_DRAW_ERROR_CODES.RAFFLE_NO_ELIGIBLE_ENTRIES]: {
|
|
209
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.RAFFLE_NO_ELIGIBLE_ENTRIES),
|
|
210
|
+
},
|
|
211
|
+
[EVENT_DRAW_ERROR_CODES.UNKNOWN_REASON]: {
|
|
212
|
+
messageKey: k(EVENT_DRAW_ERROR_CODES.UNKNOWN_REASON),
|
|
213
|
+
},
|
|
175
214
|
// ---------- HTTP / mapped wire codes (from error-mapping.ts) ----------
|
|
176
215
|
[HTTP_ERROR_CODES.VALIDATION_FAILED]: {
|
|
177
216
|
messageKey: k(HTTP_ERROR_CODES.VALIDATION_FAILED),
|
|
@@ -1,6 +1,26 @@
|
|
|
1
|
-
export type PolicyKey = "privacy" | "terms" | "cookies" | "refund" | "ethics" | "conduct";
|
|
1
|
+
export type PolicyKey = "privacy" | "terms" | "cookies" | "refund" | "ethics" | "conduct" | "cancellation" | "grievance";
|
|
2
2
|
export interface PolicyPageViewProps {
|
|
3
3
|
/** Which policy to render */
|
|
4
4
|
policy: PolicyKey;
|
|
5
|
+
/**
|
|
6
|
+
* Rendered after the policy sections and before the related links.
|
|
7
|
+
*
|
|
8
|
+
* The slot exists for /grievance, whose officer block (name, designation,
|
|
9
|
+
* email, phone) comes from `appkit.config.js` → `business.grievance` rather
|
|
10
|
+
* than from i18n — those values are deployment-specific and some are still
|
|
11
|
+
* undecided, so they render through `<PendingValue>` as a visible
|
|
12
|
+
* `[to be confirmed]` marker.
|
|
13
|
+
*
|
|
14
|
+
* 🛑 Deliberately a `children` ReactNode and not a render prop: this is an
|
|
15
|
+
* async Server Component, and a function prop would have to cross the
|
|
16
|
+
* server/client boundary at the call site to be useful. The caller builds
|
|
17
|
+
* the node and passes it down, which needs nothing serialisable.
|
|
18
|
+
*
|
|
19
|
+
* Note it renders under the i18n sections but is SKIPPED when an admin HTML
|
|
20
|
+
* override is present — an override replaces the page's body, and silently
|
|
21
|
+
* appending a block the admin cannot see or edit would make the override a
|
|
22
|
+
* half-truth.
|
|
23
|
+
*/
|
|
24
|
+
children?: React.ReactNode;
|
|
5
25
|
}
|
|
6
|
-
export declare function PolicyPageView({ policy, }: PolicyPageViewProps): Promise<import("react").JSX.Element>;
|
|
26
|
+
export declare function PolicyPageView({ policy, children, }: PolicyPageViewProps): Promise<import("react").JSX.Element>;
|
|
@@ -58,9 +58,21 @@ const POLICY_META = {
|
|
|
58
58
|
firestoreField: "codeOfConduct",
|
|
59
59
|
relatedLabelKey: "relatedConduct",
|
|
60
60
|
},
|
|
61
|
+
cancellation: {
|
|
62
|
+
path: String(ROUTES.PUBLIC.CANCELLATION_POLICY),
|
|
63
|
+
namespace: "cancellationPolicy",
|
|
64
|
+
firestoreField: "cancellation",
|
|
65
|
+
relatedLabelKey: "relatedCancellation",
|
|
66
|
+
},
|
|
67
|
+
grievance: {
|
|
68
|
+
path: String(ROUTES.PUBLIC.GRIEVANCE),
|
|
69
|
+
namespace: "grievance",
|
|
70
|
+
firestoreField: "grievance",
|
|
71
|
+
relatedLabelKey: "relatedGrievance",
|
|
72
|
+
},
|
|
61
73
|
};
|
|
62
74
|
const POLICY_KEYS = Object.keys(POLICY_META);
|
|
63
|
-
export async function PolicyPageView({ policy, }) {
|
|
75
|
+
export async function PolicyPageView({ policy, children, }) {
|
|
64
76
|
const page = { container: PAGE_CONTAINER };
|
|
65
77
|
const meta = POLICY_META[policy];
|
|
66
78
|
const { getTranslations } = await import("next-intl/server");
|
|
@@ -93,5 +105,5 @@ export async function PolicyPageView({ policy, }) {
|
|
|
93
105
|
}));
|
|
94
106
|
return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "banner", children: _jsxs(Div, { className: `${page.container.sm}`, children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-3", children: t("title") }), _jsx(Text, { color: "inverse", variant: "none", className: "/80", size: "sm", children: t("lastUpdated") })] }) }), _jsxs(Div, { className: `${page.container.sm}`, padding: "content-banner", children: [adminHtml ? (
|
|
95
107
|
/* Admin-set HTML takes priority */
|
|
96
|
-
_jsx(Div, { className: "prose max-w-none", dangerouslySetInnerHTML: { __html: adminHtml } })) : (_jsxs(_Fragment, { children: [t.has("intro") && (_jsx(Text, { variant: "secondary", className: "mb-10 leading-relaxed", size: "base", children: t("intro") })), _jsx(Stack, { gap: "xl", children: sections.map((section, i) => (_jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-3", children: section.heading }), _jsx(Text, { variant: "secondary", className: "leading-relaxed whitespace-pre-line", children: section.body })] }, i))) })] })), relatedLinks.length > 0 && (_jsxs(Div, { className: `mt-14 border-t`, border: "default", padding: "t-xl", children: [_jsx(Heading, { level: 3, className: "mb-3 uppercase tracking-wide", color: "muted", size: "sm", weight: "semibold", children: t("relatedTitle") }), _jsx(Row, { wrap: true, gap: "md", children: relatedLinks.map((l) => (_jsx(TextLink, { href: l.href, variant: "muted", size: "sm", children: l.label }, l.href))) })] }))] })] }));
|
|
108
|
+
_jsx(Div, { className: "prose max-w-none", dangerouslySetInnerHTML: { __html: adminHtml } })) : (_jsxs(_Fragment, { children: [t.has("intro") && (_jsx(Text, { variant: "secondary", className: "mb-10 leading-relaxed", size: "base", children: t("intro") })), _jsx(Stack, { gap: "xl", children: sections.map((section, i) => (_jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-3", children: section.heading }), _jsx(Text, { variant: "secondary", className: "leading-relaxed whitespace-pre-line", children: section.body })] }, i))) }), children] })), relatedLinks.length > 0 && (_jsxs(Div, { className: `mt-14 border-t`, border: "default", padding: "t-xl", children: [_jsx(Heading, { level: 3, className: "mb-3 uppercase tracking-wide", color: "muted", size: "sm", weight: "semibold", children: t("relatedTitle") }), _jsx(Row, { wrap: true, gap: "md", children: relatedLinks.map((l) => (_jsx(TextLink, { href: l.href, variant: "muted", size: "sm", children: l.label }, l.href))) })] }))] })] }));
|
|
97
109
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import Link from "next/link.js";
|
|
3
|
+
import { productImageUrls } from "../../products/schemas/firestore.js";
|
|
3
4
|
import { getPublicUserProfile, getProfileStoreProducts, getReviewsAuthoredBy, getReviewsReceivedBy } from "../../auth/actions/profile-actions.js";
|
|
4
5
|
import { storeRepository } from "../../stores/repository/store.repository.js";
|
|
5
6
|
import { safeRead } from "../../../errors/safe-read.js";
|
|
@@ -37,7 +38,7 @@ function toProductItem(p) {
|
|
|
37
38
|
originalPrice: p.originalPrice,
|
|
38
39
|
currency: p.currency,
|
|
39
40
|
mainImage: p.mainImage,
|
|
40
|
-
images: p.images,
|
|
41
|
+
images: productImageUrls(p.images),
|
|
41
42
|
status: p.status,
|
|
42
43
|
condition: p.condition,
|
|
43
44
|
listingType: p.listingType,
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { normalizeError } from "../../../errors/normalize.js";
|
|
3
|
+
import { serverLogger } from "../../../monitoring/server-logger.js";
|
|
4
|
+
import { siteSettingsRepository } from "../../../repositories/index.js";
|
|
2
5
|
import { ROUTES } from "../../../constants/index.js";
|
|
3
6
|
import { PAGE_CONTAINER } from "../../../_internal/shared/styles/page.js";
|
|
4
7
|
import { Div, Heading, Text, Section, Stack, FlowDiagram } from "../../../ui/index.js";
|
|
@@ -8,6 +11,35 @@ export async function ShippingPolicyView({} = {}) {
|
|
|
8
11
|
const page = { container: PAGE_CONTAINER };
|
|
9
12
|
const { getTranslations } = await import("next-intl/server");
|
|
10
13
|
const t = await getTranslations("shippingPolicy");
|
|
14
|
+
/*
|
|
15
|
+
* 🛑 `siteSettings.legalPages.shipping` was WRITTEN by the admin form and
|
|
16
|
+
* read by nothing.
|
|
17
|
+
*
|
|
18
|
+
* Every other legal page renders through `PolicyPageView`, which checks that
|
|
19
|
+
* group for an admin HTML override. This page does not — it has a bespoke
|
|
20
|
+
* layout with a five-step delivery diagram that a flat `sections[]` cannot
|
|
21
|
+
* express — so the override had no reader and an admin who rewrote the
|
|
22
|
+
* shipping policy saw their text saved successfully and never appear.
|
|
23
|
+
*
|
|
24
|
+
* Reading it here rather than converting the page is the deliberate choice:
|
|
25
|
+
* converting would mean flattening 38 i18n keys into `sections[]` and losing
|
|
26
|
+
* the diagram, which is a regression dressed up as consolidation.
|
|
27
|
+
*/
|
|
28
|
+
let adminHtml = "";
|
|
29
|
+
try {
|
|
30
|
+
const settings = await siteSettingsRepository.getSingleton();
|
|
31
|
+
adminHtml = settings.legalPages?.shipping ?? "";
|
|
32
|
+
}
|
|
33
|
+
catch (_err) {
|
|
34
|
+
void normalizeError(_err);
|
|
35
|
+
// The i18n copy below is a complete policy in its own right, so a failed
|
|
36
|
+
// read degrades to it — but an admin who HAS overridden this page would
|
|
37
|
+
// silently see the old text, so the operator needs to know.
|
|
38
|
+
serverLogger.warn("about.shippingPolicyView: siteSettings.legalPages read failed", {
|
|
39
|
+
field: "shipping",
|
|
40
|
+
error: normalizeError(_err).message,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
11
43
|
const SECTIONS = [
|
|
12
44
|
{ title: t("orderProcessTitle"), text: t("orderProcessText") },
|
|
13
45
|
{ title: t("standardTitle"), text: t("standardText") },
|
|
@@ -55,5 +87,13 @@ export async function ShippingPolicyView({} = {}) {
|
|
|
55
87
|
desc: t("diagramStatus5Desc"),
|
|
56
88
|
},
|
|
57
89
|
];
|
|
58
|
-
return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "banner", children: _jsxs(Div, { className: `${page.container.sm}`, children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-3", children: t("title") }), _jsx(Text, { color: "inverse", variant: "none", className: "/80", children: t("lastUpdated") })] }) }), _jsxs(Div, { className: `${page.container.sm}`, padding: "content-banner", children: [
|
|
90
|
+
return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "banner", children: _jsxs(Div, { className: `${page.container.sm}`, children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-3", children: t("title") }), _jsx(Text, { color: "inverse", variant: "none", className: "/80", children: t("lastUpdated") })] }) }), _jsxs(Div, { className: `${page.container.sm}`, padding: "content-banner", children: [adminHtml ? (
|
|
91
|
+
/*
|
|
92
|
+
Admin-set HTML replaces the WHOLE body — subtitle, sections,
|
|
93
|
+
diagram and contact block — matching PolicyPageView's behaviour
|
|
94
|
+
exactly. Rendering the override above the bundled copy would show
|
|
95
|
+
two shipping policies on one page, and the reader has no way to
|
|
96
|
+
know which one binds.
|
|
97
|
+
*/
|
|
98
|
+
_jsx(Div, { className: "prose max-w-none", dangerouslySetInnerHTML: { __html: adminHtml } })) : (_jsxs(_Fragment, { children: [_jsx(Text, { size: "lg", variant: "secondary", className: "mb-8", children: t("subtitle") }), _jsx(FlowDiagram, { title: `🚚 ${t("diagramTitle")}`, titleClass: "text-sky-700 dark:text-sky-300", connectorClass: "bg-sky-200 dark:bg-sky-800", steps: DIAGRAM_STEPS, className: "mb-10", note: `📌 ${t("diagramNote")}` }), _jsxs(Stack, { gap: "xl", children: [SECTIONS.map(({ title, text }) => (_jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-3", children: title }), _jsx(Text, { variant: "secondary", className: "leading-relaxed", children: text })] }, title))), _jsxs(Section, { rounded: "xl", padding: "lg", border: "default", surface: "subtle", children: [_jsx(Heading, { level: 2, className: "mb-2", children: t("contactTitle") }), _jsx(Text, { variant: "secondary", children: t("contactText") })] })] })] })), _jsxs(Div, { layout: "flex", gap: "6", textSize: "sm", className: `mt-12 border-t`, border: "default", padding: "t-xl", children: [_jsx(TextLink, { href: String(ROUTES.PUBLIC.TRACK_ORDER), className: CLS_FOOTER_LINK, children: t("trackOrder") }), _jsx(TextLink, { href: String(ROUTES.PUBLIC.HELP), className: CLS_FOOTER_LINK, children: t("helpCenter") }), _jsx(TextLink, { href: String(ROUTES.PUBLIC.CONTACT), className: CLS_FOOTER_LINK, children: t("contactUs") }), _jsx(TextLink, { href: String(ROUTES.PUBLIC.REFUND_POLICY), className: CLS_FOOTER_LINK, children: "Refund Policy" })] })] })] }));
|
|
59
99
|
}
|
|
@@ -109,5 +109,5 @@ function renderNotificationListContent(props) {
|
|
|
109
109
|
return _jsx(Row, { align: "center", justify: "center", padding: "y-2xl", children: _jsx(Spinner, { size: "md" }) });
|
|
110
110
|
if (notifications.length === 0)
|
|
111
111
|
return (_jsxs(Stack, { justify: "center", className: "text-left", paddingY: "y-2xl", paddingX: "x-md", align: "start", children: [_jsx("svg", { className: "w-12 h-12 text-[var(--appkit-color-text-faint)] mb-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" }) }), _jsx(Text, { weight: "medium", color: "primary", children: labels.empty }), _jsx(Text, { size: "sm", className: "mt-1", color: "muted", children: labels.emptyDesc })] }));
|
|
112
|
-
return (_jsx(Ul, { children: notifications.map((notification) => (_jsxs(Li, { layout: "flex-start", gap: "3", padding: "inline", className: `group border-b border-[var(--appkit-color-border)] last:border-0 transition-colors hover:bg-[var(--appkit-color-bg)] dark:hover:bg-[var(--appkit-color-surface-elevated)] ${!notification.isRead ? "bg-primary/5 dark:bg-primary/10" : ""}`, children: [_jsx(Span, { size: "xl", className: "flex-shrink-0 mt-0.5", children: notificationIcons[notification.type] ?? "🔔" }), _jsxs(Div, { className: "flex-1 min-w-0", children: [_jsxs(Row, { align: "start", justify: "between", gap: "xs", children: [_jsxs(Text, { size: "sm", className: "leading-tight", color: "primary", weight: "medium", children: [notification.title, !notification.isRead && _jsx(Span, { className: "ml-1.5 inline-block w-2 h-2 bg-primary flex-shrink-0 align-middle", rounded: "full" })] }), _jsx(Span, { size: "xs", className: "flex-shrink-0", color: "muted", children: formatRelativeTime(notification.createdAt) })] }), _jsx(Text, { size: "sm", className: `mt-0.5`, truncate: 2, color: "muted", children: notification.message }), _jsxs(Row, { gap: "3", className: "mt-1.5", children: [notification.actionUrl && renderActionLink({ href: notification.actionUrl, onClick: () => { void handleMarkReadAndClose(notification); }, className: "text-[length:var(--appkit-text-xs)] text-primary hover:underline font-medium", children: notification.actionLabel ?? labels.viewAction }), !notification.isRead && _jsx(Button, { variant: "ghost", onClick: () => void handleMarkRead(notification.id), className: "text-[length:var(--appkit-text-xs)] text-[var(--appkit-color-text-muted)] hover:text-
|
|
112
|
+
return (_jsx(Ul, { children: notifications.map((notification) => (_jsxs(Li, { layout: "flex-start", gap: "3", padding: "inline", className: `group border-b border-[var(--appkit-color-border)] last:border-0 transition-colors hover:bg-[var(--appkit-color-bg)] dark:hover:bg-[var(--appkit-color-surface-elevated)] ${!notification.isRead ? "bg-primary/5 dark:bg-primary/10" : ""}`, children: [_jsx(Span, { size: "xl", className: "flex-shrink-0 mt-0.5", children: notificationIcons[notification.type] ?? "🔔" }), _jsxs(Div, { className: "flex-1 min-w-0", children: [_jsxs(Row, { align: "start", justify: "between", gap: "xs", children: [_jsxs(Text, { size: "sm", className: "leading-tight", color: "primary", weight: "medium", children: [notification.title, !notification.isRead && _jsx(Span, { className: "ml-1.5 inline-block w-2 h-2 bg-primary flex-shrink-0 align-middle", rounded: "full" })] }), _jsx(Span, { size: "xs", className: "flex-shrink-0", color: "muted", children: formatRelativeTime(notification.createdAt) })] }), _jsx(Text, { size: "sm", className: `mt-0.5`, truncate: 2, color: "muted", children: notification.message }), _jsxs(Row, { gap: "3", className: "mt-1.5", children: [notification.actionUrl && renderActionLink({ href: notification.actionUrl, onClick: () => { void handleMarkReadAndClose(notification); }, className: "text-[length:var(--appkit-text-xs)] text-primary hover:underline font-medium", children: notification.actionLabel ?? labels.viewAction }), !notification.isRead && _jsx(Button, { variant: "ghost", onClick: () => void handleMarkRead(notification.id), className: "text-[length:var(--appkit-text-xs)] text-[var(--appkit-color-text-muted)] hover:text-[var(--appkit-color-text)] hover:underline p-[var(--appkit-space-0)] h-auto", children: labels.markRead })] })] })] }, notification.id))) }));
|
|
113
113
|
}
|
|
@@ -44,7 +44,7 @@ export function UserBidsView() {
|
|
|
44
44
|
endpoint: ACCOUNT_ENDPOINTS.BIDS,
|
|
45
45
|
sortOptions: SORT_OPTIONS,
|
|
46
46
|
hideTableView: true,
|
|
47
|
-
mapRows: (response) => response.
|
|
47
|
+
mapRows: (response) => response.items ?? [],
|
|
48
48
|
getTotal: (response, rows) => response.total ?? rows.length,
|
|
49
49
|
buildFilters: (state) => (state.status ? sieveFilter("status", SIEVE_OP.EQ, state.status) : undefined),
|
|
50
50
|
renderFilterPanel: ({ pendingFilters, setPendingFilters }) => (_jsx(FieldSelect, { name: "status", label: "Bid status", value: pendingFilters.status || "", onChange: (v) => setPendingFilters((p) => ({ ...p, status: v })), options: STATUS_OPTIONS })),
|
|
@@ -14,17 +14,11 @@ export { UserAccountHubView } from "./UserAccountHubView";
|
|
|
14
14
|
export type { UserAccountHubViewProps, UserAccountHubViewLabels, } from "./UserAccountHubView";
|
|
15
15
|
export { ProfileView } from "./ProfileView";
|
|
16
16
|
export type { ProfileViewProps, ProfileViewLabels } from "./ProfileView";
|
|
17
|
-
export { UserSettingsView } from "./UserSettingsView";
|
|
18
|
-
export type { UserSettingsViewProps, UserSettingsViewLabels, } from "./UserSettingsView";
|
|
19
17
|
export { UserOrdersView } from "./UserOrdersView";
|
|
20
18
|
export type { UserOrdersViewProps } from "./UserOrdersView";
|
|
21
19
|
export { UserBidsView } from "./UserBidsView";
|
|
22
20
|
export { OrderDetailView } from "./OrderDetailView";
|
|
23
21
|
export type { OrderDetailViewProps, OrderDetailViewLabels, } from "./OrderDetailView";
|
|
24
|
-
export { UserAddressesView } from "./UserAddressesView";
|
|
25
|
-
export type { UserAddressesViewProps, UserAddressesViewLabels, } from "./UserAddressesView";
|
|
26
|
-
export { UserNotificationsView } from "./UserNotificationsView";
|
|
27
|
-
export type { UserNotificationsViewProps, UserNotificationsViewLabels, } from "./UserNotificationsView";
|
|
28
22
|
export { UserOffersPanel } from "./UserOffersPanel";
|
|
29
23
|
export type { UserOffersPanelProps } from "./UserOffersPanel";
|
|
30
24
|
export { BecomeSellerView } from "./BecomeSellerView";
|
|
@@ -33,7 +27,5 @@ export { UserOrderTrackView } from "./UserOrderTrackView";
|
|
|
33
27
|
export type { UserOrderTrackViewProps, UserOrderTrackViewLabels, } from "./UserOrderTrackView";
|
|
34
28
|
export { UserReturnsView } from "./UserReturnsView";
|
|
35
29
|
export type { UserReturnsViewProps } from "./UserReturnsView";
|
|
36
|
-
export { UserSupportView } from "./UserSupportView";
|
|
37
|
-
export type { UserSupportViewProps } from "./UserSupportView";
|
|
38
30
|
export { NotificationPreferencesPanel } from "./NotificationPreferencesPanel";
|
|
39
31
|
export type { NotificationPreferencesPanelProps } from "./NotificationPreferencesPanel";
|
|
@@ -6,15 +6,11 @@ export { NotificationBell } from "./NotificationBell.js";
|
|
|
6
6
|
export { AddressInlineSelect } from "./AddressInlineSelect.js";
|
|
7
7
|
export { UserAccountHubView } from "./UserAccountHubView.js";
|
|
8
8
|
export { ProfileView } from "./ProfileView.js";
|
|
9
|
-
export { UserSettingsView } from "./UserSettingsView.js";
|
|
10
9
|
export { UserOrdersView } from "./UserOrdersView.js";
|
|
11
10
|
export { UserBidsView } from "./UserBidsView.js";
|
|
12
11
|
export { OrderDetailView } from "./OrderDetailView.js";
|
|
13
|
-
export { UserAddressesView } from "./UserAddressesView.js";
|
|
14
|
-
export { UserNotificationsView } from "./UserNotificationsView.js";
|
|
15
12
|
export { UserOffersPanel } from "./UserOffersPanel.js";
|
|
16
13
|
export { BecomeSellerView } from "./BecomeSellerView.js";
|
|
17
14
|
export { UserOrderTrackView } from "./UserOrderTrackView.js";
|
|
18
15
|
export { UserReturnsView } from "./UserReturnsView.js";
|
|
19
|
-
export { UserSupportView } from "./UserSupportView.js";
|
|
20
16
|
export { NotificationPreferencesPanel } from "./NotificationPreferencesPanel.js";
|
|
@@ -4,7 +4,11 @@ import { ACCOUNT_ENDPOINTS } from "../../../constants/api-endpoints.js";
|
|
|
4
4
|
export function useProfileStats(enabled) {
|
|
5
5
|
const { data: ordersData, isLoading: ordersLoading } = useQuery({
|
|
6
6
|
queryKey: ["user-orders-count"],
|
|
7
|
-
queryFn: () =>
|
|
7
|
+
queryFn: () =>
|
|
8
|
+
// `items`, not `orders` — GET /api/user/orders emits the shared list
|
|
9
|
+
// envelope. Only `total` is read below, so the wrong key never threw
|
|
10
|
+
// here; it was a false declaration waiting for someone to read it.
|
|
11
|
+
apiClient.get(ACCOUNT_ENDPOINTS.ORDERS),
|
|
8
12
|
enabled,
|
|
9
13
|
});
|
|
10
14
|
const { data: addressesData, isLoading: addressesLoading } = useQuery({
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { JsonValue } from "../../../schemas/types";
|
|
2
|
+
import { BaseRepository } from "../../../providers/db-firebase";
|
|
3
|
+
import { type AddressBanStatus, type AddressCreateInput, type AddressDocument, type AddressPlain, type AddressOwnerType, type AddressUpdateInput } from "../schemas";
|
|
3
4
|
export declare class AddressesRepository extends BaseRepository<AddressDocument> {
|
|
4
5
|
constructor();
|
|
5
|
-
private decryptAddress;
|
|
6
6
|
/**
|
|
7
7
|
* Declared, not hand-rolled.
|
|
8
8
|
*
|
|
@@ -15,9 +15,36 @@ export declare class AddressesRepository extends BaseRepository<AddressDocument>
|
|
|
15
15
|
* call.
|
|
16
16
|
*/
|
|
17
17
|
protected piiFields: readonly ["fullName", "phone", "addressLine1", "addressLine2"];
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Admin search by name, without decryption. ONLY `fullName` — never
|
|
20
|
+
* `addressLine1`: "find everyone on Brigade Road" is not a capability
|
|
21
|
+
* admin needs and is the single most re-identifying field on the
|
|
22
|
+
* document. See `security/blind-index-tokens.ts` for why this is
|
|
23
|
+
* whole-word rather than a prefix-expanded index.
|
|
24
|
+
*
|
|
25
|
+
* Runs through `applyWriteHooks`, so it reaches every write path
|
|
26
|
+
* including a seed load — which is what makes it survive the tester
|
|
27
|
+
* harness's cascade on `addresses` (it references `ownerId`, a
|
|
28
|
+
* PRESERVE-tier user, so the row itself is never actually wiped — but
|
|
29
|
+
* the field regenerating on every write is what makes that true by
|
|
30
|
+
* construction rather than by luck).
|
|
31
|
+
*/
|
|
32
|
+
protected buildTokensIndexFor(data: Record<string, JsonValue>): Record<string, string[]> | null;
|
|
33
|
+
/** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
|
|
34
|
+
revealAddress(doc: AddressDocument): AddressPlain;
|
|
35
|
+
/** As `revealAddress`, for a list read. */
|
|
36
|
+
revealAddresss(docs: readonly AddressDocument[]): AddressPlain[];
|
|
37
|
+
/**
|
|
38
|
+
* Masked PII — **the default for any surface that only needs to identify a
|
|
39
|
+
* row to a human.** Decrypts first, then masks: the mask helpers refuse
|
|
40
|
+
* ciphertext by design, so passing a stored field straight in would return
|
|
41
|
+
* "Anonymous" for every row.
|
|
42
|
+
*/
|
|
43
|
+
maskedAddress(doc: AddressDocument): AddressPlain;
|
|
44
|
+
/** As `maskedAddress`, for a list read. */
|
|
45
|
+
maskedAddresss(docs: readonly AddressDocument[]): AddressPlain[];
|
|
46
|
+
createWithId(id: string, data: Partial<AddressPlain>): Promise<AddressDocument>;
|
|
47
|
+
update(id: string, data: Partial<AddressPlain>): Promise<AddressDocument>;
|
|
21
48
|
listByOwner(ownerType: AddressOwnerType, ownerId: string): Promise<AddressDocument[]>;
|
|
22
49
|
/**
|
|
23
50
|
* 🛑 Requires the composite index `(ownerType ASC, createdAt DESC)`.
|
|
@@ -13,7 +13,8 @@ import { normalizeError } from "../../../errors/normalize.js";
|
|
|
13
13
|
import { DatabaseError } from "../../../errors/index.js";
|
|
14
14
|
import { serverLogger } from "../../../monitoring/index.js";
|
|
15
15
|
import { BaseRepository, getFirestoreCount, prepareForFirestore, } from "../../../providers/db-firebase/index.js";
|
|
16
|
-
import {
|
|
16
|
+
import { maskPii, revealPii, ADDRESS_PII_FIELDS, } from "../../../security/index.js";
|
|
17
|
+
import { buildTokensIndex } from "../../../security/blind-index-tokens.js";
|
|
17
18
|
import { ADDRESS_FIELDS, ADDRESSES_COLLECTION, } from "../schemas/index.js";
|
|
18
19
|
export class AddressesRepository extends BaseRepository {
|
|
19
20
|
constructor() {
|
|
@@ -31,17 +32,73 @@ export class AddressesRepository extends BaseRepository {
|
|
|
31
32
|
*/
|
|
32
33
|
this.piiFields = ADDRESS_PII_FIELDS;
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Admin search by name, without decryption. ONLY `fullName` — never
|
|
37
|
+
* `addressLine1`: "find everyone on Brigade Road" is not a capability
|
|
38
|
+
* admin needs and is the single most re-identifying field on the
|
|
39
|
+
* document. See `security/blind-index-tokens.ts` for why this is
|
|
40
|
+
* whole-word rather than a prefix-expanded index.
|
|
41
|
+
*
|
|
42
|
+
* Runs through `applyWriteHooks`, so it reaches every write path
|
|
43
|
+
* including a seed load — which is what makes it survive the tester
|
|
44
|
+
* harness's cascade on `addresses` (it references `ownerId`, a
|
|
45
|
+
* PRESERVE-tier user, so the row itself is never actually wiped — but
|
|
46
|
+
* the field regenerating on every write is what makes that true by
|
|
47
|
+
* construction rather than by luck).
|
|
48
|
+
*/
|
|
49
|
+
buildTokensIndexFor(data) {
|
|
50
|
+
const fullName = typeof data.fullName === "string" ? data.fullName : undefined;
|
|
51
|
+
if (!fullName)
|
|
52
|
+
return null;
|
|
53
|
+
return { nameTokensIndex: buildTokensIndex(fullName) };
|
|
54
|
+
}
|
|
55
|
+
/*
|
|
56
|
+
* 🛑 `mapDoc` is NOT overridden, and that absence IS the change.
|
|
57
|
+
*
|
|
58
|
+
* It used to decrypt on every read, so ciphertext never left the database
|
|
59
|
+
* and every caller handled plaintext without ever saying so. Following
|
|
60
|
+
* `SiteSettingsRepository`: reads return what Firestore holds, and plaintext
|
|
61
|
+
* requires one of the two named methods below.
|
|
62
|
+
*
|
|
63
|
+
* A convention would not hold this. `AddressDocument`'s PII fields are
|
|
64
|
+
* `Encrypted<string>`, assignable to nothing that wants a plain `string`, so
|
|
65
|
+
* a reader that skips both accessors is a compile error naming file and line.
|
|
66
|
+
*/
|
|
67
|
+
/** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
|
|
68
|
+
revealAddress(doc) {
|
|
69
|
+
return revealPii(doc, ADDRESS_PII_FIELDS);
|
|
70
|
+
}
|
|
71
|
+
/** As `revealAddress`, for a list read. */
|
|
72
|
+
revealAddresss(docs) {
|
|
73
|
+
return docs.map((d) => this.revealAddress(d));
|
|
36
74
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Masked PII — **the default for any surface that only needs to identify a
|
|
77
|
+
* row to a human.** Decrypts first, then masks: the mask helpers refuse
|
|
78
|
+
* ciphertext by design, so passing a stored field straight in would return
|
|
79
|
+
* "Anonymous" for every row.
|
|
80
|
+
*/
|
|
81
|
+
maskedAddress(doc) {
|
|
82
|
+
return maskPii(doc, ADDRESS_PII_FIELDS);
|
|
40
83
|
}
|
|
84
|
+
/** As `maskedAddress`, for a list read. */
|
|
85
|
+
maskedAddresss(docs) {
|
|
86
|
+
return docs.map((d) => this.maskedAddress(d));
|
|
87
|
+
}
|
|
88
|
+
/*
|
|
89
|
+
* Takes PLAINTEXT, like the base it overrides — this method is what
|
|
90
|
+
* encrypts (`applyWriteHooks`), so demanding ciphertext from callers
|
|
91
|
+
* inverted its own contract.
|
|
92
|
+
*/
|
|
41
93
|
async createWithId(id, data) {
|
|
42
94
|
const encrypted = this.applyWriteHooks(data);
|
|
43
95
|
return super.createWithId(id, encrypted);
|
|
44
96
|
}
|
|
97
|
+
/*
|
|
98
|
+
* Takes PLAINTEXT, like the base it overrides — this method is the thing
|
|
99
|
+
* that encrypts (`applyWriteHooks`), so demanding ciphertext from callers
|
|
100
|
+
* inverted its own contract.
|
|
101
|
+
*/
|
|
45
102
|
async update(id, data) {
|
|
46
103
|
const encrypted = this.applyWriteHooks(data);
|
|
47
104
|
return super.update(id, encrypted);
|
|
@@ -105,6 +162,7 @@ export class AddressesRepository extends BaseRepository {
|
|
|
105
162
|
}
|
|
106
163
|
const now = new Date();
|
|
107
164
|
const docRef = this.getCollection().doc();
|
|
165
|
+
// Plain in, ciphertext out — the write hook encrypts below.
|
|
108
166
|
const addressData = {
|
|
109
167
|
...input,
|
|
110
168
|
ownerType,
|
|
@@ -166,9 +224,27 @@ export class AddressesRepository extends BaseRepository {
|
|
|
166
224
|
}
|
|
167
225
|
const updateData = { ...input };
|
|
168
226
|
if (input.postalCode || input.addressLine1 || input.addressLine2 !== undefined) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
227
|
+
/*
|
|
228
|
+
* 🛑 Revealed, because the hash is a BLIND INDEX over plaintext.
|
|
229
|
+
*
|
|
230
|
+
* `existing` comes from a find, which no longer decrypts, and these three
|
|
231
|
+
* fall back to it when the caller did not supply them. Hashing ciphertext
|
|
232
|
+
* would compute a hash nothing else can reproduce — so every address
|
|
233
|
+
* edited after this change would stop matching its own duplicates, with
|
|
234
|
+
* no error and nothing to notice. The brand is what made the fallback
|
|
235
|
+
* visible; `.postalCode` is not PII and needs no reveal.
|
|
236
|
+
*/
|
|
237
|
+
const current = this.revealAddress(existing);
|
|
238
|
+
const postalCode = input.postalCode ?? current.postalCode;
|
|
239
|
+
const line1 = input.addressLine1 ?? current.addressLine1;
|
|
240
|
+
const line2 = input.addressLine2 ?? current.addressLine2;
|
|
241
|
+
/*
|
|
242
|
+
* The hash is computed from PLAINTEXT, which is the whole point of a
|
|
243
|
+
* blind index — and `existing` now holds ciphertext, so the three values
|
|
244
|
+
* feeding it come from the revealed copy above. Casting to the document
|
|
245
|
+
* shape here would have hashed ciphertext and silently broken
|
|
246
|
+
* duplicate-detection for every address edited after this change.
|
|
247
|
+
*/
|
|
172
248
|
updateData.addressHash = this.computeAddressHash(postalCode, line1, line2);
|
|
173
249
|
}
|
|
174
250
|
return this.update(addressId, updateData);
|
|
@@ -298,6 +374,7 @@ export class AddressesRepository extends BaseRepository {
|
|
|
298
374
|
}
|
|
299
375
|
}
|
|
300
376
|
async banById(id, banData) {
|
|
377
|
+
// Plain write payload — see `update`'s own note.
|
|
301
378
|
return this.update(id, {
|
|
302
379
|
banStatus: "banned",
|
|
303
380
|
banReason: banData.banReason,
|
|
@@ -8,16 +8,27 @@
|
|
|
8
8
|
* repository overrides `createWithId` and `create` to inject encryption.
|
|
9
9
|
*/
|
|
10
10
|
import type { BaseDocument } from "../../../_internal/shared/types/base-document";
|
|
11
|
+
import type { Encrypted, Plaintext } from "../../../security/encrypted";
|
|
11
12
|
export type AddressOwnerType = "user" | "store";
|
|
12
13
|
export type AddressBanStatus = "banned" | "unban_requested" | "suspicious";
|
|
14
|
+
/**
|
|
15
|
+
* `AddressDocument` with its PII as plain `string` — what the named repository
|
|
16
|
+
* accessors return, and what a WRITE path accepts (the repository encrypts).
|
|
17
|
+
*
|
|
18
|
+
* `Plaintext<T>` is the one definition of this shape; see `security/encrypted.ts`.
|
|
19
|
+
* It is deliberately NOT distinguishable from a MASKED value — `maskPii`
|
|
20
|
+
* returns plain strings too, and no type can express "these characters are
|
|
21
|
+
* asterisks". The distinction is which named method you called.
|
|
22
|
+
*/
|
|
23
|
+
export type AddressPlain = Plaintext<AddressDocument>;
|
|
13
24
|
export interface AddressDocument extends BaseDocument {
|
|
14
25
|
ownerType: AddressOwnerType;
|
|
15
26
|
ownerId: string;
|
|
16
27
|
label: string;
|
|
17
|
-
fullName: string
|
|
18
|
-
phone: string
|
|
19
|
-
addressLine1: string
|
|
20
|
-
addressLine2?: string
|
|
28
|
+
fullName: Encrypted<string>;
|
|
29
|
+
phone: Encrypted<string>;
|
|
30
|
+
addressLine1: Encrypted<string>;
|
|
31
|
+
addressLine2?: Encrypted<string>;
|
|
21
32
|
landmark?: string;
|
|
22
33
|
city: string;
|
|
23
34
|
state: string;
|
|
@@ -40,8 +51,8 @@ export declare const ADDRESS_INDEXED_FIELDS: readonly ["ownerType", "ownerId", "
|
|
|
40
51
|
export declare const DEFAULT_ADDRESS_DATA: Partial<AddressDocument>;
|
|
41
52
|
export declare const ADDRESS_PUBLIC_FIELDS: readonly ["id", "ownerType", "ownerId", "label", "fullName", "phone", "addressLine1", "addressLine2", "landmark", "city", "state", "postalCode", "country", "isDefault", "addressHash", "banStatus", "banReason", "bannedAt", "autoBanned", "unbanRequestNote", "unbanRequestedAt", "createdAt", "updatedAt"];
|
|
42
53
|
export declare const ADDRESS_UPDATABLE_FIELDS: readonly ["label", "fullName", "phone", "addressLine1", "addressLine2", "landmark", "city", "state", "postalCode", "country", "isDefault", "banStatus", "banReason", "bannedBy", "bannedAt", "autoBanned", "unbanRequestNote", "unbanRequestedAt"];
|
|
43
|
-
export type AddressCreateInput = Omit<
|
|
44
|
-
export type AddressUpdateInput = Partial<Pick<
|
|
54
|
+
export type AddressCreateInput = Omit<AddressPlain, "id" | "ownerType" | "ownerId" | "createdAt" | "updatedAt">;
|
|
55
|
+
export type AddressUpdateInput = Partial<Pick<AddressPlain, (typeof ADDRESS_UPDATABLE_FIELDS)[number]>>;
|
|
45
56
|
export declare const ADDRESS_FIELDS: {
|
|
46
57
|
readonly ID: "id";
|
|
47
58
|
readonly OWNER_TYPE: "ownerType";
|
|
@@ -238,7 +238,22 @@ export async function adminUpdateProduct(adminId, id, input) {
|
|
|
238
238
|
finalized.mainImage = await finalizeStagedMediaUrl(finalized.mainImage);
|
|
239
239
|
}
|
|
240
240
|
if (Array.isArray(finalized.images) && finalized.images.length > 0) {
|
|
241
|
-
|
|
241
|
+
/*
|
|
242
|
+
* 🛑 Finalise the URL and KEEP THE REST OF THE OBJECT (A6).
|
|
243
|
+
*
|
|
244
|
+
* `finalizeStagedMediaArray` takes and returns `string[]` — it moves
|
|
245
|
+
* staged uploads to their permanent path. Handing it
|
|
246
|
+
* `images.map(i => i.url)` and assigning the result back would have
|
|
247
|
+
* silently dropped `alt`, `width`, `height` and `thumbnailUrl` on every
|
|
248
|
+
* admin save: the exact lossy-write failure `toProductImages` carries its
|
|
249
|
+
* own warning about, on the one code path where a human has just typed
|
|
250
|
+
* the alt text.
|
|
251
|
+
*/
|
|
252
|
+
const finalisedUrls = await finalizeStagedMediaArray(finalized.images.map((img) => img.url));
|
|
253
|
+
finalized.images = finalized.images.map((img, i) => ({
|
|
254
|
+
...img,
|
|
255
|
+
url: finalisedUrls[i] ?? img.url,
|
|
256
|
+
}));
|
|
242
257
|
}
|
|
243
258
|
if (finalized.video?.url) {
|
|
244
259
|
finalized.video = {
|