@mohasinac/appkit 4.52.5 → 4.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +4 -4
- package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
- package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
- package/dist/_internal/client/scaffolds/AppShell.js +1 -1
- package/dist/_internal/server/features/auctions/actions.js +1 -1
- package/dist/_internal/server/features/auctions/og.d.ts +3 -1
- package/dist/_internal/server/features/auctions/og.js +3 -1
- package/dist/_internal/server/features/bundles/actions.js +1 -1
- package/dist/_internal/server/features/business-documents/download.d.ts +41 -0
- package/dist/_internal/server/features/business-documents/download.js +91 -0
- package/dist/_internal/server/features/categories/adapters.d.ts +1 -1
- package/dist/_internal/server/features/categories/adapters.js +10 -0
- package/dist/_internal/server/features/categories/data.js +23 -7
- package/dist/_internal/server/features/checkout/actions.d.ts +14 -0
- package/dist/_internal/server/features/checkout/actions.js +116 -15
- package/dist/_internal/server/features/checkout/bundle-expansion.js +17 -0
- package/dist/_internal/server/features/checkout/data.d.ts +37 -0
- package/dist/_internal/server/features/checkout/data.js +20 -3
- package/dist/_internal/server/features/checkout/group-rule-revalidation.d.ts +34 -0
- package/dist/_internal/server/features/checkout/group-rule-revalidation.js +124 -0
- package/dist/_internal/server/features/checkout/supplier-identity.d.ts +55 -0
- package/dist/_internal/server/features/checkout/supplier-identity.js +81 -0
- package/dist/_internal/server/features/classified/metadata.js +1 -1
- package/dist/_internal/server/features/classified/og.d.ts +3 -1
- package/dist/_internal/server/features/classified/og.js +3 -1
- package/dist/_internal/server/features/digital-code/metadata.js +1 -1
- package/dist/_internal/server/features/digital-code/og.d.ts +3 -1
- package/dist/_internal/server/features/digital-code/og.js +3 -1
- package/dist/_internal/server/features/digital-code/pool.d.ts +19 -4
- package/dist/_internal/server/features/digital-code/pool.js +19 -4
- package/dist/_internal/server/features/live/metadata.js +1 -1
- package/dist/_internal/server/features/live/og.d.ts +3 -1
- package/dist/_internal/server/features/live/og.js +3 -1
- package/dist/_internal/server/features/lottery/actions.js +9 -1
- package/dist/_internal/server/features/lottery/og.d.ts +40 -0
- package/dist/_internal/server/features/lottery/og.js +79 -0
- package/dist/_internal/server/features/messages/actions.js +5 -1
- package/dist/_internal/server/features/offers/adapters.js +17 -3
- package/dist/_internal/server/features/orders/actions.js +7 -2
- package/dist/_internal/server/features/parts/og.js +1 -1
- package/dist/_internal/server/features/pre-orders/og.d.ts +3 -1
- package/dist/_internal/server/features/pre-orders/og.js +3 -1
- package/dist/_internal/server/features/price-index/search.d.ts +18 -0
- package/dist/_internal/server/features/price-index/search.js +47 -7
- package/dist/_internal/server/features/prize-draws/og.d.ts +3 -1
- package/dist/_internal/server/features/prize-draws/og.js +3 -1
- package/dist/_internal/server/features/products/group-members.d.ts +26 -0
- package/dist/_internal/server/features/products/group-members.js +7 -1
- package/dist/_internal/server/features/products/og.d.ts +3 -1
- package/dist/_internal/server/features/products/og.js +3 -1
- package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
- package/dist/_internal/server/features/raffle/actions.js +25 -0
- package/dist/_internal/server/features/reviews/actions.js +1 -1
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
- package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
- package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
- package/dist/_internal/server/features/search/index-build/build.js +285 -0
- package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
- package/dist/_internal/server/features/search/index-build/sources.js +385 -0
- package/dist/_internal/server/features/search/scoped-sources.d.ts +26 -0
- package/dist/_internal/server/features/search/scoped-sources.js +252 -0
- package/dist/_internal/server/features/search/search-everything.d.ts +57 -0
- package/dist/_internal/server/features/search/search-everything.js +70 -20
- package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
- package/dist/_internal/server/features/search/search-sources.js +142 -7
- package/dist/_internal/server/features/seo/robots.js +21 -1
- package/dist/_internal/server/features/seo/sitemap.js +7 -1
- package/dist/_internal/server/features/shared/listing-adapters.js +4 -2
- package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
- package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
- package/dist/_internal/server/features/site-settings/adapters.js +26 -0
- package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
- package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
- package/dist/_internal/server/features/sticker-trace/adapters.d.ts +91 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +175 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
- package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
- package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
- package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
- package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +264 -0
- package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
- package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
- package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
- package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +143 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +311 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +154 -0
- package/dist/_internal/server/features/sticker-trace/storage.js +301 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
- package/dist/_internal/server/features/stores/adapters.js +16 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +25 -0
- package/dist/_internal/server/features/stores/tabs.js +122 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +25 -1
- package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
- package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
- package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
- package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
- package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
- package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
- package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
- package/dist/_internal/server/jobs/core/promotions.js +7 -4
- package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
- package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +1 -0
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
- package/dist/_internal/shared/actions/action-registry.js +29 -0
- package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
- package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
- package/dist/_internal/shared/checkout/rules/_defaults.js +0 -2
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +14 -1
- package/dist/_internal/shared/checkout/rules/_limits.js +14 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +2 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.js +9 -1
- package/dist/_internal/shared/checkout/rules/bundle.rule.js +13 -0
- package/dist/_internal/shared/checkout/rules/index.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/index.js +9 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.js +0 -1
- package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +26 -0
- package/dist/_internal/shared/checkout/rules/payment-gate.js +133 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +29 -8
- package/dist/_internal/shared/checkout/rules/spares.rule.d.ts +16 -0
- package/dist/_internal/shared/checkout/rules/spares.rule.js +5 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +26 -2
- package/dist/_internal/shared/config/schema.d.ts +122 -0
- package/dist/_internal/shared/features/cart/schema.js +3 -2
- package/dist/_internal/shared/features/events/config.d.ts +14 -0
- package/dist/_internal/shared/features/events/config.js +14 -0
- package/dist/_internal/shared/features/notifications/action-url.js +8 -0
- package/dist/_internal/shared/features/products/group-rules.d.ts +75 -0
- package/dist/_internal/shared/features/products/group-rules.js +142 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
- package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
- package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
- package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
- package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
- package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
- package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
- package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +35 -0
- package/dist/_internal/shared/listing-types/_registry.js +39 -1
- package/dist/_internal/shared/listing-types/art/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/art/config.js +3 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/auction/config.js +3 -0
- package/dist/_internal/shared/listing-types/availability.js +48 -0
- package/dist/_internal/shared/listing-types/capabilities.js +19 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/classified/config.js +3 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +3 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +10 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/live/config.js +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +3 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +3 -0
- package/dist/_internal/shared/listing-types/spares/config.d.ts +74 -0
- package/dist/_internal/shared/listing-types/spares/config.js +60 -0
- package/dist/_internal/shared/listing-types/spares/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/ctas.js +4 -0
- package/dist/_internal/shared/listing-types/spares/og.js +1 -0
- package/dist/_internal/shared/listing-types/spares/schema.d.ts +2 -0
- package/dist/_internal/shared/listing-types/spares/schema.js +3 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/standard/config.js +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +3 -0
- package/dist/_internal/shared/media/limits.d.ts +12 -2
- package/dist/_internal/shared/media/limits.js +12 -2
- package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
- package/dist/_internal/shared/search/artifact-url.js +119 -0
- package/dist/_internal/shared/search/index-record.d.ts +68 -0
- package/dist/_internal/shared/search/index-record.js +96 -0
- package/dist/_internal/shared/search/match.d.ts +76 -0
- package/dist/_internal/shared/search/match.js +264 -0
- package/dist/_internal/shared/search/to-groups.d.ts +52 -0
- package/dist/_internal/shared/search/to-groups.js +141 -0
- package/dist/client.d.ts +16 -9
- package/dist/client.js +16 -6
- package/dist/configs/eslint.js +22 -2
- package/dist/constants/api-endpoints.d.ts +107 -15
- package/dist/constants/api-endpoints.js +60 -5
- package/dist/constants/cache-invalidation.js +3 -1
- package/dist/constants/field-names.d.ts +13 -1
- package/dist/constants/field-names.js +42 -1
- package/dist/contracts/repository.d.ts +8 -7
- package/dist/contracts/search.d.ts +2 -2
- package/dist/contracts/table.d.ts +3 -3
- package/dist/contracts/table.js +3 -3
- package/dist/core/contact-submissions.repository.js +2 -2
- package/dist/core/integration-keys.js +7 -1
- package/dist/core/newsletter.repository.js +2 -2
- package/dist/core/site-config.js +1 -1
- package/dist/errors/error-codes.d.ts +30 -0
- package/dist/errors/error-codes.js +30 -0
- package/dist/errors/error-display-map.js +40 -1
- package/dist/features/about/components/PolicyPageView.d.ts +22 -2
- package/dist/features/about/components/PolicyPageView.js +14 -2
- package/dist/features/about/components/PublicProfileView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +42 -2
- package/dist/features/account/api/[userId]/addresses/route.js +1 -1
- package/dist/features/account/components/NotificationBell.js +1 -1
- package/dist/features/account/components/UserBidsView.js +1 -1
- package/dist/features/account/components/index.d.ts +0 -8
- package/dist/features/account/components/index.js +0 -4
- package/dist/features/account/hooks/useProfileStats.js +5 -1
- package/dist/features/addresses/repository/addresses.repository.d.ts +33 -6
- package/dist/features/addresses/repository/addresses.repository.js +86 -9
- package/dist/features/addresses/schemas/firestore.d.ts +17 -6
- package/dist/features/admin/actions/admin-actions.js +16 -1
- package/dist/features/admin/actions/notification-actions.js +15 -6
- package/dist/features/admin/api/bids/route.js +1 -1
- package/dist/features/admin/api/coupons/route.js +1 -1
- package/dist/features/admin/api/products/route.js +1 -1
- package/dist/features/admin/api/reviews/route.js +1 -1
- package/dist/features/admin/components/AdminAdEditorView.js +19 -5
- package/dist/features/admin/components/AdminAuditLogView.js +1 -1
- package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
- package/dist/features/admin/components/AdminBlogView.js +1 -1
- package/dist/features/admin/components/AdminBrandsView.js +17 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +19 -3
- package/dist/features/admin/components/AdminContactView.js +1 -1
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
- package/dist/features/admin/components/AdminNavigationView.js +1 -1
- package/dist/features/admin/components/AdminNewsletterView.js +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +9 -2
- package/dist/features/admin/components/AdminPageHeader.js +1 -1
- package/dist/features/admin/components/AdminPayoutsView.js +1 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
- package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
- package/dist/features/admin/components/AdminProductEditorView.js +41 -39
- package/dist/features/admin/components/AdminProductsView.js +10 -3
- package/dist/features/admin/components/AdminScammersView.js +1 -1
- package/dist/features/admin/components/AdminSectionsView.js +21 -5
- package/dist/features/admin/components/AdminSessionsView.js +1 -1
- package/dist/features/admin/components/AdminSidebar.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +39 -8
- package/dist/features/admin/components/AdminSparesView.d.ts +12 -0
- package/dist/features/admin/components/AdminSparesView.js +30 -0
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
- package/dist/features/admin/components/AdminTeamView.js +1 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
- package/dist/features/admin/components/AdminUsersView.js +10 -8
- package/dist/features/admin/components/DataListingView.d.ts +2 -1
- package/dist/features/admin/components/DataListingView.js +9 -4
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +7 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
- package/dist/features/admin/constants/filter-tabs.js +1 -0
- package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
- package/dist/features/admin/repository/site-settings.repository.js +8 -3
- package/dist/features/admin/schemas/firestore.d.ts +88 -3
- package/dist/features/admin/schemas/firestore.js +32 -0
- package/dist/features/admin/types/index.d.ts +1 -1
- package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
- package/dist/features/auctions/actions/bid-actions.js +16 -4
- package/dist/features/auctions/api/route.js +1 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
- package/dist/features/auctions/components/AuctionDetailPageView.js +4 -11
- package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
- package/dist/features/auctions/repository/bid.repository.js +114 -13
- package/dist/features/auctions/schemas/firestore.d.ts +24 -4
- package/dist/features/auctions/schemas/firestore.js +1 -0
- package/dist/features/auth/actions/profile-actions.js +30 -4
- package/dist/features/auth/components/index.d.ts +0 -1
- package/dist/features/auth/components/index.js +0 -1
- package/dist/features/auth/repository/session.repository.d.ts +17 -3
- package/dist/features/auth/repository/session.repository.js +46 -5
- package/dist/features/auth/repository/token.repository.d.ts +27 -4
- package/dist/features/auth/repository/token.repository.js +65 -11
- package/dist/features/auth/repository/user.repository.d.ts +46 -7
- package/dist/features/auth/repository/user.repository.js +128 -15
- package/dist/features/auth/schemas/firestore.d.ts +65 -12
- package/dist/features/auth/schemas/firestore.js +13 -0
- package/dist/features/before-after/api/route.js +1 -1
- package/dist/features/blog/components/BlogListView.js +16 -3
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/blog/schemas/index.d.ts +2 -2
- package/dist/features/business-documents/repository/business-documents.repository.d.ts +58 -0
- package/dist/features/business-documents/repository/business-documents.repository.js +54 -0
- package/dist/features/business-documents/schemas/firestore.d.ts +105 -0
- package/dist/features/business-documents/schemas/firestore.js +75 -0
- package/dist/features/cart/actions/cart-actions.js +83 -6
- package/dist/features/cart/api/route.js +1 -1
- package/dist/features/cart/repository/cart.repository.js +32 -4
- package/dist/features/cart/schemas/firestore.d.ts +20 -0
- package/dist/features/cart/schemas/index.d.ts +2 -2
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +1 -1
- package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
- package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
- package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
- package/dist/features/categories/api/[id]/price-guidance/route.d.ts +42 -0
- package/dist/features/categories/api/[id]/price-guidance/route.js +113 -0
- package/dist/features/categories/api/route.js +10 -10
- package/dist/features/categories/components/BrandDetailPageView.js +19 -3
- package/dist/features/categories/components/BrandDetailTabs.js +10 -0
- package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
- package/dist/features/categories/components/CategoryDetailPageView.js +170 -13
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -0
- package/dist/features/categories/components/CategoryGrid.js +10 -1
- package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
- package/dist/features/categories/components/PriceGuidanceHint.d.ts +29 -0
- package/dist/features/categories/components/PriceGuidanceHint.js +61 -0
- package/dist/features/categories/components/SubcategoryCardRow.d.ts +27 -0
- package/dist/features/categories/components/SubcategoryCardRow.js +98 -0
- package/dist/features/categories/components/index.d.ts +0 -2
- package/dist/features/categories/components/index.js +0 -1
- package/dist/features/categories/constants/category-tabs.d.ts +20 -25
- package/dist/features/categories/constants/category-tabs.js +22 -39
- package/dist/features/categories/repository/categories.repository.d.ts +13 -0
- package/dist/features/categories/repository/categories.repository.js +51 -1
- package/dist/features/categories/schemas/firestore.d.ts +22 -1
- package/dist/features/categories/schemas/firestore.js +10 -0
- package/dist/features/categories/schemas/index.d.ts +8 -2
- package/dist/features/categories/schemas/index.js +2 -0
- package/dist/features/categories/types/index.d.ts +8 -0
- package/dist/features/categories/utils/taxonomy-visual.d.ts +34 -0
- package/dist/features/categories/utils/taxonomy-visual.js +74 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +4 -9
- package/dist/features/collections/api/[slug]/route.js +3 -3
- package/dist/features/collections/api/route.js +1 -1
- package/dist/features/consultation/api/route.js +1 -1
- package/dist/features/consultation/repository/consultations.repository.js +1 -1
- package/dist/features/consultation/types/index.d.ts +1 -1
- package/dist/features/contact/components/ContactForm.js +1 -3
- package/dist/features/contact/components/ContactPageView.d.ts +33 -1
- package/dist/features/contact/components/ContactPageView.js +58 -28
- package/dist/features/corporate/api/route.js +1 -1
- package/dist/features/corporate/repository/corporate.repository.js +1 -1
- package/dist/features/corporate/types/index.d.ts +1 -1
- package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
- package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -9
- package/dist/features/events/actions/event-actions.d.ts +14 -0
- package/dist/features/events/actions/event-actions.js +82 -3
- package/dist/features/events/api/[id]/route.js +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +32 -8
- package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
- package/dist/features/events/components/EventRafflesSection.js +52 -3
- package/dist/features/events/components/SpinWheelView.d.ts +2 -2
- package/dist/features/events/components/SpinWheelView.js +41 -4
- package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
- package/dist/features/events/repository/event-entry.repository.js +41 -7
- package/dist/features/events/schemas/firestore.d.ts +17 -4
- package/dist/features/events/types/index.d.ts +37 -0
- package/dist/features/faq/repository/faqs.repository.js +1 -1
- package/dist/features/faq/schemas/index.d.ts +5 -2
- package/dist/features/faq/schemas/index.js +6 -0
- package/dist/features/faq/types/index.d.ts +0 -1
- package/dist/features/grouped/components/GroupedListingDetailView.js +9 -1
- package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
- package/dist/features/grouped/schemas/firestore.d.ts +5 -0
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +3 -3
- package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
- package/dist/features/homepage/api/carousel/route.js +4 -4
- package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
- package/dist/features/homepage/components/AnnouncementBar.js +13 -19
- package/dist/features/homepage/components/CollectionCardsSection.d.ts +28 -6
- package/dist/features/homepage/components/CollectionCardsSection.js +43 -8
- package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -6
- package/dist/features/homepage/components/HowItWorksSection.js +4 -4
- package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
- package/dist/features/homepage/components/PromoGrid.d.ts +31 -2
- package/dist/features/homepage/components/PromoGrid.js +12 -3
- package/dist/features/homepage/components/TestimonialsCarousel.d.ts +34 -2
- package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
- package/dist/features/homepage/components/index.d.ts +0 -22
- package/dist/features/homepage/components/index.js +0 -12
- package/dist/features/homepage/index.d.ts +0 -2
- package/dist/features/homepage/index.js +0 -2
- package/dist/features/homepage/lib/section-renderer.d.ts +9 -0
- package/dist/features/homepage/lib/section-renderer.js +202 -58
- package/dist/features/homepage/repository/homepage-sections.repository.d.ts +35 -3
- package/dist/features/homepage/repository/homepage-sections.repository.js +58 -8
- package/dist/features/homepage/schemas/firestore.d.ts +112 -3
- package/dist/features/homepage/schemas/firestore.js +32 -2
- package/dist/features/homepage/schemas/index.d.ts +46 -17
- package/dist/features/homepage/schemas/index.js +39 -27
- package/dist/features/homepage/server.d.ts +0 -3
- package/dist/features/homepage/server.js +0 -3
- package/dist/features/homepage/types/index.d.ts +0 -47
- package/dist/features/homepage/types/index.js +49 -0
- package/dist/features/layout/AppLayoutShell.d.ts +11 -0
- package/dist/features/layout/AppLayoutShell.js +65 -13
- package/dist/features/layout/BottomActionsContext.d.ts +16 -0
- package/dist/features/layout/BottomActionsContext.js +5 -0
- package/dist/features/layout/BottomChrome.js +48 -9
- package/dist/features/layout/BottomNavItem.js +1 -1
- package/dist/features/layout/BottomNavbar.d.ts +14 -0
- package/dist/features/layout/BottomNavbar.js +43 -3
- package/dist/features/layout/BottomSheet.js +1 -1
- package/dist/features/layout/MainNavbar.d.ts +11 -0
- package/dist/features/layout/NavbarLayout.d.ts +3 -0
- package/dist/features/layout/NavbarLayout.js +88 -11
- package/dist/features/layout/SideActionDock.d.ts +1 -0
- package/dist/features/layout/SideActionDock.js +219 -0
- package/dist/features/layout/TitleBarLayout.js +1 -1
- package/dist/features/layout/cta-anchor.d.ts +31 -0
- package/dist/features/layout/cta-anchor.js +31 -0
- package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
- package/dist/features/layout/hooks/useBottomActions.js +6 -1
- package/dist/features/layout/index.d.ts +9 -1
- package/dist/features/layout/index.js +9 -1
- package/dist/features/layout/useCtaReveal.d.ts +24 -0
- package/dist/features/layout/useCtaReveal.js +82 -0
- package/dist/features/layout/useHoldToOpen.d.ts +41 -0
- package/dist/features/layout/useHoldToOpen.js +84 -0
- package/dist/features/live/components/LiveItemDetailPageView.js +4 -9
- package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
- package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
- package/dist/features/lottery/schemas/firestore.d.ts +33 -5
- package/dist/features/loyalty/api/balance/route.js +1 -1
- package/dist/features/loyalty/api/history/route.js +1 -1
- package/dist/features/media/MediaImage.js +0 -1
- package/dist/features/media/MediaPickerModal.js +7 -1
- package/dist/features/media/hooks/useMedia.js +17 -0
- package/dist/features/media/modals/ImageEditor.js +5 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
- package/dist/features/media/repository/media-assets.repository.d.ts +65 -0
- package/dist/features/media/repository/media-assets.repository.js +31 -0
- package/dist/features/media/trust-signals.d.ts +85 -0
- package/dist/features/media/trust-signals.js +126 -0
- package/dist/features/media/upload/CameraCapture.js +16 -1
- package/dist/features/media/upload/ImageUpload.js +42 -4
- package/dist/features/media/upload/MediaUploadField.js +69 -13
- package/dist/features/media/upload/downscale-image.d.ts +56 -0
- package/dist/features/media/upload/downscale-image.js +150 -0
- package/dist/features/messages/components/ConversationThreadView.js +45 -2
- package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
- package/dist/features/messages/components/MessageSellerButton.js +10 -2
- package/dist/features/messages/schemas/firestore.d.ts +15 -0
- package/dist/features/orders/hooks/useOrders.js +4 -2
- package/dist/features/orders/repository/orders.repository.d.ts +15 -4
- package/dist/features/orders/repository/orders.repository.js +52 -20
- package/dist/features/orders/schemas/firestore.d.ts +15 -4
- package/dist/features/orders/schemas/index.d.ts +8 -8
- package/dist/features/orders/types/index.d.ts +2 -2
- package/dist/features/parts/components/PartDetailPageView.d.ts +14 -1
- package/dist/features/parts/components/PartDetailPageView.js +2 -2
- package/dist/features/parts/components/PartsIndexPageView.d.ts +11 -2
- package/dist/features/parts/components/PartsIndexPageView.js +2 -2
- package/dist/features/parts/components/PartsSearchBox.d.ts +9 -0
- package/dist/features/parts/components/PartsSearchBox.js +57 -0
- package/dist/features/parts/schemas/firestore.d.ts +149 -3
- package/dist/features/parts/schemas/firestore.js +184 -0
- package/dist/features/payments/repository/payments.repository.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +38 -6
- package/dist/features/payments/repository/payout.repository.js +84 -23
- package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
- package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
- package/dist/features/payments/schemas/firestore.d.ts +14 -3
- package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
- package/dist/features/pre-orders/api/[slug]/route.js +1 -1
- package/dist/features/pre-orders/api/admin/route.js +1 -1
- package/dist/features/pre-orders/api/route.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -11
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
- package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
- package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +3 -1
- package/dist/features/price-index/components/PriceIndexToolView.js +92 -13
- package/dist/features/products/api/[id]/route.js +1 -1
- package/dist/features/products/components/CompareOverlay.d.ts +18 -1
- package/dist/features/products/components/CompareOverlay.js +21 -2
- package/dist/features/products/components/CustomSectionTabContent.d.ts +31 -0
- package/dist/features/products/components/CustomSectionTabContent.js +29 -3
- package/dist/features/products/components/GroupMemberPicker.d.ts +19 -1
- package/dist/features/products/components/GroupMemberPicker.js +46 -8
- package/dist/features/products/components/GroupSettingsPanel.d.ts +11 -1
- package/dist/features/products/components/GroupSettingsPanel.js +91 -3
- package/dist/features/products/components/ListingBottomActions.js +4 -0
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +15 -1
- package/dist/features/products/components/PrizeDrawEntryActions.js +70 -8
- package/dist/features/products/components/ProductDetailPageView.js +75 -15
- package/dist/features/products/components/ProductForm.d.ts +13 -1
- package/dist/features/products/components/ProductForm.js +16 -2
- package/dist/features/products/components/ProductGalleryClient.js +2 -2
- package/dist/features/products/components/ProductGrid.js +12 -1
- package/dist/features/products/components/ProductsIndexListing.d.ts +16 -1
- package/dist/features/products/components/ProductsIndexListing.js +3 -3
- package/dist/features/products/components/ShowGroupSection.js +15 -2
- package/dist/features/products/components/SparesListView.d.ts +7 -0
- package/dist/features/products/components/SparesListView.js +39 -0
- package/dist/features/products/components/index.d.ts +0 -2
- package/dist/features/products/components/index.js +0 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
- package/dist/features/products/config/listing-type-listing-config.js +27 -2
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/constants/listing-tabs.d.ts +9 -0
- package/dist/features/products/constants/listing-tabs.js +3 -2
- package/dist/features/products/hooks/useProducts.js +2 -2
- package/dist/features/products/repository/products.repository.d.ts +98 -0
- package/dist/features/products/repository/products.repository.js +248 -18
- package/dist/features/products/schemas/firestore.d.ts +97 -4
- package/dist/features/products/schemas/firestore.js +104 -0
- package/dist/features/products/schemas/index.d.ts +12 -21
- package/dist/features/products/schemas/index.js +23 -6
- package/dist/features/products/types/index.d.ts +46 -2
- package/dist/features/products/utils/group-member-image.d.ts +39 -0
- package/dist/features/products/utils/group-member-image.js +3 -0
- package/dist/features/products/utils/listing-badge-variant.js +4 -0
- package/dist/features/promotions/api/route.js +1 -1
- package/dist/features/reviews/actions/review-actions.d.ts +6 -6
- package/dist/features/reviews/actions/review-actions.js +22 -8
- package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
- package/dist/features/reviews/repository/reviews.repository.js +63 -12
- package/dist/features/reviews/schemas/firestore.d.ts +13 -2
- package/dist/features/reviews/schemas/index.d.ts +2 -2
- package/dist/features/scams/actions/scam-actions.js +16 -4
- package/dist/features/scams/components/ScamProfileView.js +1 -1
- package/dist/features/search/components/EntityTypeahead.d.ts +44 -0
- package/dist/features/search/components/EntityTypeahead.js +92 -0
- package/dist/features/search/components/Search.d.ts +12 -1
- package/dist/features/search/components/Search.js +47 -3
- package/dist/features/search/components/SearchFacetRail.d.ts +11 -0
- package/dist/features/search/components/SearchFacetRail.js +92 -0
- package/dist/features/search/components/SearchResultsClient.d.ts +33 -0
- package/dist/features/search/components/SearchResultsClient.js +103 -0
- package/dist/features/search/components/SearchResultsPageView.d.ts +15 -1
- package/dist/features/search/components/SearchResultsPageView.js +3 -2
- package/dist/features/search/components/index.d.ts +0 -6
- package/dist/features/search/components/index.js +0 -3
- package/dist/features/search/hooks/useNavSuggestions.d.ts +13 -0
- package/dist/features/search/hooks/useScopedSearch.d.ts +34 -0
- package/dist/features/search/hooks/useScopedSearch.js +114 -0
- package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
- package/dist/features/search/hooks/useSearchIndex.js +172 -0
- package/dist/features/search/hooks/useSiteSearch.d.ts +26 -0
- package/dist/features/search/hooks/useSiteSearch.js +149 -0
- package/dist/features/search/index.d.ts +0 -4
- package/dist/features/search/index.js +0 -4
- package/dist/features/search/manifest.d.ts +12 -0
- package/dist/features/search/manifest.js +17 -2
- package/dist/features/search/server.d.ts +0 -3
- package/dist/features/search/server.js +0 -3
- package/dist/features/seller/actions/offer-actions.d.ts +5 -5
- package/dist/features/seller/actions/offer-actions.js +38 -8
- package/dist/features/seller/actions/seller-actions.js +34 -7
- package/dist/features/seller/api/coupons/route.js +1 -1
- package/dist/features/seller/api/products/route.js +1 -1
- package/dist/features/seller/api/store/route.js +1 -1
- package/dist/features/seller/components/SellerBidsView.js +1 -1
- package/dist/features/seller/components/SellerCouponsView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.d.ts +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +29 -1
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +35 -15
- package/dist/features/seller/components/SellerPayoutsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
- package/dist/features/seller/components/SellerProductShell.js +2 -2
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +0 -1
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/components/SellerSparesView.d.ts +17 -0
- package/dist/features/seller/components/SellerSparesView.js +6 -0
- package/dist/features/seller/components/SellerStorefrontView.js +0 -1
- package/dist/features/seller/components/index.d.ts +2 -4
- package/dist/features/seller/components/index.js +1 -2
- package/dist/features/seller/repository/offer.repository.d.ts +15 -3
- package/dist/features/seller/repository/offer.repository.js +43 -7
- package/dist/features/seller/schemas/firestore.d.ts +14 -3
- package/dist/features/seller/schemas/index.d.ts +4 -4
- package/dist/features/seller/schemas/order-forms.d.ts +39 -0
- package/dist/features/seller/schemas/order-forms.js +37 -0
- package/dist/features/shell/CommandPalette.js +1 -1
- package/dist/features/shell/FormShell.js +6 -2
- package/dist/features/shell/QuickFormDrawer.js +15 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
- package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
- package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
- package/dist/features/sticker-trace/constants/help-content.js +172 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
- package/dist/features/sticker-trace/schemas/firestore.d.ts +267 -0
- package/dist/features/sticker-trace/schemas/firestore.js +79 -0
- package/dist/features/sticker-trace/server.d.ts +8 -0
- package/dist/features/sticker-trace/server.js +51 -0
- package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
- package/dist/features/stores/actions/store-query-actions.js +7 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/route.js +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +7 -82
- package/dist/features/stores/components/StoreHeader.js +1 -2
- package/dist/features/stores/components/StoreNavTabs.js +17 -2
- package/dist/features/stores/components/StoreSparesPageView.d.ts +27 -0
- package/dist/features/stores/components/StoreSparesPageView.js +48 -0
- package/dist/features/stores/manifest.js +8 -4
- package/dist/features/stores/schemas/firestore.d.ts +19 -0
- package/dist/features/support/repository/support.repository.d.ts +14 -3
- package/dist/features/support/repository/support.repository.js +93 -13
- package/dist/features/support/schemas/firestore.d.ts +16 -5
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +96 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +4 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +478 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +54 -32
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +3 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +73 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +340 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
- package/dist/features/tester/seed-data/authored/index.js +24 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +1 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +57 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +77 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +58 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +284 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +558 -34
- package/dist/index.d.ts +27 -80
- package/dist/index.js +62 -115
- package/dist/next/api/routeHandler.js +9 -0
- package/dist/next/routing/require-record.d.ts +13 -0
- package/dist/next/routing/require-record.js +62 -0
- package/dist/next/routing/route-map.d.ts +46 -5
- package/dist/next/routing/route-map.js +70 -3
- package/dist/providers/db-firebase/base.d.ts +4 -2
- package/dist/providers/db-firebase/base.js +21 -5
- package/dist/providers/db-firebase/base.repository.d.ts +33 -9
- package/dist/providers/db-firebase/base.repository.js +55 -0
- package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
- package/dist/providers/db-firebase/rtdb-paths.js +12 -0
- package/dist/react/ErrorBoundary.js +6 -1
- package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
- package/dist/react/hooks/realtime-event-constants.js +8 -0
- package/dist/react/hooks/useEntityDelete.js +5 -1
- package/dist/react/hooks/useMessage.js +5 -1
- package/dist/repositories/index.d.ts +2 -2
- package/dist/repositories/index.js +6 -1
- package/dist/schemas/registry.d.ts +28 -26
- package/dist/schemas/registry.js +31 -14
- package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
- package/dist/security/blind-index-tokens.d.ts +54 -0
- package/dist/security/blind-index-tokens.js +152 -0
- package/dist/security/encrypted.d.ts +117 -0
- package/dist/security/encrypted.js +100 -0
- package/dist/security/index.d.ts +6 -3
- package/dist/security/index.js +17 -3
- package/dist/security/pii-accessors.d.ts +71 -0
- package/dist/security/pii-accessors.js +150 -0
- package/dist/security/pii-encrypt.d.ts +0 -8
- package/dist/security/pii-encrypt.js +22 -15
- package/dist/security/pii-mask.d.ts +18 -0
- package/dist/security/pii-mask.js +27 -0
- package/dist/security/settings-encryption.d.ts +35 -0
- package/dist/security/settings-encryption.js +91 -0
- package/dist/seed/_helpers/brand-rows.js +38 -14
- package/dist/seed/_helpers/category-forest.js +73 -7
- package/dist/seed/_helpers/category-images-generated.d.ts +25 -6
- package/dist/seed/_helpers/category-images-generated.js +81 -6
- package/dist/seed/_helpers/category-models.d.ts +1 -1
- package/dist/seed/_helpers/category-models.js +7 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +8 -0
- package/dist/seed/_helpers/category-parts.d.ts +1 -1
- package/dist/seed/_helpers/category-parts.js +50 -2
- package/dist/seed/_helpers/character-features.d.ts +1 -1
- package/dist/seed/_helpers/character-features.js +2 -1
- package/dist/seed/_helpers/franchise-rows.js +10 -2
- package/dist/seed/_helpers/media.d.ts +47 -0
- package/dist/seed/_helpers/media.js +34 -0
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
- package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
- package/dist/seed/addresses-seed-data.d.ts +2 -2
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +78 -0
- package/dist/seed/authenticity-knowledge-seed-data.js +10729 -0
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +23 -2
- package/dist/seed/categories-seed-data.js +124 -20
- package/dist/seed/events-seed-data.d.ts +2 -2
- package/dist/seed/events-seed-data.js +5 -0
- package/dist/seed/faq-seed-data.js +175 -5
- package/dist/seed/grouped-listings-seed-data.js +16 -0
- package/dist/seed/homepage-sections-seed-data.js +131 -26
- package/dist/seed/index.d.ts +3 -3
- package/dist/seed/index.js +3 -2
- package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
- package/dist/seed/manifest.js +3 -0
- package/dist/seed/media-assets-seed-data.d.ts +1 -1
- package/dist/seed/media-assets-seed-data.js +746 -196
- package/dist/seed/model-composition-seed-data.js +122 -6
- package/dist/seed/offers-seed-data.d.ts +2 -2
- package/dist/seed/offers-seed-data.js +1 -1
- package/dist/seed/orders-seed-data.d.ts +2 -2
- package/dist/seed/part-glossary-seed-data.d.ts +1 -1
- package/dist/seed/part-glossary-seed-data.js +37219 -463
- package/dist/seed/payouts-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.js +1 -1
- package/dist/seed/products-art-seed-data.js +7 -18
- package/dist/seed/products-auctions-seed-data.js +56 -47
- package/dist/seed/products-beyblade-x-seed-data.d.ts +2 -0
- package/dist/seed/products-beyblade-x-seed-data.js +441 -0
- package/dist/seed/products-catalogue-seed-data.d.ts +5 -5
- package/dist/seed/products-catalogue-seed-data.js +1500 -1240
- package/dist/seed/products-classifieds-seed-data.js +9 -27
- package/dist/seed/products-digital-codes-seed-data.js +9 -18
- package/dist/seed/products-live-items-seed-data.js +5 -13
- package/dist/seed/products-preorders-seed-data.js +67 -33
- package/dist/seed/products-prize-draws-seed-data.js +8 -17
- package/dist/seed/products-spares-seed-data.d.ts +2 -0
- package/dist/seed/products-spares-seed-data.js +368 -0
- package/dist/seed/products-standard-seed-data.js +39 -126
- package/dist/seed/products-stickers-seed-data.js +59 -15
- package/dist/seed/reviews-seed-data.d.ts +1 -2
- package/dist/seed/seed-purpose.js +7 -0
- package/dist/seed/sessions-seed-data.d.ts +2 -2
- package/dist/seed/sessions-seed-data.js +5 -0
- package/dist/seed/site-settings-seed-data.js +9 -1
- package/dist/seed/support-tickets-seed-data.d.ts +2 -2
- package/dist/seed/support-tickets-seed-data.js +1 -1
- package/dist/seed/users-seed-data.d.ts +2 -2
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seo/json-ld.d.ts +25 -0
- package/dist/seo/json-ld.js +33 -1
- package/dist/server-entry.d.ts +3 -1
- package/dist/server-entry.js +2 -2
- package/dist/server.d.ts +27 -12
- package/dist/server.js +86 -28
- package/dist/styles.css +438 -1
- package/dist/tailwind-input.css +31 -17
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Accordion.js +1 -1
- package/dist/ui/components/Breadcrumb.js +1 -1
- package/dist/ui/components/Button.js +7 -1
- package/dist/ui/components/DetailPageGallery.js +0 -2
- package/dist/ui/components/DetailPageHero.js +0 -1
- package/dist/ui/components/DetailPageTabs.js +1 -1
- package/dist/ui/components/Divider.js +3 -3
- package/dist/ui/components/FilterChipGroup.d.ts +11 -0
- package/dist/ui/components/FilterChipGroup.js +1 -1
- package/dist/ui/components/GatedPrice.js +5 -1
- package/dist/ui/components/HorizontalScroller.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -1
- package/dist/ui/components/ListingLayout.js +17 -11
- package/dist/ui/components/MediaTabs.style.css +81 -0
- package/dist/ui/components/OverflowRow.d.ts +92 -0
- package/dist/ui/components/OverflowRow.js +203 -0
- package/dist/ui/components/OverflowRow.style.css +235 -0
- package/dist/ui/components/Pagination.js +1 -1
- package/dist/ui/components/PendingValue.d.ts +45 -0
- package/dist/ui/components/PendingValue.js +7 -0
- package/dist/ui/components/Radio.style.css +119 -0
- package/dist/ui/components/RatingDisplay.js +2 -2
- package/dist/ui/components/RecordDetailModal.js +14 -1
- package/dist/ui/components/RowActionMenu.js +5 -1
- package/dist/ui/components/SettingsSection.js +0 -2
- package/dist/ui/components/SideDrawer.js +5 -1
- package/dist/ui/components/SideModal.js +9 -1
- package/dist/ui/components/SiteLogo.js +3 -0
- package/dist/ui/components/SiteMark.js +3 -0
- package/dist/ui/components/SortDropdown.js +1 -1
- package/dist/ui/components/SpecTable.d.ts +58 -0
- package/dist/ui/components/SpecTable.js +8 -0
- package/dist/ui/components/StarRating.js +1 -3
- package/dist/ui/components/SummaryCard.js +1 -1
- package/dist/ui/components/TabBarShell.d.ts +12 -1
- package/dist/ui/components/TabBarShell.js +3 -2
- package/dist/ui/components/Tabs.js +36 -24
- package/dist/ui/components/Toast.d.ts +3 -24
- package/dist/ui/components/Toast.js +2 -19
- package/dist/ui/components/TopBannerPortal.d.ts +15 -0
- package/dist/ui/components/TopBannerPortal.js +19 -0
- package/dist/ui/components/UnsavedChangesModal.js +5 -1
- package/dist/ui/components/index.style.css +2 -0
- package/dist/ui/components/row-collapse.d.ts +15 -0
- package/dist/ui/components/row-collapse.js +127 -0
- package/dist/ui/components/toast-context.d.ts +63 -0
- package/dist/ui/components/toast-context.js +48 -0
- package/dist/ui/components/top-banner-slot.d.ts +37 -0
- package/dist/ui/components/top-banner-slot.js +45 -0
- package/dist/ui/icons/icon-registry.d.ts +7 -0
- package/dist/ui/icons/icon-registry.js +25 -1
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +3 -0
- package/dist/utils/array.helper.d.ts +2 -2
- package/dist/utils/array.helper.js +5 -5
- package/dist/utils/id-generators.d.ts +6 -0
- package/dist/utils/id-generators.js +10 -0
- package/dist/utils/media-url.js +0 -2
- package/dist/utils/search-txt-builders.d.ts +28 -4
- package/dist/utils/search-txt-builders.js +41 -1
- package/dist/utils/search-txt-query.d.ts +12 -0
- package/dist/utils/search-txt-query.js +12 -0
- package/dist/validation/schemas.d.ts +8 -8
- package/package.json +6 -2
- package/scripts/dedupe-peer-deps.mjs +18 -0
- package/scripts/seed-cli.mjs +138 -26
- package/scripts/verify-css-build.mjs +118 -37
- package/dist/_internal/server/features/search/actions.d.ts +0 -7
- package/dist/_internal/server/features/search/actions.js +0 -21
- package/dist/_internal/server/features/search/data.d.ts +0 -15
- package/dist/_internal/server/features/search/data.js +0 -18
- package/dist/_internal/server/features/search/index.d.ts +0 -3
- package/dist/_internal/server/features/search/index.js +0 -2
- package/dist/features/account/components/UserAddressesView.d.ts +0 -13
- package/dist/features/account/components/UserAddressesView.js +0 -5
- package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
- package/dist/features/account/components/UserNotificationsView.js +0 -12
- package/dist/features/account/components/UserSettingsView.d.ts +0 -16
- package/dist/features/account/components/UserSettingsView.js +0 -13
- package/dist/features/account/components/UserSupportView.d.ts +0 -3
- package/dist/features/account/components/UserSupportView.js +0 -166
- package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
- package/dist/features/admin/components/DemoSeedView.js +0 -5
- package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
- package/dist/features/auth/components/AuthStatusPanel.js +0 -22
- package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
- package/dist/features/categories/components/CategoryProductsView.js +0 -21
- package/dist/features/homepage/api/[id]/route.d.ts +0 -23
- package/dist/features/homepage/api/[id]/route.js +0 -103
- package/dist/features/homepage/api/route.d.ts +0 -14
- package/dist/features/homepage/api/route.js +0 -140
- package/dist/features/homepage/api/sections/[id]/route.d.ts +0 -26
- package/dist/features/homepage/api/sections/[id]/route.js +0 -95
- package/dist/features/homepage/api/sections/route.d.ts +0 -13
- package/dist/features/homepage/api/sections/route.js +0 -82
- package/dist/features/homepage/components/AdvertisementBanner.d.ts +0 -14
- package/dist/features/homepage/components/AdvertisementBanner.js +0 -35
- package/dist/features/homepage/components/BeforeAfterCard.d.ts +0 -9
- package/dist/features/homepage/components/BeforeAfterCard.js +0 -73
- package/dist/features/homepage/components/FeaturedResultsSection.d.ts +0 -17
- package/dist/features/homepage/components/FeaturedResultsSection.js +0 -17
- package/dist/features/homepage/components/HeroBanner.d.ts +0 -7
- package/dist/features/homepage/components/HeroBanner.js +0 -43
- package/dist/features/homepage/components/HeroSection.d.ts +0 -7
- package/dist/features/homepage/components/HeroSection.js +0 -6
- package/dist/features/homepage/components/HomepageSkeleton.d.ts +0 -2
- package/dist/features/homepage/components/HomepageSkeleton.js +0 -21
- package/dist/features/homepage/components/HomepageView.d.ts +0 -25
- package/dist/features/homepage/components/HomepageView.js +0 -5
- package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
- package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
- package/dist/features/homepage/components/NewsletterBanner.d.ts +0 -23
- package/dist/features/homepage/components/NewsletterBanner.js +0 -37
- package/dist/features/homepage/components/SiteFeaturesSection.d.ts +0 -14
- package/dist/features/homepage/components/SiteFeaturesSection.js +0 -11
- package/dist/features/homepage/components/TrustBadges.d.ts +0 -6
- package/dist/features/homepage/components/TrustBadges.js +0 -46
- package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +0 -12
- package/dist/features/homepage/components/TrustIndicatorsSection.js +0 -11
- package/dist/features/homepage/hooks/useHomepage.d.ts +0 -11
- package/dist/features/homepage/hooks/useHomepage.js +0 -17
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +0 -2
- package/dist/features/homepage/hooks/useHomepageSections.js +0 -10
- package/dist/features/homepage/repository/homepage.repository.d.ts +0 -11
- package/dist/features/homepage/repository/homepage.repository.js +0 -25
- package/dist/features/layout/BottomActions.d.ts +0 -1
- package/dist/features/layout/BottomActions.js +0 -311
- package/dist/features/products/components/ProductsView.d.ts +0 -6
- package/dist/features/products/components/ProductsView.js +0 -5
- package/dist/features/search/actions/index.d.ts +0 -1
- package/dist/features/search/actions/index.js +0 -1
- package/dist/features/search/actions/search-actions.d.ts +0 -18
- package/dist/features/search/actions/search-actions.js +0 -43
- package/dist/features/search/api/route.d.ts +0 -22
- package/dist/features/search/api/route.js +0 -128
- package/dist/features/search/columns/index.d.ts +0 -17
- package/dist/features/search/columns/index.js +0 -49
- package/dist/features/search/components/SearchFiltersRow.d.ts +0 -22
- package/dist/features/search/components/SearchFiltersRow.js +0 -21
- package/dist/features/search/components/SearchResultsSection.d.ts +0 -53
- package/dist/features/search/components/SearchResultsSection.js +0 -35
- package/dist/features/search/components/SearchView.d.ts +0 -27
- package/dist/features/search/components/SearchView.js +0 -8
- package/dist/features/search/hooks/useSearch.d.ts +0 -21
- package/dist/features/search/hooks/useSearch.js +0 -33
- package/dist/features/search/repository/search.repository.d.ts +0 -14
- package/dist/features/search/repository/search.repository.js +0 -59
- package/dist/features/search/schemas/index.d.ts +0 -70
- package/dist/features/search/schemas/index.js +0 -36
- package/dist/features/search/types/index.d.ts +0 -48
- package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
- package/dist/features/seller/components/SellerStoreView.js +0 -8
- package/dist/features/stores/components/StoreScopedSearch.d.ts +0 -17
- package/dist/features/stores/components/StoreScopedSearch.js +0 -27
- package/dist/seed/defaults/homepage-sections.d.ts +0 -2
- package/dist/seed/defaults/homepage-sections.js +0 -60
- package/dist/seed/factories/homepage-section.factory.d.ts +0 -10
- package/dist/seed/factories/homepage-section.factory.js +0 -13
- /package/dist/{features/search/types/index.js → _internal/shared/listing-types/spares/og.d.ts} +0 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: The tracer ends at extracted geometry and a promoted run's full-size
|
|
3
|
+
* part PNGs. This is what makes that worth doing — the whole sheet becomes
|
|
4
|
+
* one listing, each unique cut becomes its own, and they are grouped so a
|
|
5
|
+
* buyer takes any mix ("the sheet, no; six of B; one of D").
|
|
6
|
+
* WHAT: `promoteStickerSheetToListings` — sheet → one parent product + N child
|
|
7
|
+
* products in one product group.
|
|
8
|
+
*
|
|
9
|
+
* 🛑 DISTINCT FROM `promoteRun`, and the names are close enough to matter.
|
|
10
|
+
* · `POST .../runs/{runId}/promote` → `promoteRun`: run → SHEET. Renders
|
|
11
|
+
* full-res parts and exports, sets `activeRunId`. Stays inside the tracer.
|
|
12
|
+
* · `POST .../promote-to-listings` → this: SHEET → MARKETPLACE. Creates
|
|
13
|
+
* products. Runs once per sheet, after the above.
|
|
14
|
+
* Calling this without the first is refused, because `SheetPart.assetPath` is
|
|
15
|
+
* only written by the `mode: "full"` shard path.
|
|
16
|
+
*
|
|
17
|
+
* 🛑 ZERO BYTES ARE COPIED for the watermarked display image. A `mediaAssets`
|
|
18
|
+
* row pointing at the EXISTING private part PNG is enough: the row is what
|
|
19
|
+
* mints `/media/{shortId}`, and the proxy watermarks on read because the row is
|
|
20
|
+
* written with `watermarkedAt` absent. Clean original for the cut file,
|
|
21
|
+
* watermarked copy for the marketplace, one object. Object count is metered
|
|
22
|
+
* separately from bytes, which is the whole reason the thumb atlas exists.
|
|
23
|
+
*
|
|
24
|
+
* EXPORTS: PromoteToListingsInput, PromoteToListingsResult,
|
|
25
|
+
* promoteStickerSheetToListings
|
|
26
|
+
*
|
|
27
|
+
* @tag domain:sticker-trace,products
|
|
28
|
+
* @tag layer:server
|
|
29
|
+
* @tag pattern:none
|
|
30
|
+
* @tag access:server
|
|
31
|
+
* @tag consumers:api/admin/sticker-sheets
|
|
32
|
+
* @tag sideEffects:firestore
|
|
33
|
+
*/
|
|
34
|
+
import { ValidationError } from "../../../../errors/validation-error.js";
|
|
35
|
+
import { serverLogger } from "../../../../monitoring/server-logger.js";
|
|
36
|
+
import { normalizeError } from "../../../../errors/normalize.js";
|
|
37
|
+
import { productRepository } from "../../../../repositories/index.js";
|
|
38
|
+
import { mediaAssetsRepository } from "../../../../features/media/repository/media-assets.repository.js";
|
|
39
|
+
import { stickerSheetsRepository } from "../../../../features/sticker-trace/repository/sticker-sheets.repository.js";
|
|
40
|
+
/** A part that becomes its own listing: unique, and actually rendered. */
|
|
41
|
+
function isListableUniquePart(part) {
|
|
42
|
+
/*
|
|
43
|
+
* `duplicateOf` is proposed by perceptual hash and CONFIRMED BY A HUMAN, so
|
|
44
|
+
* trusting it is safe by design — that confirmation step exists precisely so
|
|
45
|
+
* this decision can be mechanical. Two stickers that merely look alike at
|
|
46
|
+
* thumbnail size are common on these sheets.
|
|
47
|
+
*/
|
|
48
|
+
return part.duplicateOf === undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Refuse loudly, before writing anything, if the sheet is not ready.
|
|
52
|
+
*
|
|
53
|
+
* 🛑 A half-promoted sheet is the "wrong data, no error" failure this whole
|
|
54
|
+
* plan exists to avoid: some parts listed, some silently missing, and nothing
|
|
55
|
+
* anywhere saying so. Every precondition is therefore checked UP FRONT and the
|
|
56
|
+
* whole promotion refused — not checked per part inside the loop, which would
|
|
57
|
+
* leave the first N written.
|
|
58
|
+
*/
|
|
59
|
+
function assertPromotable(sheet) {
|
|
60
|
+
if (!sheet.activeRunId) {
|
|
61
|
+
throw new ValidationError(`"${sheet.title}" has no accepted run yet. Accept a run first, then promote it to listings.`);
|
|
62
|
+
}
|
|
63
|
+
const parts = sheet.parts ?? [];
|
|
64
|
+
if (parts.length === 0) {
|
|
65
|
+
throw new ValidationError(`"${sheet.title}" has no parts. Trace it and accept a run first.`);
|
|
66
|
+
}
|
|
67
|
+
const unique = parts.filter(isListableUniquePart);
|
|
68
|
+
if (unique.length === 0) {
|
|
69
|
+
throw new ValidationError(`Every part on "${sheet.title}" is marked a duplicate of another, so there is nothing to list.`);
|
|
70
|
+
}
|
|
71
|
+
/*
|
|
72
|
+
* `assetPath` absent means the accepted run was never PROMOTED — the
|
|
73
|
+
* full-resolution PNGs do not exist. Naming the parts rather than saying
|
|
74
|
+
* "not ready": the admin's next action is different depending on whether it
|
|
75
|
+
* is all of them (promote the run) or a few (the shard that rendered those
|
|
76
|
+
* failed, so retry).
|
|
77
|
+
*/
|
|
78
|
+
const unrendered = unique.filter((p) => !p.assetPath);
|
|
79
|
+
if (unrendered.length > 0) {
|
|
80
|
+
throw new ValidationError(`${unrendered.length} of ${unique.length} parts on "${sheet.title}" have no full-resolution image yet` +
|
|
81
|
+
` (${unrendered.slice(0, 5).map((p) => `#${p.ordinal}`).join(", ")}${unrendered.length > 5 ? ", …" : ""}).` +
|
|
82
|
+
` Accept & render the run before promoting it to listings.`);
|
|
83
|
+
}
|
|
84
|
+
return unique;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Register the public, WATERMARKED display copy of one part.
|
|
88
|
+
*
|
|
89
|
+
* Reuses an existing row when the part already has one, so re-promoting a sheet
|
|
90
|
+
* does not mint a second slug for the same object and orphan the first.
|
|
91
|
+
*/
|
|
92
|
+
async function ensurePartMediaSlug(sheet, part, actorUid) {
|
|
93
|
+
if (part.mediaShortId)
|
|
94
|
+
return part.mediaShortId;
|
|
95
|
+
if (!part.assetPath)
|
|
96
|
+
return undefined;
|
|
97
|
+
try {
|
|
98
|
+
const asset = await mediaAssetsRepository.createAsset(
|
|
99
|
+
/*
|
|
100
|
+
* A content-derived slug, matching every other media slug in the app.
|
|
101
|
+
* `createAsset` appends a random suffix on collision, so two sheets with
|
|
102
|
+
* the same title cannot overwrite each other's parts.
|
|
103
|
+
*/
|
|
104
|
+
`sticker-part-${sheet.id}-${String(part.ordinal).padStart(3, "0")}`, {
|
|
105
|
+
/*
|
|
106
|
+
* 🛑 The SAME path as the clean original. This is the no-byte-copy
|
|
107
|
+
* mechanism, and it is only safe because of the two fields below.
|
|
108
|
+
*/
|
|
109
|
+
storagePath: part.assetPath,
|
|
110
|
+
uploadedBy: actorUid,
|
|
111
|
+
contentType: "image/png",
|
|
112
|
+
/*
|
|
113
|
+
* Not measured. The row's `size` is used by the media usage meter, not
|
|
114
|
+
* for serving, and reading the object's metadata here would cost a
|
|
115
|
+
* Storage round trip per part — 60 on a full sheet — for a number the
|
|
116
|
+
* sticker feature already reports from `measureSheetBytes`.
|
|
117
|
+
*/
|
|
118
|
+
size: 0,
|
|
119
|
+
isPublic: true,
|
|
120
|
+
status: "finalized",
|
|
121
|
+
contextType: "sticker-part",
|
|
122
|
+
/*
|
|
123
|
+
* 🛑 `watermarkedAt` is DELIBERATELY ABSENT, and it is the whole design.
|
|
124
|
+
* The proxy skips its sharp composite only when that field is set — so
|
|
125
|
+
* leaving it unset means `/media/{shortId}` watermarks this object on
|
|
126
|
+
* every read, while `assetPath` behind a signed URL stays clean. Set it
|
|
127
|
+
* here and the marketplace would serve the unwatermarked printable
|
|
128
|
+
* original, which is the one outcome this must never produce.
|
|
129
|
+
*/
|
|
130
|
+
});
|
|
131
|
+
return asset.id;
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
const e = normalizeError(err);
|
|
135
|
+
/*
|
|
136
|
+
* Non-fatal. A part with no public slug still lists — it falls back to no
|
|
137
|
+
* image rather than blocking the whole promotion — and the admin can
|
|
138
|
+
* re-promote to fill it in. Failing the sheet over one media row would be
|
|
139
|
+
* the worse trade.
|
|
140
|
+
*/
|
|
141
|
+
serverLogger.warn("sticker-promote: media row failed for part", {
|
|
142
|
+
sheetId: sheet.id,
|
|
143
|
+
ordinal: part.ordinal,
|
|
144
|
+
error: e.message,
|
|
145
|
+
});
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export async function promoteStickerSheetToListings(input) {
|
|
150
|
+
const sheet = await stickerSheetsRepository.findByIdOrFail(input.sheetId);
|
|
151
|
+
const unique = assertPromotable(sheet);
|
|
152
|
+
const allParts = sheet.parts ?? [];
|
|
153
|
+
/*
|
|
154
|
+
* Media rows first, before any product write.
|
|
155
|
+
*
|
|
156
|
+
* The images are what a listing is FOR, so resolving them up front means a
|
|
157
|
+
* product is never created pointing at nothing. Sequential rather than
|
|
158
|
+
* `Promise.all`: `createAsset` does a read-then-write collision check, and 60
|
|
159
|
+
* of those in parallel is 120 concurrent operations against Rule #6's budget
|
|
160
|
+
* for an admin action that is not latency-sensitive.
|
|
161
|
+
*/
|
|
162
|
+
const slugByOrdinal = new Map();
|
|
163
|
+
for (const part of unique) {
|
|
164
|
+
const slug = await ensurePartMediaSlug(sheet, part, input.actorUid);
|
|
165
|
+
if (slug)
|
|
166
|
+
slugByOrdinal.set(part.ordinal, slug);
|
|
167
|
+
}
|
|
168
|
+
const partImage = (part) => {
|
|
169
|
+
const slug = slugByOrdinal.get(part.ordinal);
|
|
170
|
+
return slug ? `/media/${slug}` : "";
|
|
171
|
+
};
|
|
172
|
+
/*
|
|
173
|
+
* The parent: the whole sheet.
|
|
174
|
+
*
|
|
175
|
+
* 🛑 `madeToOrder: true`. A sheet that has been cut into parts has no stock
|
|
176
|
+
* of its own — it is printed when ordered — so without the flag the parent is
|
|
177
|
+
* unbuyable at quantity 0 and vanishes from the default availability scope,
|
|
178
|
+
* taking the group's entry point with it.
|
|
179
|
+
*/
|
|
180
|
+
const parent = (await productRepository.create({
|
|
181
|
+
title: sheet.title,
|
|
182
|
+
description: `The complete ${sheet.title} sheet. Individual stickers from this sheet are listed separately — ` +
|
|
183
|
+
`pick any mix from the group below.`,
|
|
184
|
+
categorySlugs: [],
|
|
185
|
+
price: input.sheetPrice,
|
|
186
|
+
currency: "INR",
|
|
187
|
+
stockQuantity: 0,
|
|
188
|
+
madeToOrder: true,
|
|
189
|
+
mainImage: unique[0] ? partImage(unique[0]) : "",
|
|
190
|
+
images: unique.slice(0, 4).map(partImage).filter(Boolean),
|
|
191
|
+
status: "draft",
|
|
192
|
+
storeId: input.storeId,
|
|
193
|
+
featured: false,
|
|
194
|
+
tags: ["stickers"],
|
|
195
|
+
condition: "new",
|
|
196
|
+
listingType: "stickers",
|
|
197
|
+
groupTitle: sheet.title,
|
|
198
|
+
sourceStickerSheetId: sheet.id,
|
|
199
|
+
}));
|
|
200
|
+
/*
|
|
201
|
+
* `startGroup` sets `groupId = slug`, so the group id IS the parent's slug —
|
|
202
|
+
* which is why the parent must exist before any child can name it.
|
|
203
|
+
*/
|
|
204
|
+
const parentSlug = parent.slug ?? parent.id;
|
|
205
|
+
await productRepository.startGroup(parent.id, parentSlug);
|
|
206
|
+
const children = [];
|
|
207
|
+
for (const part of unique) {
|
|
208
|
+
const child = (await productRepository.create({
|
|
209
|
+
title: `${sheet.title} — ${part.name}`,
|
|
210
|
+
description: `A single kiss-cut sticker from the ${sheet.title} sheet.`,
|
|
211
|
+
categorySlugs: [],
|
|
212
|
+
price: input.partPrice,
|
|
213
|
+
currency: "INR",
|
|
214
|
+
stockQuantity: 0,
|
|
215
|
+
// Same reasoning as the parent: a cut sticker is printed on order.
|
|
216
|
+
madeToOrder: true,
|
|
217
|
+
mainImage: partImage(part),
|
|
218
|
+
images: [partImage(part)].filter(Boolean),
|
|
219
|
+
status: "draft",
|
|
220
|
+
storeId: input.storeId,
|
|
221
|
+
featured: false,
|
|
222
|
+
tags: ["stickers"],
|
|
223
|
+
condition: "new",
|
|
224
|
+
listingType: "stickers",
|
|
225
|
+
sourceStickerSheetId: sheet.id,
|
|
226
|
+
sourceStickerPartOrdinal: part.ordinal,
|
|
227
|
+
}));
|
|
228
|
+
children.push(child);
|
|
229
|
+
}
|
|
230
|
+
/*
|
|
231
|
+
* 🛑 ONE batch link, via `linkChildrenToGroup`. Calling `linkChildToGroup` in
|
|
232
|
+
* a loop was the bug this phase had to fix first: it spread the CALLER's
|
|
233
|
+
* in-memory `parent.groupChildSlugs`, so N children produced exactly one
|
|
234
|
+
* entry — every iteration computing `[...stale, child]` from the same
|
|
235
|
+
* pre-loop snapshot, last write winning. Each child still got its own
|
|
236
|
+
* `groupId`, so nothing errored and `findAllByGroupId` found them all while
|
|
237
|
+
* the parent claimed one member.
|
|
238
|
+
*/
|
|
239
|
+
await productRepository.linkChildrenToGroup({ ...parent, groupId: parentSlug }, children);
|
|
240
|
+
/*
|
|
241
|
+
* Write the slugs back onto the sheet so a re-promote reuses them.
|
|
242
|
+
*
|
|
243
|
+
* 🛑 Mapped over ALL parts, keyed on `ordinal`, never on array index — and
|
|
244
|
+
* `assertPromotable` filtered to unique parts, so a plain `.map()` over
|
|
245
|
+
* `unique` here would DROP every duplicate part from the sheet. The duplicate
|
|
246
|
+
* rows carry `duplicateOf` and real geometry and must survive.
|
|
247
|
+
*/
|
|
248
|
+
const updatedParts = allParts.map((p) => {
|
|
249
|
+
const slug = slugByOrdinal.get(p.ordinal);
|
|
250
|
+
return slug ? { ...p, mediaShortId: slug } : p;
|
|
251
|
+
});
|
|
252
|
+
await stickerSheetsRepository.update(sheet.id, { parts: updatedParts });
|
|
253
|
+
serverLogger.info("sticker-promote: sheet promoted to listings", {
|
|
254
|
+
sheetId: sheet.id,
|
|
255
|
+
parentId: parent.id,
|
|
256
|
+
children: children.length,
|
|
257
|
+
skippedDuplicates: allParts.length - unique.length,
|
|
258
|
+
});
|
|
259
|
+
return {
|
|
260
|
+
parentId: parent.id,
|
|
261
|
+
childIds: children.map((c) => c.id),
|
|
262
|
+
skippedDuplicates: allParts.length - unique.length,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface PromoteRunInput {
|
|
2
|
+
sheetId: string;
|
|
3
|
+
runId: string;
|
|
4
|
+
promotedBy: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PromoteRunResult {
|
|
7
|
+
sheetId: string;
|
|
8
|
+
runId: string;
|
|
9
|
+
/** How many shards will render full-resolution parts. */
|
|
10
|
+
shardCount: number;
|
|
11
|
+
partCount: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Accept a run and start the full-resolution render.
|
|
15
|
+
*
|
|
16
|
+
* 🛑 It refuses a run that did not SUCCEED. Promoting a failed or still-running
|
|
17
|
+
* run would copy a partial `parts[]` onto the sheet and set `activeRunId` to
|
|
18
|
+
* it — the sheet would then confidently show an incomplete result, with the
|
|
19
|
+
* run's own status the only contradiction and nothing surfacing it.
|
|
20
|
+
*/
|
|
21
|
+
export declare function promoteStickerTraceRun(input: PromoteRunInput): Promise<PromoteRunResult>;
|
|
22
|
+
/** Whether this run is already the sheet's accepted result. */
|
|
23
|
+
export declare function isRunPromoted(sheetId: string, runId: string): Promise<boolean>;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: An exploratory run produces vector geometry and ~20 KB review
|
|
3
|
+
* thumbnails — about 1 MB. Full-resolution parts and the print exports
|
|
4
|
+
* cost roughly 500 MB a sheet, which is the difference between ~52 sheets
|
|
5
|
+
* in 5 GB and about 8. So they are rendered ONCE, for the run the operator
|
|
6
|
+
* actually chose, and this is that moment.
|
|
7
|
+
* WHAT: Accept a run as the sheet's current result, and fan out a full-
|
|
8
|
+
* resolution render of its parts.
|
|
9
|
+
*
|
|
10
|
+
* 🛑 `promoteRun` and `markPromoted` have existed since P4 with ZERO callers.
|
|
11
|
+
* This is their first one. Anything that looked like it already worked —
|
|
12
|
+
* `isPromoted` in the run list, `promotedPartCount` in the adapter — was
|
|
13
|
+
* reading fields nothing has ever written.
|
|
14
|
+
*
|
|
15
|
+
* 🛑 TWO DIFFERENT THINGS ARE CALLED "PROMOTE" IN THIS FEATURE AND THEY MUST
|
|
16
|
+
* NOT BE CONFLATED:
|
|
17
|
+
* - THIS one promotes a RUN onto its SHEET: the sheet now shows that run's
|
|
18
|
+
* parts, and full-res renders are produced.
|
|
19
|
+
* - Part Two's `promoteStickerSheetToListings` promotes a SHEET into
|
|
20
|
+
* marketplace PRODUCTS.
|
|
21
|
+
* The second depends on the first, because `SheetPart.assetPath` does not
|
|
22
|
+
* exist until a run has been promoted here.
|
|
23
|
+
*
|
|
24
|
+
* EXPORTS: PromoteRunInput, PromoteRunResult, promoteStickerTraceRun
|
|
25
|
+
*
|
|
26
|
+
* @tag domain:sticker-trace
|
|
27
|
+
* @tag layer:server
|
|
28
|
+
* @tag pattern:none
|
|
29
|
+
* @tag access:server
|
|
30
|
+
* @tag consumers:api/admin/sticker-sheets
|
|
31
|
+
* @tag sideEffects:firestore,rtdb
|
|
32
|
+
*/
|
|
33
|
+
import { ValidationError } from "../../../../errors/validation-error.js";
|
|
34
|
+
import { stickerSheetsRepository } from "../../../../features/sticker-trace/repository/sticker-sheets.repository.js";
|
|
35
|
+
import { stickerTraceRunsRepository } from "../../../../features/sticker-trace/repository/sticker-trace-runs.repository.js";
|
|
36
|
+
import { TraceRunStatusValues } from "../../../../features/sticker-trace/schemas/firestore.js";
|
|
37
|
+
import { serverLogger } from "../../../../monitoring/index.js";
|
|
38
|
+
import { createShardTasks, planShards } from "./fanout.js";
|
|
39
|
+
import { emitProgress } from "./progress.js";
|
|
40
|
+
import { readRunGeometry } from "./storage.js";
|
|
41
|
+
/**
|
|
42
|
+
* Promote fans out no wider than the trace did.
|
|
43
|
+
*
|
|
44
|
+
* A full-resolution part is a decode, a rasterise and a PNG encode at native
|
|
45
|
+
* size, so the shard budget is the same 1 GiB / 300 s. More shards than
|
|
46
|
+
* `maxInstances` (8) queue rather than run, and each one is a Firestore write
|
|
47
|
+
* plus an invocation.
|
|
48
|
+
*/
|
|
49
|
+
const MAX_PROMOTE_SHARDS = 8;
|
|
50
|
+
/**
|
|
51
|
+
* Accept a run and start the full-resolution render.
|
|
52
|
+
*
|
|
53
|
+
* 🛑 It refuses a run that did not SUCCEED. Promoting a failed or still-running
|
|
54
|
+
* run would copy a partial `parts[]` onto the sheet and set `activeRunId` to
|
|
55
|
+
* it — the sheet would then confidently show an incomplete result, with the
|
|
56
|
+
* run's own status the only contradiction and nothing surfacing it.
|
|
57
|
+
*/
|
|
58
|
+
export async function promoteStickerTraceRun(input) {
|
|
59
|
+
const [sheet, run] = await Promise.all([
|
|
60
|
+
stickerSheetsRepository.findByIdOrFail(input.sheetId),
|
|
61
|
+
stickerTraceRunsRepository.findByIdOrFail(input.runId),
|
|
62
|
+
]);
|
|
63
|
+
/*
|
|
64
|
+
* The run must belong to THIS sheet. Both ids are caller-supplied, so this is
|
|
65
|
+
* the only place the pairing can be checked — without it, promoting run X of
|
|
66
|
+
* sheet A onto sheet B would copy A's parts onto B and point B's
|
|
67
|
+
* `activeRunId` at a run that is not its own.
|
|
68
|
+
*/
|
|
69
|
+
if (run.sheetId !== input.sheetId) {
|
|
70
|
+
throw new ValidationError("That run belongs to a different sheet.", {
|
|
71
|
+
runId: "Run and sheet do not match.",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (run.status !== TraceRunStatusValues.SUCCEEDED) {
|
|
75
|
+
throw new ValidationError(`Only a successful run can be promoted — this one is ${run.status}.`, { runId: "Re-run it, or promote a different attempt." });
|
|
76
|
+
}
|
|
77
|
+
/*
|
|
78
|
+
* 🛑 The parts come from `geometry.json`, NOT from the run document — the run
|
|
79
|
+
* carries only `partCount`. That is deliberate: sixty Bézier outlines would
|
|
80
|
+
* approach Firestore's 1 MiB document limit, which is why the geometry is an
|
|
81
|
+
* artifact in the first place.
|
|
82
|
+
*/
|
|
83
|
+
const geometry = await readRunGeometry(input.runId, input.sheetId);
|
|
84
|
+
/*
|
|
85
|
+
* Millimetres only when the scan's dpi can be trusted.
|
|
86
|
+
*
|
|
87
|
+
* The geometry is in WORKING raster pixels while `dpi` describes the
|
|
88
|
+
* ORIGINAL, so the two are bridged by the downscale factor. Skipping that
|
|
89
|
+
* bridge is the subtle version of the same error the commit panel nearly
|
|
90
|
+
* shipped: every figure would be wrong by exactly the downscale ratio, and
|
|
91
|
+
* every one of them would look plausible.
|
|
92
|
+
*/
|
|
93
|
+
const workingToOriginal = sheet.widthPx > 0 && geometry.workingSize.width > 0
|
|
94
|
+
? sheet.widthPx / geometry.workingSize.width
|
|
95
|
+
: null;
|
|
96
|
+
const pxPerMm = sheet.dpi && sheet.dpi > 0 && workingToOriginal !== null
|
|
97
|
+
? (sheet.dpi / 25.4) / workingToOriginal
|
|
98
|
+
: null;
|
|
99
|
+
/*
|
|
100
|
+
* 🛑 `groupIndex` is 0 for every part, because geometry.json does not carry a
|
|
101
|
+
* per-part cluster assignment. On a single-sheet scan that is simply correct.
|
|
102
|
+
* On a multi-sheet scan it is NOT, and it is warned about rather than quietly
|
|
103
|
+
* written — a wrong group index renders every part under one tab, which looks
|
|
104
|
+
* like a tidy result instead of a lost distinction.
|
|
105
|
+
*/
|
|
106
|
+
if ((run.groupCount ?? 1) > 1) {
|
|
107
|
+
serverLogger.warn("Promoting a multi-sheet run; parts carry groupIndex 0", {
|
|
108
|
+
runId: input.runId,
|
|
109
|
+
sheetId: input.sheetId,
|
|
110
|
+
groupCount: run.groupCount,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const parts = geometry.parts.map((g) => {
|
|
114
|
+
const bboxMm = pxPerMm
|
|
115
|
+
? {
|
|
116
|
+
x: g.bbox.x / pxPerMm,
|
|
117
|
+
y: g.bbox.y / pxPerMm,
|
|
118
|
+
width: g.bbox.width / pxPerMm,
|
|
119
|
+
height: g.bbox.height / pxPerMm,
|
|
120
|
+
}
|
|
121
|
+
: null;
|
|
122
|
+
return {
|
|
123
|
+
ordinal: g.ordinal,
|
|
124
|
+
// The schema's own default: the ordinal, renameable by an admin later.
|
|
125
|
+
name: String(g.ordinal),
|
|
126
|
+
groupIndex: 0,
|
|
127
|
+
bboxPx: g.bbox,
|
|
128
|
+
bboxMm,
|
|
129
|
+
// Derived from the same measurement, so it is withheld on the same terms.
|
|
130
|
+
areaMm2: bboxMm ? Math.round(bboxMm.width * bboxMm.height * 100) / 100 : null,
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
if (parts.length === 0) {
|
|
134
|
+
throw new ValidationError("That run produced no parts, so there is nothing to promote.", { runId: "Tune the parameters and try another attempt." });
|
|
135
|
+
}
|
|
136
|
+
/*
|
|
137
|
+
* Sheet first, fan-out second.
|
|
138
|
+
*
|
|
139
|
+
* The sheet's `parts[]` and geometry are what every review surface reads, and
|
|
140
|
+
* they are complete the moment the run succeeded — the fan-out only adds
|
|
141
|
+
* full-resolution PNGs. Promoting the document first means an operator sees
|
|
142
|
+
* the accepted result immediately, and a fan-out that fails leaves a sheet
|
|
143
|
+
* that is correct but missing downloads, rather than a run marked accepted on
|
|
144
|
+
* a sheet still showing the previous one.
|
|
145
|
+
*/
|
|
146
|
+
await stickerSheetsRepository.promoteRun(input.sheetId, input.runId, {
|
|
147
|
+
parts,
|
|
148
|
+
groupCount: run.groupCount ?? 1,
|
|
149
|
+
artifacts: run.artifacts ?? {},
|
|
150
|
+
});
|
|
151
|
+
const ordinals = parts.map((p) => p.ordinal);
|
|
152
|
+
const shards = planShards(ordinals, MAX_PROMOTE_SHARDS);
|
|
153
|
+
/*
|
|
154
|
+
* 🛑 `mode: "full"` is what makes these DIFFERENT task documents from the
|
|
155
|
+
* trace's. `shardTaskId` keys on the mode precisely so this does not `set()`
|
|
156
|
+
* over `{runId}__part__{i}` — which would be an update, would not fire
|
|
157
|
+
* `documentCreated`, and would leave the promote silently doing nothing.
|
|
158
|
+
*/
|
|
159
|
+
const shardCount = await createShardTasks({
|
|
160
|
+
runId: input.runId,
|
|
161
|
+
sheetId: input.sheetId,
|
|
162
|
+
mode: "full",
|
|
163
|
+
shards,
|
|
164
|
+
});
|
|
165
|
+
/*
|
|
166
|
+
* Best-effort, like every other progress write. The channel is the live bar;
|
|
167
|
+
* the durable record is the run document, which `markPromoted` writes when
|
|
168
|
+
* the finalizer completes. A failed ping must never fail a promotion that
|
|
169
|
+
* has already written Firestore.
|
|
170
|
+
*/
|
|
171
|
+
await emitProgress({
|
|
172
|
+
runId: input.runId,
|
|
173
|
+
stage: "parts",
|
|
174
|
+
pct: 0,
|
|
175
|
+
partsDone: 0,
|
|
176
|
+
partsTotal: parts.length,
|
|
177
|
+
shardsDone: 0,
|
|
178
|
+
shardsTotal: shardCount,
|
|
179
|
+
message: `Rendering ${parts.length} part(s) at full resolution`,
|
|
180
|
+
level: "info",
|
|
181
|
+
});
|
|
182
|
+
return {
|
|
183
|
+
sheetId: input.sheetId,
|
|
184
|
+
runId: input.runId,
|
|
185
|
+
shardCount,
|
|
186
|
+
partCount: parts.length,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/** Whether this run is already the sheet's accepted result. */
|
|
190
|
+
export async function isRunPromoted(sheetId, runId) {
|
|
191
|
+
const sheet = await stickerSheetsRepository.findById(sheetId);
|
|
192
|
+
return sheet?.activeRunId === runId;
|
|
193
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { StickerTraceTaskDocument } from "../../../../features/sticker-trace/schemas/firestore";
|
|
2
|
+
import type { ImageCodec } from "../../../shared/features/sticker-trace/codec";
|
|
3
|
+
import type { CutPath, Rect } from "../../../shared/features/sticker-trace/types";
|
|
4
|
+
export interface ShardDeps {
|
|
5
|
+
codec: ImageCodec;
|
|
6
|
+
readScan: (assetPath: string) => Promise<Uint8Array>;
|
|
7
|
+
readGeometry: (runId: string, sheetId: string) => Promise<{
|
|
8
|
+
workingSize: Rect;
|
|
9
|
+
parts: {
|
|
10
|
+
ordinal: number;
|
|
11
|
+
bbox: Rect;
|
|
12
|
+
path: CutPath;
|
|
13
|
+
}[];
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Rasterise one part's path into an alpha mask covering `bbox`.
|
|
17
|
+
*
|
|
18
|
+
* 🛑 Takes the PATH, not an ordinal. An ordinal carries no geometry, so a
|
|
19
|
+
* signature keyed on it could only be implemented by re-reading
|
|
20
|
+
* geometry.json for every part — sixty extra downloads per shard for data the
|
|
21
|
+
* caller already holds. And no `scale`: `bbox` is already in
|
|
22
|
+
* full-resolution pixels by the time this is called.
|
|
23
|
+
*/
|
|
24
|
+
rasterise: (path: CutPath, bbox: Rect) => Promise<Uint8Array>;
|
|
25
|
+
writeArtifact: (input: {
|
|
26
|
+
sheetId: string;
|
|
27
|
+
runId: string;
|
|
28
|
+
name: string;
|
|
29
|
+
contentType: string;
|
|
30
|
+
body: Uint8Array;
|
|
31
|
+
}) => Promise<{
|
|
32
|
+
assetPath: string;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Render this shard's parts, then report done.
|
|
37
|
+
*
|
|
38
|
+
* 🛑 `mode` decides resolution, and that is the single decision keeping this
|
|
39
|
+
* feature inside the Storage allowance. `thumb` renders review thumbnails into
|
|
40
|
+
* ONE sprite atlas; `full` renders full-resolution parts and only runs when a
|
|
41
|
+
* human promotes a run. Rendering full-res on every run costs ~600 MB per
|
|
42
|
+
* sheet across a tuning session against ~95 MB — roughly 8 sheets inside 5 GB
|
|
43
|
+
* instead of 52.
|
|
44
|
+
*
|
|
45
|
+
* 🛑 The shard reports done even when a part THROWS. Leaving the counter short
|
|
46
|
+
* means the finalizer is never elected and the run sits RUNNING forever — a
|
|
47
|
+
* stuck run is worse than a run that completes reporting a bad part, because
|
|
48
|
+
* nothing sweeps it and the RTDB channel prunes within the hour.
|
|
49
|
+
*/
|
|
50
|
+
export declare function runShard(task: StickerTraceTaskDocument, deps: ShardDeps): Promise<void>;
|