@mohasinac/appkit 2.6.2 → 2.6.4
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/_internal/server/features/account/data.js +2 -2
- package/dist/_internal/server/features/bundles/data.d.ts +26 -6
- package/dist/_internal/server/features/bundles/data.js +41 -6
- package/dist/_internal/server/features/bundles/index.d.ts +3 -2
- package/dist/_internal/server/features/bundles/index.js +4 -2
- package/dist/_internal/server/features/bundles/metadata.d.ts +20 -0
- package/dist/_internal/server/features/bundles/metadata.js +46 -0
- package/dist/_internal/server/features/bundles/og.d.ts +38 -0
- package/dist/_internal/server/features/bundles/og.js +122 -0
- package/dist/_internal/server/features/checkout/actions.js +192 -133
- package/dist/_internal/server/features/checkout/bundle-expansion.d.ts +57 -0
- package/dist/_internal/server/features/checkout/bundle-expansion.js +70 -0
- package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -15
- package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -21
- package/dist/_internal/server/features/media/contextGuards.js +15 -1
- package/dist/_internal/server/features/payouts/actions.d.ts +19 -0
- package/dist/_internal/server/features/payouts/actions.js +38 -0
- package/dist/_internal/server/features/products/data.js +1 -2
- package/dist/_internal/server/features/raffle/actions.d.ts +11 -0
- package/dist/_internal/server/features/raffle/actions.js +31 -0
- package/dist/_internal/server/features/refunds/actions.d.ts +31 -0
- package/dist/_internal/server/features/refunds/actions.js +77 -0
- package/dist/_internal/server/jobs/core/adminAnalytics.d.ts +28 -0
- package/dist/_internal/server/jobs/core/adminAnalytics.js +98 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +19 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +81 -0
- package/dist/_internal/server/jobs/core/auctionSettlement.d.ts +2 -0
- package/dist/_internal/server/jobs/core/auctionSettlement.js +70 -0
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.d.ts +2 -0
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +109 -0
- package/dist/_internal/server/jobs/core/bundleStockSync.d.ts +10 -0
- package/dist/_internal/server/jobs/core/bundleStockSync.js +71 -0
- package/dist/_internal/server/jobs/core/cartPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/core/cartPrune.js +13 -0
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.d.ts +2 -0
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +45 -0
- package/dist/_internal/server/jobs/core/countersReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/core/countersReconcile.js +107 -0
- package/dist/_internal/server/jobs/core/couponExpiry.d.ts +2 -0
- package/dist/_internal/server/jobs/core/couponExpiry.js +13 -0
- package/dist/_internal/server/jobs/core/dailyDataCleanup.d.ts +2 -0
- package/dist/_internal/server/jobs/core/dailyDataCleanup.js +20 -0
- package/dist/_internal/server/jobs/core/index.d.ts +44 -0
- package/dist/_internal/server/jobs/core/index.js +47 -0
- package/dist/_internal/server/jobs/core/listingProcessor.d.ts +30 -0
- package/dist/_internal/server/jobs/core/listingProcessor.js +138 -0
- package/dist/_internal/server/jobs/core/mediaTmpCleanup.d.ts +14 -0
- package/dist/_internal/server/jobs/core/mediaTmpCleanup.js +68 -0
- package/dist/_internal/server/jobs/core/notificationPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/core/notificationPrune.js +13 -0
- package/dist/_internal/server/jobs/core/offerExpiry.d.ts +2 -0
- package/dist/_internal/server/jobs/core/offerExpiry.js +50 -0
- package/dist/_internal/server/jobs/core/onBidPlaced.d.ts +15 -0
- package/dist/_internal/server/jobs/core/onBidPlaced.js +59 -0
- package/dist/_internal/server/jobs/core/onCategoryWrite.d.ts +14 -0
- package/dist/_internal/server/jobs/core/onCategoryWrite.js +134 -0
- package/dist/_internal/server/jobs/core/onOrderCreate.d.ts +18 -0
- package/dist/_internal/server/jobs/core/onOrderCreate.js +78 -0
- package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +19 -0
- package/dist/_internal/server/jobs/core/onOrderStatusChange.js +139 -0
- package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +23 -0
- package/dist/_internal/server/jobs/core/onProductStockChange.js +130 -0
- package/dist/_internal/server/jobs/core/onProductWrite.d.ts +12 -0
- package/dist/_internal/server/jobs/core/onProductWrite.js +94 -0
- package/dist/_internal/server/jobs/core/onReviewWrite.d.ts +7 -0
- package/dist/_internal/server/jobs/core/onReviewWrite.js +49 -0
- package/dist/_internal/server/jobs/core/onStoreWrite.d.ts +12 -0
- package/dist/_internal/server/jobs/core/onStoreWrite.js +7 -0
- package/dist/_internal/server/jobs/core/payoutBatch.d.ts +8 -0
- package/dist/_internal/server/jobs/core/payoutBatch.js +102 -0
- package/dist/_internal/server/jobs/core/pendingOrderTimeout.d.ts +2 -0
- package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +27 -0
- package/dist/_internal/server/jobs/core/positionsReconcile.d.ts +7 -0
- package/dist/_internal/server/jobs/core/positionsReconcile.js +87 -0
- package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +2 -0
- package/dist/_internal/server/jobs/core/prizeRevealClose.js +22 -0
- package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +2 -0
- package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +50 -0
- package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +2 -0
- package/dist/_internal/server/jobs/core/prizeRevealOpen.js +56 -0
- package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +2 -0
- package/dist/_internal/server/jobs/core/prizeRevealReminder.js +38 -0
- package/dist/_internal/server/jobs/core/productStatsSync.d.ts +8 -0
- package/dist/_internal/server/jobs/core/productStatsSync.js +36 -0
- package/dist/_internal/server/jobs/core/promotions.d.ts +12 -0
- package/dist/_internal/server/jobs/core/promotions.js +43 -0
- package/dist/_internal/server/jobs/core/storeAnalytics.d.ts +30 -0
- package/dist/_internal/server/jobs/core/storeAnalytics.js +109 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +19 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +86 -0
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.d.ts +6 -0
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +85 -0
- package/dist/_internal/server/jobs/handlers/adminAnalytics.d.ts +2 -26
- package/dist/_internal/server/jobs/handlers/adminAnalytics.js +2 -98
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +1 -22
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +2 -86
- package/dist/_internal/server/jobs/handlers/auctionSettlement.js +2 -70
- package/dist/_internal/server/jobs/handlers/autoPayoutEligibility.js +2 -110
- package/dist/_internal/server/jobs/handlers/bundleStockSync.d.ts +0 -16
- package/dist/_internal/server/jobs/handlers/bundleStockSync.js +2 -80
- package/dist/_internal/server/jobs/handlers/cartPrune.js +2 -13
- package/dist/_internal/server/jobs/handlers/cleanupRtdbEvents.js +2 -45
- package/dist/_internal/server/jobs/handlers/countersReconcile.js +2 -109
- package/dist/_internal/server/jobs/handlers/couponExpiry.js +2 -13
- package/dist/_internal/server/jobs/handlers/dailyDataCleanup.js +2 -20
- package/dist/_internal/server/jobs/handlers/listingProcessor.d.ts +3 -28
- package/dist/_internal/server/jobs/handlers/listingProcessor.js +3 -138
- package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.d.ts +0 -12
- package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.js +2 -69
- package/dist/_internal/server/jobs/handlers/notificationPrune.js +2 -13
- package/dist/_internal/server/jobs/handlers/offerExpiry.js +2 -50
- package/dist/_internal/server/jobs/handlers/onBidPlaced.d.ts +1 -10
- package/dist/_internal/server/jobs/handlers/onBidPlaced.js +2 -56
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.d.ts +1 -8
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +6 -134
- package/dist/_internal/server/jobs/handlers/onOrderCreate.d.ts +1 -12
- package/dist/_internal/server/jobs/handlers/onOrderCreate.js +2 -76
- package/dist/_internal/server/jobs/handlers/onOrderStatusChange.d.ts +1 -12
- package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +2 -139
- package/dist/_internal/server/jobs/handlers/onProductStockChange.d.ts +0 -13
- package/dist/_internal/server/jobs/handlers/onProductStockChange.js +7 -134
- package/dist/_internal/server/jobs/handlers/onProductWrite.d.ts +1 -6
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +6 -106
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +2 -49
- package/dist/_internal/server/jobs/handlers/onStoreWrite.d.ts +1 -8
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +7 -8
- package/dist/_internal/server/jobs/handlers/payoutBatch.d.ts +0 -9
- package/dist/_internal/server/jobs/handlers/payoutBatch.js +2 -104
- package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.d.ts +0 -6
- package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.js +2 -33
- package/dist/_internal/server/jobs/handlers/positionsReconcile.d.ts +0 -5
- package/dist/_internal/server/jobs/handlers/positionsReconcile.js +2 -87
- package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -7
- package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +2 -29
- package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -8
- package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +2 -58
- package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -8
- package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +2 -65
- package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -7
- package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +2 -45
- package/dist/_internal/server/jobs/handlers/productStatsSync.d.ts +0 -6
- package/dist/_internal/server/jobs/handlers/productStatsSync.js +2 -36
- package/dist/_internal/server/jobs/handlers/promotions.d.ts +2 -10
- package/dist/_internal/server/jobs/handlers/promotions.js +2 -43
- package/dist/_internal/server/jobs/handlers/storeAnalytics.d.ts +2 -28
- package/dist/_internal/server/jobs/handlers/storeAnalytics.js +2 -109
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +1 -28
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +2 -94
- package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.d.ts +0 -6
- package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +2 -87
- package/dist/_internal/server/jobs/index.d.ts +1 -0
- package/dist/_internal/server/jobs/index.js +1 -0
- package/dist/_internal/server/jobs/runtime/adapters/firebase.js +21 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +84 -0
- package/dist/_internal/shared/actions/action-registry.js +160 -0
- package/dist/_internal/shared/checkout/rules/_defaults.d.ts +3 -0
- package/dist/_internal/shared/checkout/rules/_defaults.js +22 -0
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +19 -0
- package/dist/_internal/shared/checkout/rules/_limits.js +19 -0
- package/dist/_internal/shared/checkout/rules/_registry.d.ts +44 -0
- package/dist/_internal/shared/checkout/rules/_registry.js +87 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.js +10 -0
- package/dist/_internal/shared/checkout/rules/bundle.rule.d.ts +11 -0
- package/dist/_internal/shared/checkout/rules/bundle.rule.js +6 -0
- package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -0
- package/dist/_internal/shared/checkout/rules/classified.rule.js +9 -0
- package/dist/_internal/shared/checkout/rules/digital-code.rule.d.ts +8 -0
- package/dist/_internal/shared/checkout/rules/digital-code.rule.js +6 -0
- package/dist/_internal/shared/checkout/rules/index.d.ts +12 -0
- package/dist/_internal/shared/checkout/rules/index.js +12 -0
- package/dist/_internal/shared/checkout/rules/live.rule.d.ts +10 -0
- package/dist/_internal/shared/checkout/rules/live.rule.js +6 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.js +9 -0
- package/dist/_internal/shared/checkout/rules/preorder.rule.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/preorder.rule.js +28 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +65 -0
- package/dist/_internal/shared/checkout/rules/standard.rule.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/standard.rule.js +5 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +125 -0
- package/dist/_internal/shared/checkout/rules/types.js +13 -0
- package/dist/_internal/shared/features/cart/schema.d.ts +6 -6
- package/dist/_internal/shared/features/categories/bundle-copy.d.ts +123 -0
- package/dist/_internal/shared/features/categories/bundle-copy.js +134 -0
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +318 -0
- package/dist/_internal/shared/features/categories/bundle-schemas.js +55 -0
- package/dist/_internal/shared/features/orders/refund-copy.d.ts +36 -0
- package/dist/_internal/shared/features/orders/refund-copy.js +40 -0
- package/dist/_internal/shared/features/orders/schema.d.ts +4 -4
- package/dist/_internal/shared/features/products/schema.d.ts +8 -8
- package/dist/_internal/shared/listing-types/_registry.d.ts +27 -0
- package/dist/_internal/shared/listing-types/_registry.js +8 -0
- package/dist/_internal/shared/listing-types/action-tracker.d.ts +41 -0
- package/dist/_internal/shared/listing-types/action-tracker.js +70 -0
- package/dist/_internal/shared/listing-types/capabilities.js +25 -0
- package/dist/_internal/shared/listing-types/cart-shipping.d.ts +37 -0
- package/dist/_internal/shared/listing-types/cart-shipping.js +46 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +7 -0
- package/dist/_internal/shared/listing-types/classified/config.js +8 -0
- package/dist/_internal/shared/listing-types/classified/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/ctas.js +3 -0
- package/dist/_internal/shared/listing-types/classified/og.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/og.js +1 -0
- package/dist/_internal/shared/listing-types/classified/schema.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/schema.js +1 -0
- package/dist/_internal/shared/listing-types/classified/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +7 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +8 -0
- package/dist/_internal/shared/listing-types/digital-code/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/ctas.js +3 -0
- package/dist/_internal/shared/listing-types/digital-code/og.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/og.js +1 -0
- package/dist/_internal/shared/listing-types/digital-code/schema.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/schema.js +1 -0
- package/dist/_internal/shared/listing-types/digital-code/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +34 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +45 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +7 -0
- package/dist/_internal/shared/listing-types/live/config.js +8 -0
- package/dist/_internal/shared/listing-types/live/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/ctas.js +3 -0
- package/dist/_internal/shared/listing-types/live/og.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/og.js +1 -0
- package/dist/_internal/shared/listing-types/live/schema.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/schema.js +1 -0
- package/dist/_internal/shared/listing-types/live/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/seed-factory.js +1 -0
- package/dist/_internal/shared/media/limits.js +8 -0
- package/dist/client.d.ts +6 -1
- package/dist/client.js +14 -1
- package/dist/configs/next.js +7 -0
- package/dist/constants/api-endpoints.d.ts +6 -0
- package/dist/constants/api-endpoints.js +4 -0
- package/dist/core/hooks/useSyncManager.js +13 -1
- package/dist/core/unit-of-work.d.ts +1 -1
- package/dist/core/unit-of-work.js +2 -2
- package/dist/features/account/actions/address-actions.d.ts +1 -1
- package/dist/features/account/actions/address-actions.js +15 -7
- package/dist/features/account/schemas/firestore.d.ts +8 -43
- package/dist/features/account/schemas/firestore.js +8 -54
- package/dist/features/account/schemas/index.d.ts +6 -6
- package/dist/features/account/server.d.ts +1 -1
- package/dist/features/account/server.js +3 -1
- package/dist/features/addresses/index.d.ts +2 -0
- package/dist/features/addresses/index.js +2 -0
- package/dist/features/addresses/repository/addresses.repository.d.ts +29 -0
- package/dist/features/addresses/repository/addresses.repository.js +157 -0
- package/dist/features/addresses/schemas/firestore.d.ts +53 -0
- package/dist/features/addresses/schemas/firestore.js +68 -0
- package/dist/features/{bundles → addresses}/schemas/index.d.ts +0 -1
- package/dist/features/{bundles → addresses}/schemas/index.js +0 -1
- package/dist/features/addresses/server.d.ts +2 -0
- package/dist/features/addresses/server.js +2 -0
- package/dist/features/admin/components/AdminAllEventEntriesView.js +4 -3
- package/dist/features/admin/components/AdminBidsView.js +4 -3
- package/dist/features/admin/components/AdminBlogView.js +8 -3
- package/dist/features/admin/components/AdminBundleEditorView.d.ts +9 -0
- package/dist/features/admin/components/AdminBundleEditorView.js +209 -0
- package/dist/features/admin/components/AdminBundlesView.d.ts +9 -0
- package/dist/features/admin/components/AdminBundlesView.js +59 -0
- package/dist/features/admin/components/AdminCartsView.js +13 -3
- package/dist/features/admin/components/AdminContactView.js +4 -3
- package/dist/features/admin/components/AdminCouponsView.js +32 -13
- package/dist/features/admin/components/AdminNewsletterView.js +4 -3
- package/dist/features/admin/components/AdminOrdersView.js +15 -7
- package/dist/features/admin/components/AdminPayoutsView.js +4 -3
- package/dist/features/admin/components/AdminProductsView.js +6 -5
- package/dist/features/admin/components/AdminReviewsView.js +5 -4
- package/dist/features/admin/components/AdminStoresView.js +4 -3
- package/dist/features/admin/components/AdminUsersView.js +15 -5
- package/dist/features/admin/components/AdminWishlistsView.js +10 -1
- package/dist/features/admin/components/DataTable.d.ts +5 -1
- package/dist/features/admin/components/DataTable.js +24 -20
- package/dist/features/admin/components/index.d.ts +4 -0
- package/dist/features/admin/components/index.js +3 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +401 -0
- package/dist/features/admin/constants/filter-tabs.js +200 -0
- package/dist/features/admin/hooks/useAdminListingData.d.ts +1 -0
- package/dist/features/admin/hooks/useAdminListingData.js +1 -0
- package/dist/features/admin/schemas/firestore.d.ts +15 -0
- package/dist/features/admin/schemas/firestore.js +18 -0
- package/dist/features/admin/types/product.types.d.ts +2 -2
- package/dist/features/auctions/components/AuctionCard.d.ts +4 -1
- package/dist/features/auctions/components/AuctionCard.js +5 -3
- package/dist/features/auctions/components/AuctionDetailPageView.js +1 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +2 -2
- package/dist/features/auctions/components/PlaceBidFormClient.js +12 -2
- package/dist/features/auctions/schemas/index.d.ts +2 -2
- package/dist/features/auth/index.d.ts +1 -0
- package/dist/features/auth/index.js +1 -0
- package/dist/features/auth/role-predicates.d.ts +16 -0
- package/dist/features/auth/role-predicates.js +15 -0
- package/dist/features/blog/components/BlogFeaturedCard.d.ts +4 -1
- package/dist/features/blog/components/BlogFeaturedCard.js +5 -3
- package/dist/features/cart/actions/cart-actions.d.ts +1 -0
- package/dist/features/cart/actions/cart-actions.js +16 -0
- package/dist/features/cart/components/CartView.d.ts +19 -1
- package/dist/features/cart/components/CartView.js +2 -2
- package/dist/features/cart/components/ShippingPicker.d.ts +13 -0
- package/dist/features/cart/components/ShippingPicker.js +48 -0
- package/dist/features/cart/components/index.d.ts +3 -1
- package/dist/features/cart/components/index.js +1 -0
- package/dist/features/cart/hooks/useCartCount.js +7 -1
- package/dist/features/cart/repository/cart.repository.d.ts +1 -0
- package/dist/features/cart/repository/cart.repository.js +35 -0
- package/dist/features/cart/schemas/firestore.d.ts +27 -2
- package/dist/features/categories/components/BundleAddToCartCta.d.ts +16 -0
- package/dist/features/categories/components/BundleAddToCartCta.js +54 -0
- package/dist/features/categories/components/BundleBuyNowCta.d.ts +8 -0
- package/dist/features/categories/components/BundleBuyNowCta.js +37 -0
- package/dist/features/categories/components/BundleDetailView.d.ts +22 -0
- package/dist/features/categories/components/BundleDetailView.js +31 -0
- package/dist/features/categories/components/BundleDynamicRuleEditor.d.ts +18 -0
- package/dist/features/categories/components/BundleDynamicRuleEditor.js +60 -0
- package/dist/features/categories/components/BundleItemsPicker.d.ts +26 -0
- package/dist/features/categories/components/BundleItemsPicker.js +135 -0
- package/dist/features/categories/components/BundlesListView.d.ts +13 -0
- package/dist/features/categories/components/BundlesListView.js +27 -0
- package/dist/features/categories/components/index.d.ts +12 -0
- package/dist/features/categories/components/index.js +9 -0
- package/dist/features/checkout/actions/checkout-actions.js +10 -3
- package/dist/features/events/components/AdminEventEditorView.js +108 -2
- package/dist/features/events/components/AdminEventsView.js +16 -4
- package/dist/features/events/components/EventCard.d.ts +4 -1
- package/dist/features/events/components/EventCard.js +7 -3
- package/dist/features/events/components/EventRaffleWinnerView.d.ts +21 -0
- package/dist/features/events/components/EventRaffleWinnerView.js +18 -0
- package/dist/features/events/components/SpinWheelView.d.ts +27 -0
- package/dist/features/events/components/SpinWheelView.js +64 -0
- package/dist/features/events/components/index.d.ts +4 -0
- package/dist/features/events/components/index.js +2 -0
- package/dist/features/events/schemas/firestore.d.ts +27 -1
- package/dist/features/events/schemas/firestore.js +7 -0
- package/dist/features/events/types/index.d.ts +27 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +16 -0
- package/dist/features/homepage/components/FeaturedBundlesSection.js +24 -0
- package/dist/features/homepage/components/MarketplaceHomepageView.js +4 -1
- package/dist/features/homepage/components/WhatsAppCommunitySection.js +2 -2
- package/dist/features/homepage/lib/section-renderer.d.ts +2 -0
- package/dist/features/homepage/lib/section-renderer.js +5 -5
- package/dist/features/layout/NavbarLayout.d.ts +3 -1
- package/dist/features/layout/NavbarLayout.js +32 -3
- package/dist/features/layout/TitleBarLayout.d.ts +6 -3
- package/dist/features/layout/TitleBarLayout.js +22 -7
- package/dist/features/media/upload/MediaUploadField.d.ts +15 -1
- package/dist/features/media/upload/MediaUploadField.js +22 -1
- package/dist/features/orders/components/MarketplaceOrderCard.js +4 -2
- package/dist/features/orders/components/OrderSiblingPayments.d.ts +8 -0
- package/dist/features/orders/components/OrderSiblingPayments.js +16 -0
- package/dist/features/orders/components/RefundHistoryTable.d.ts +6 -0
- package/dist/features/orders/components/RefundHistoryTable.js +23 -0
- package/dist/features/orders/components/RefundRequestView.d.ts +8 -0
- package/dist/features/orders/components/RefundRequestView.js +42 -0
- package/dist/features/orders/components/index.d.ts +6 -0
- package/dist/features/orders/components/index.js +3 -0
- package/dist/features/orders/index.d.ts +1 -0
- package/dist/features/orders/index.js +2 -0
- package/dist/features/orders/repository/orders.repository.d.ts +20 -1
- package/dist/features/orders/repository/orders.repository.js +30 -1
- package/dist/features/orders/schemas/firestore.d.ts +63 -13
- package/dist/features/orders/schemas/firestore.js +5 -5
- package/dist/features/orders/schemas/index.d.ts +4 -4
- package/dist/features/orders/types/index.d.ts +12 -2
- package/dist/features/orders/utils/bundle-grouping.d.ts +48 -0
- package/dist/features/orders/utils/bundle-grouping.js +54 -0
- package/dist/features/orders/utils/order-splitter.d.ts +9 -10
- package/dist/features/orders/utils/order-splitter.js +24 -30
- package/dist/features/payments/repository/payout.repository.d.ts +17 -1
- package/dist/features/payments/repository/payout.repository.js +47 -0
- package/dist/features/payments/schemas/firestore.d.ts +26 -0
- package/dist/features/pre-orders/components/PreorderCard.d.ts +4 -1
- package/dist/features/pre-orders/components/PreorderCard.js +8 -6
- package/dist/features/products/actions/product-actions.d.ts +1 -1
- package/dist/features/products/actions/product-actions.js +1 -1
- package/dist/features/products/components/CompareOverlay.d.ts +2 -2
- package/dist/features/products/components/CompareOverlay.js +4 -4
- package/dist/features/products/components/InteractiveProductCard.js +7 -12
- package/dist/features/products/components/NonRefundableConsentModal.d.ts +1 -1
- package/dist/features/products/components/NonRefundableConsentModal.js +0 -10
- package/dist/features/products/components/ProductGrid.js +28 -12
- package/dist/features/products/components/ShowGroupSection.js +3 -3
- package/dist/features/products/components/SublistingCarouselSection.js +2 -2
- package/dist/features/products/components/index.d.ts +0 -4
- package/dist/features/products/components/index.js +5 -2
- package/dist/features/products/index.d.ts +1 -1
- package/dist/features/products/index.js +3 -1
- package/dist/features/products/repository/products.repository.js +4 -0
- package/dist/features/products/schemas/catalog-product.d.ts +70 -0
- package/dist/features/products/schemas/catalog-product.js +50 -0
- package/dist/features/products/schemas/firestore.d.ts +110 -2
- package/dist/features/products/schemas/firestore.js +30 -0
- package/dist/features/products/schemas/index.d.ts +8 -8
- package/dist/features/products/types/index.d.ts +1 -1
- package/dist/features/products/utils/listing-type.d.ts +9 -0
- package/dist/features/products/utils/listing-type.js +4 -0
- package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
- package/dist/features/promotions/actions/coupon-actions.js +1 -1
- package/dist/features/promotions/components/CouponCard.d.ts +28 -10
- package/dist/features/promotions/components/CouponCard.js +116 -14
- package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
- package/dist/features/promotions/repository/coupons.repository.d.ts +1 -1
- package/dist/features/reviews/schemas/index.d.ts +2 -2
- package/dist/features/search/schemas/index.d.ts +2 -2
- package/dist/features/search/types/index.d.ts +2 -2
- package/dist/features/seller/components/SellerAuctionsView.js +4 -5
- package/dist/features/seller/components/SellerBidsView.js +5 -13
- package/dist/features/seller/components/SellerCouponsView.js +31 -67
- package/dist/features/seller/components/SellerOffersView.js +4 -5
- package/dist/features/seller/components/SellerOrdersView.js +4 -5
- package/dist/features/seller/components/SellerPayoutsView.js +4 -5
- package/dist/features/seller/components/SellerProductsView.js +4 -8
- package/dist/features/seller/schemas/index.d.ts +2 -2
- package/dist/features/stores/actions/store-address-actions.d.ts +10 -6
- package/dist/features/stores/actions/store-address-actions.js +8 -7
- package/dist/features/stores/components/InteractiveStoreCard.js +3 -10
- package/dist/features/stores/components/StoreDetailLayoutView.js +20 -5
- package/dist/features/stores/schemas/firestore.d.ts +45 -38
- package/dist/features/stores/schemas/firestore.js +2 -49
- package/dist/features/stores/server.d.ts +0 -1
- package/dist/features/stores/server.js +2 -1
- package/dist/features/wishlist/hooks/useWishlistCount.d.ts +7 -9
- package/dist/features/wishlist/hooks/useWishlistCount.js +67 -86
- package/dist/features/wishlist/types/index.d.ts +1 -1
- package/dist/index.d.ts +50 -9
- package/dist/index.js +57 -11
- package/dist/next/routing/route-map.d.ts +6 -0
- package/dist/next/routing/route-map.js +4 -0
- package/dist/providers/db-firebase/admin-app-lite.js +21 -0
- package/dist/providers/db-firebase/admin.d.ts +6 -2
- package/dist/providers/db-firebase/admin.js +23 -0
- package/dist/repositories/index.d.ts +1 -2
- package/dist/repositories/index.js +5 -2
- package/dist/security/authorization.d.ts +2 -1
- package/dist/security/authorization.js +3 -2
- package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +77 -2
- package/dist/seed/cart-seed-data.d.ts +10 -10
- package/dist/seed/cart-seed-data.js +15 -15
- package/dist/seed/events-seed-data.js +77 -0
- package/dist/seed/manifest.js +16 -8
- package/dist/seed/orders-seed-data.js +41 -2
- package/dist/seed/payouts-seed-data.js +18 -2
- package/dist/seed/stores-seed-data.js +55 -0
- package/dist/server-entry.d.ts +1 -0
- package/dist/server-entry.js +2 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.js +8 -0
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/FilterChipGroup.d.ts +39 -0
- package/dist/ui/components/FilterChipGroup.js +15 -0
- package/dist/ui/components/HorizontalScroller.js +32 -7
- package/dist/ui/components/HorizontalScroller.style.css +6 -0
- package/dist/ui/components/SiteLogo.js +1 -1
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +2 -0
- package/dist/utils/id-generators.d.ts +11 -0
- package/dist/utils/id-generators.js +16 -0
- package/package.json +1 -1
- package/dist/_internal/shared/features/bundles/config.d.ts +0 -6
- package/dist/_internal/shared/features/bundles/config.js +0 -6
- package/dist/_internal/shared/schema-versions.d.ts +0 -76
- package/dist/_internal/shared/schema-versions.js +0 -82
- package/dist/features/account/migrations.d.ts +0 -2
- package/dist/features/account/migrations.js +0 -10
- package/dist/features/admin/migrations.d.ts +0 -2
- package/dist/features/admin/migrations.js +0 -10
- package/dist/features/auctions/migrations.d.ts +0 -2
- package/dist/features/auctions/migrations.js +0 -10
- package/dist/features/auth/migrations.d.ts +0 -2
- package/dist/features/auth/migrations.js +0 -10
- package/dist/features/blog/migrations.d.ts +0 -2
- package/dist/features/blog/migrations.js +0 -10
- package/dist/features/brands/actions/brand-actions.d.ts +0 -2
- package/dist/features/brands/actions/brand-actions.js +0 -5
- package/dist/features/brands/index.d.ts +0 -3
- package/dist/features/brands/index.js +0 -3
- package/dist/features/brands/migrations.d.ts +0 -2
- package/dist/features/brands/migrations.js +0 -10
- package/dist/features/brands/repository/brands.repository.d.ts +0 -13
- package/dist/features/brands/repository/brands.repository.js +0 -60
- package/dist/features/brands/schemas/index.d.ts +0 -33
- package/dist/features/brands/schemas/index.js +0 -15
- package/dist/features/brands/server.d.ts +0 -7
- package/dist/features/brands/server.js +0 -7
- package/dist/features/bundles/components/AdminBundleEditorView.d.ts +0 -8
- package/dist/features/bundles/components/AdminBundleEditorView.js +0 -7
- package/dist/features/bundles/components/BundleDetailPageView.d.ts +0 -9
- package/dist/features/bundles/components/BundleDetailPageView.js +0 -45
- package/dist/features/bundles/components/BundleForm.d.ts +0 -12
- package/dist/features/bundles/components/BundleForm.js +0 -126
- package/dist/features/bundles/components/BundleItemsPicker.d.ts +0 -9
- package/dist/features/bundles/components/BundleItemsPicker.js +0 -77
- package/dist/features/bundles/components/BundlesByCategoryListing.d.ts +0 -6
- package/dist/features/bundles/components/BundlesByCategoryListing.js +0 -50
- package/dist/features/bundles/components/BundlesListingView.d.ts +0 -17
- package/dist/features/bundles/components/BundlesListingView.js +0 -50
- package/dist/features/bundles/components/FeaturedBundlesSection.d.ts +0 -5
- package/dist/features/bundles/components/FeaturedBundlesSection.js +0 -55
- package/dist/features/bundles/components/SellerBundleCreateView.d.ts +0 -8
- package/dist/features/bundles/components/SellerBundleCreateView.js +0 -7
- package/dist/features/bundles/components/SellerBundleEditView.d.ts +0 -9
- package/dist/features/bundles/components/SellerBundleEditView.js +0 -7
- package/dist/features/bundles/components/index.d.ts +0 -18
- package/dist/features/bundles/components/index.js +0 -9
- package/dist/features/bundles/constants/index.d.ts +0 -32
- package/dist/features/bundles/constants/index.js +0 -35
- package/dist/features/bundles/index.d.ts +0 -2
- package/dist/features/bundles/index.js +0 -2
- package/dist/features/bundles/migrations.d.ts +0 -2
- package/dist/features/bundles/migrations.js +0 -10
- package/dist/features/bundles/repository/bundles.repository.d.ts +0 -36
- package/dist/features/bundles/repository/bundles.repository.js +0 -148
- package/dist/features/bundles/repository/index.d.ts +0 -1
- package/dist/features/bundles/repository/index.js +0 -1
- package/dist/features/bundles/schemas/firestore.d.ts +0 -88
- package/dist/features/bundles/schemas/firestore.js +0 -29
- package/dist/features/bundles/schemas/zod.d.ts +0 -377
- package/dist/features/bundles/schemas/zod.js +0 -71
- package/dist/features/cart/migrations.d.ts +0 -2
- package/dist/features/cart/migrations.js +0 -10
- package/dist/features/categories/migrations.d.ts +0 -2
- package/dist/features/categories/migrations.js +0 -10
- package/dist/features/events/migrations.d.ts +0 -2
- package/dist/features/events/migrations.js +0 -10
- package/dist/features/faq/migrations.d.ts +0 -2
- package/dist/features/faq/migrations.js +0 -10
- package/dist/features/grouped/migrations.d.ts +0 -2
- package/dist/features/grouped/migrations.js +0 -10
- package/dist/features/history/migrations.d.ts +0 -2
- package/dist/features/history/migrations.js +0 -10
- package/dist/features/messages/migrations.d.ts +0 -2
- package/dist/features/messages/migrations.js +0 -10
- package/dist/features/orders/migrations.d.ts +0 -2
- package/dist/features/orders/migrations.js +0 -10
- package/dist/features/payments/migrations.d.ts +0 -2
- package/dist/features/payments/migrations.js +0 -10
- package/dist/features/products/migrations.d.ts +0 -2
- package/dist/features/products/migrations.js +0 -10
- package/dist/features/products/repository/sublisting-categories.repository.d.ts +0 -16
- package/dist/features/products/repository/sublisting-categories.repository.js +0 -126
- package/dist/features/products/schemas/sublisting-categories.d.ts +0 -45
- package/dist/features/products/schemas/sublisting-categories.js +0 -16
- package/dist/features/promotions/migrations.d.ts +0 -2
- package/dist/features/promotions/migrations.js +0 -10
- package/dist/features/reviews/migrations.d.ts +0 -2
- package/dist/features/reviews/migrations.js +0 -10
- package/dist/features/scams/migrations.d.ts +0 -2
- package/dist/features/scams/migrations.js +0 -10
- package/dist/features/seller/migrations.d.ts +0 -2
- package/dist/features/seller/migrations.js +0 -10
- package/dist/features/stores/migrations.d.ts +0 -2
- package/dist/features/stores/migrations.js +0 -10
- package/dist/features/sublisting/migrations.d.ts +0 -2
- package/dist/features/sublisting/migrations.js +0 -10
- package/dist/features/sublisting/schemas/firestore.d.ts +0 -32
- package/dist/features/sublisting/schemas/firestore.js +0 -19
- package/dist/features/support/migrations.d.ts +0 -2
- package/dist/features/support/migrations.js +0 -10
- package/dist/features/wishlist/migrations.d.ts +0 -2
- package/dist/features/wishlist/migrations.js +0 -10
- package/dist/seed/_bundle-constants.d.ts +0 -14
- package/dist/seed/_bundle-constants.js +0 -14
- package/dist/seed/anime-figures-seed-data.d.ts +0 -8
- package/dist/seed/anime-figures-seed-data.js +0 -1033
- package/dist/seed/beyblade-seed-data.d.ts +0 -7
- package/dist/seed/beyblade-seed-data.js +0 -1129
- package/dist/seed/brands-seed-data.d.ts +0 -7
- package/dist/seed/brands-seed-data.js +0 -410
- package/dist/seed/bundles-seed-data.d.ts +0 -13
- package/dist/seed/bundles-seed-data.js +0 -229
- package/dist/seed/cosplay-accessories-seed-data.d.ts +0 -8
- package/dist/seed/cosplay-accessories-seed-data.js +0 -647
- package/dist/seed/hot-wheels-seed-data.d.ts +0 -7
- package/dist/seed/hot-wheels-seed-data.js +0 -1612
- package/dist/seed/letitrip-official-seed-data.d.ts +0 -8
- package/dist/seed/letitrip-official-seed-data.js +0 -399
- package/dist/seed/pokemon-carousel-slides-seed-data.d.ts +0 -8
- package/dist/seed/pokemon-carousel-slides-seed-data.js +0 -322
- package/dist/seed/pokemon-categories-seed-data.d.ts +0 -24
- package/dist/seed/pokemon-categories-seed-data.js +0 -547
- package/dist/seed/pokemon-coupons-seed-data.d.ts +0 -6
- package/dist/seed/pokemon-coupons-seed-data.js +0 -465
- package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +0 -7
- package/dist/seed/pokemon-homepage-sections-seed-data.js +0 -241
- package/dist/seed/pokemon-products-seed-data.d.ts +0 -9
- package/dist/seed/pokemon-products-seed-data.js +0 -1791
- package/dist/seed/pokemon-seed-bundle.d.ts +0 -47
- package/dist/seed/pokemon-seed-bundle.js +0 -71
- package/dist/seed/pokemon-stores-seed-data.d.ts +0 -6
- package/dist/seed/pokemon-stores-seed-data.js +0 -179
- package/dist/seed/pokemon-users-seed-data.d.ts +0 -6
- package/dist/seed/pokemon-users-seed-data.js +0 -521
- package/dist/seed/products-seed-data.d.ts +0 -6
- package/dist/seed/products-seed-data.js +0 -2530
- package/dist/seed/retro-gaming-seed-data.d.ts +0 -8
- package/dist/seed/retro-gaming-seed-data.js +0 -801
- package/dist/seed/server.d.ts +0 -2
- package/dist/seed/server.js +0 -7
- package/dist/seed/sublisting-categories-seed-data.d.ts +0 -7
- package/dist/seed/sublisting-categories-seed-data.js +0 -159
- package/dist/seed/transformers-seed-data.d.ts +0 -7
- package/dist/seed/transformers-seed-data.js +0 -530
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
import type { OrderStatus, PaymentStatus } from "../types";
|
|
5
5
|
import type { OrderType } from "../utils/order-splitter";
|
|
6
6
|
export type ShippingMethod = "custom" | "shiprocket";
|
|
7
|
+
export type RefundType = "full" | "partial";
|
|
7
8
|
export type OrderPayoutStatus = "eligible" | "requested" | "paid";
|
|
8
9
|
export type RefundStatus = "pending" | "processing" | "completed" | "rejected";
|
|
9
|
-
/** Runtime-accessible shipping method values
|
|
10
|
+
/** Runtime-accessible shipping method values — use instead of bare string literals. */
|
|
10
11
|
export declare const ShippingMethodValues: {
|
|
11
12
|
readonly CUSTOM: "custom";
|
|
12
13
|
readonly SHIPROCKET: "shiprocket";
|
|
13
14
|
};
|
|
14
|
-
/** Runtime-accessible order status values
|
|
15
|
+
/** Runtime-accessible order status values — use instead of bare string literals. */
|
|
15
16
|
export declare const OrderStatusValues: {
|
|
16
17
|
readonly PENDING: "pending";
|
|
17
18
|
readonly CONFIRMED: "confirmed";
|
|
@@ -23,7 +24,7 @@ export declare const OrderStatusValues: {
|
|
|
23
24
|
readonly RETURN_REQUESTED: "return_requested";
|
|
24
25
|
readonly RETURNED: "returned";
|
|
25
26
|
};
|
|
26
|
-
/** Runtime-accessible payment status values
|
|
27
|
+
/** Runtime-accessible payment status values — use instead of bare string literals. */
|
|
27
28
|
export declare const PaymentStatusValues: {
|
|
28
29
|
readonly PENDING: "pending";
|
|
29
30
|
readonly PROCESSING: "processing";
|
|
@@ -32,36 +33,62 @@ export declare const PaymentStatusValues: {
|
|
|
32
33
|
readonly REFUNDED: "refunded";
|
|
33
34
|
readonly PARTIAL_REFUND: "partial_refund";
|
|
34
35
|
};
|
|
35
|
-
/** Runtime-accessible payment method values
|
|
36
|
+
/** Runtime-accessible payment method values — use instead of bare string literals. */
|
|
36
37
|
export declare const PaymentMethodValues: {
|
|
37
38
|
readonly COD: "cod";
|
|
38
39
|
readonly ONLINE: "online";
|
|
39
40
|
readonly UPI_MANUAL: "upi_manual";
|
|
40
41
|
readonly RAZORPAY: "razorpay";
|
|
41
42
|
};
|
|
42
|
-
/** Runtime-accessible refund status values
|
|
43
|
+
/** Runtime-accessible refund status values — use instead of bare string literals. */
|
|
43
44
|
export declare const RefundStatusValues: {
|
|
44
45
|
readonly PENDING: "pending";
|
|
45
46
|
readonly PROCESSING: "processing";
|
|
46
47
|
readonly COMPLETED: "completed";
|
|
47
48
|
readonly REJECTED: "rejected";
|
|
48
49
|
};
|
|
49
|
-
/** Firestore storage shape for an order line item
|
|
50
|
+
/** Firestore storage shape for an order line item — distinct from the API display model OrderItem */
|
|
50
51
|
export interface OrderDocumentItem {
|
|
51
52
|
productId: string;
|
|
52
53
|
productTitle: string;
|
|
53
54
|
quantity: number;
|
|
54
55
|
unitPrice: number;
|
|
55
56
|
totalPrice: number;
|
|
56
|
-
/** SB8-F
|
|
57
|
-
listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
|
|
58
|
-
/** SB8-F
|
|
57
|
+
/** SB8-F — set when the item is a prize-draw entry; drives the reveals badge. */
|
|
58
|
+
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
|
|
59
|
+
/** SB8-F — per-item reveal status; flips through pending → open → revealed/closed. */
|
|
59
60
|
prizeRevealStatus?: "pending" | "open" | "closed" | "revealed";
|
|
60
|
-
/** SB8-F
|
|
61
|
+
/** SB8-F — ISO timestamp; deadline by which the buyer must claim the prize. */
|
|
61
62
|
prizeRevealDeadline?: string;
|
|
62
|
-
/** SB8-F
|
|
63
|
+
/** SB8-F — set after the reveal API picks a winner. */
|
|
63
64
|
revealedItemNumber?: number;
|
|
64
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* One refund event on an order. Multiple partial refund events are allowed
|
|
68
|
+
* until the cumulative amount equals the order total, at which point the order
|
|
69
|
+
* transitions to full-refund terminal state. Once any refund is posted the
|
|
70
|
+
* order's `contestable` flag becomes false permanently.
|
|
71
|
+
*/
|
|
72
|
+
export interface OrderRefundEvent {
|
|
73
|
+
refundId: string;
|
|
74
|
+
type: RefundType;
|
|
75
|
+
/** Amount in paise. */
|
|
76
|
+
amount: number;
|
|
77
|
+
/** ProductIds / itemIds that were refunded (for partial refunds). */
|
|
78
|
+
itemIds?: string[];
|
|
79
|
+
reason: string;
|
|
80
|
+
refundedAt: Date;
|
|
81
|
+
refundedBy: string;
|
|
82
|
+
/** Set when Razorpay processed the refund. */
|
|
83
|
+
razorpayRefundId?: string;
|
|
84
|
+
/** Set when refund was processed manually (offline). */
|
|
85
|
+
manualTransactionId?: string;
|
|
86
|
+
/** Proof document URL (via /api/media signed-URL flow). */
|
|
87
|
+
proofDocumentUrl?: string;
|
|
88
|
+
proofDocumentMimeType?: string;
|
|
89
|
+
/** Required for Razorpay-override path ("failed auto-refund, settled manually"). */
|
|
90
|
+
overrideReason?: string;
|
|
91
|
+
}
|
|
65
92
|
/** One applied discount/coupon saved on the order for accounting and display */
|
|
66
93
|
export interface AppliedOrderDiscount {
|
|
67
94
|
code: string;
|
|
@@ -136,14 +163,37 @@ export interface OrderDocument {
|
|
|
136
163
|
};
|
|
137
164
|
/** Deadline for the buyer to claim the won prize (typically 7 days). */
|
|
138
165
|
prizeRevealDeadline?: Date;
|
|
139
|
-
/** True once `prizeRevealDeadline` passes without a claim
|
|
166
|
+
/** True once `prizeRevealDeadline` passes without a claim — auto-forfeit. */
|
|
140
167
|
prizeRevealExpired?: boolean;
|
|
141
168
|
/** Source product id when the order came from a prize-draw entry. */
|
|
142
169
|
prizeDrawProductId?: string;
|
|
143
170
|
/** True for prize-draw entries and bundle purchases that bypass refund. */
|
|
144
171
|
isNonRefundable?: boolean;
|
|
145
|
-
/** Set when the order came from a bundle
|
|
172
|
+
/** Set when the order came from a bundle — points back to `bundles/{id}`. */
|
|
146
173
|
bundleId?: string;
|
|
174
|
+
/**
|
|
175
|
+
* Internal reference linking sibling orders created from the same checkout
|
|
176
|
+
* transaction (one Razorpay payment, N orders). Not a contractual record —
|
|
177
|
+
* orders are the source of truth for invoicing, refunds, and disputes.
|
|
178
|
+
*/
|
|
179
|
+
paymentBatchId?: string;
|
|
180
|
+
/**
|
|
181
|
+
* Append-only log of refund events on this order. Multiple partial refund
|
|
182
|
+
* events are allowed until the cumulative amount equals `totalPrice`.
|
|
183
|
+
*/
|
|
184
|
+
refunds?: OrderRefundEvent[];
|
|
185
|
+
/**
|
|
186
|
+
* False once ANY refund (full or partial) has been posted. Once false it
|
|
187
|
+
* stays false — no dispute, RMA request, or “Item Not Received” claim may
|
|
188
|
+
* be filed. Both buyer and seller must acknowledge this in the refund UI
|
|
189
|
+
* via `confirmIrrevocable: true` before the refund is posted.
|
|
190
|
+
*/
|
|
191
|
+
contestable?: boolean;
|
|
192
|
+
/** Signed-URL media slug for a shipping-proof document (label, AWB scan). */
|
|
193
|
+
shippingProofUrl?: string;
|
|
194
|
+
shippingProofMimeType?: string;
|
|
195
|
+
shippingProofUploadedAt?: Date;
|
|
196
|
+
shippingProofUploadedBy?: string;
|
|
147
197
|
createdAt: Date;
|
|
148
198
|
updatedAt: Date;
|
|
149
199
|
}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Orders Firestore Document Types & Constants
|
|
3
3
|
*/
|
|
4
4
|
import { generateOrderId } from "../../../utils/id-generators";
|
|
5
|
-
/** Runtime-accessible shipping method values
|
|
5
|
+
/** Runtime-accessible shipping method values — use instead of bare string literals. */
|
|
6
6
|
export const ShippingMethodValues = {
|
|
7
7
|
CUSTOM: "custom",
|
|
8
8
|
SHIPROCKET: "shiprocket",
|
|
9
9
|
};
|
|
10
|
-
/** Runtime-accessible order status values
|
|
10
|
+
/** Runtime-accessible order status values — use instead of bare string literals. */
|
|
11
11
|
export const OrderStatusValues = {
|
|
12
12
|
PENDING: "pending",
|
|
13
13
|
CONFIRMED: "confirmed",
|
|
@@ -19,7 +19,7 @@ export const OrderStatusValues = {
|
|
|
19
19
|
RETURN_REQUESTED: "return_requested",
|
|
20
20
|
RETURNED: "returned",
|
|
21
21
|
};
|
|
22
|
-
/** Runtime-accessible payment status values
|
|
22
|
+
/** Runtime-accessible payment status values — use instead of bare string literals. */
|
|
23
23
|
export const PaymentStatusValues = {
|
|
24
24
|
PENDING: "pending",
|
|
25
25
|
PROCESSING: "processing",
|
|
@@ -28,14 +28,14 @@ export const PaymentStatusValues = {
|
|
|
28
28
|
REFUNDED: "refunded",
|
|
29
29
|
PARTIAL_REFUND: "partial_refund",
|
|
30
30
|
};
|
|
31
|
-
/** Runtime-accessible payment method values
|
|
31
|
+
/** Runtime-accessible payment method values — use instead of bare string literals. */
|
|
32
32
|
export const PaymentMethodValues = {
|
|
33
33
|
COD: "cod",
|
|
34
34
|
ONLINE: "online",
|
|
35
35
|
UPI_MANUAL: "upi_manual",
|
|
36
36
|
RAZORPAY: "razorpay",
|
|
37
37
|
};
|
|
38
|
-
/** Runtime-accessible refund status values
|
|
38
|
+
/** Runtime-accessible refund status values — use instead of bare string literals. */
|
|
39
39
|
export const RefundStatusValues = {
|
|
40
40
|
PENDING: "pending",
|
|
41
41
|
PROCESSING: "processing",
|
|
@@ -137,16 +137,16 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
137
137
|
}[];
|
|
138
138
|
total: number;
|
|
139
139
|
userId: string;
|
|
140
|
-
subtotal: number;
|
|
141
140
|
paymentStatus: string;
|
|
141
|
+
subtotal: number;
|
|
142
142
|
orderStatus: "pending" | "processing" | "refunded" | "confirmed" | "shipped" | "delivered" | "cancelled" | "return_requested" | "returned";
|
|
143
143
|
createdAt?: string | undefined;
|
|
144
144
|
updatedAt?: string | undefined;
|
|
145
145
|
notes?: string | undefined;
|
|
146
|
-
tax?: number | undefined;
|
|
147
146
|
trackingNumber?: string | undefined;
|
|
148
147
|
couponCode?: string | undefined;
|
|
149
148
|
shippingCarrier?: string | undefined;
|
|
149
|
+
tax?: number | undefined;
|
|
150
150
|
paymentGateway?: string | undefined;
|
|
151
151
|
shippingCost?: number | undefined;
|
|
152
152
|
discount?: number | undefined;
|
|
@@ -172,16 +172,16 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
172
172
|
}[];
|
|
173
173
|
total: number;
|
|
174
174
|
userId: string;
|
|
175
|
-
subtotal: number;
|
|
176
175
|
paymentStatus: string;
|
|
176
|
+
subtotal: number;
|
|
177
177
|
orderStatus: "pending" | "processing" | "refunded" | "confirmed" | "shipped" | "delivered" | "cancelled" | "return_requested" | "returned";
|
|
178
178
|
createdAt?: string | undefined;
|
|
179
179
|
updatedAt?: string | undefined;
|
|
180
180
|
notes?: string | undefined;
|
|
181
|
-
tax?: number | undefined;
|
|
182
181
|
trackingNumber?: string | undefined;
|
|
183
182
|
couponCode?: string | undefined;
|
|
184
183
|
shippingCarrier?: string | undefined;
|
|
184
|
+
tax?: number | undefined;
|
|
185
185
|
paymentGateway?: string | undefined;
|
|
186
186
|
shippingCost?: number | undefined;
|
|
187
187
|
discount?: number | undefined;
|
|
@@ -23,8 +23,9 @@ export interface OrderItem {
|
|
|
23
23
|
currency?: string;
|
|
24
24
|
storeId?: string;
|
|
25
25
|
attributes?: Record<string, string>;
|
|
26
|
-
/** Listing kind at the time of order — needed for prize-draw UI hints (SB8-F).
|
|
27
|
-
|
|
26
|
+
/** Listing kind at the time of order — needed for prize-draw UI hints (SB8-F).
|
|
27
|
+
* SB-UNI-F 2026-05-13 — Phase 2 union extension. */
|
|
28
|
+
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
|
|
28
29
|
/**
|
|
29
30
|
* Per-item prize-draw reveal status (SB8-F). Populated by the checkout
|
|
30
31
|
* actions when listingType === "prize-draw". Used to render the
|
|
@@ -35,6 +36,15 @@ export interface OrderItem {
|
|
|
35
36
|
prizeRevealDeadline?: string;
|
|
36
37
|
/** Set after the reveal endpoint picks a winner — the prize item index. */
|
|
37
38
|
revealedItemNumber?: number;
|
|
39
|
+
/**
|
|
40
|
+
* SB-UNI-4 2026-05-13 — bundle identifier when this order line represents a
|
|
41
|
+
* bundle purchase. `productId` then points at the bundle category id and
|
|
42
|
+
* `bundleProductIds` snapshots the included member product ids. Per-member
|
|
43
|
+
* stock decrement + order fan-out lands in S-SBUNI-5.
|
|
44
|
+
*/
|
|
45
|
+
bundleCategorySlug?: string;
|
|
46
|
+
/** Snapshot of bundle.bundleProductIds at order-creation time. */
|
|
47
|
+
bundleProductIds?: string[];
|
|
38
48
|
}
|
|
39
49
|
export interface OrderTimeline {
|
|
40
50
|
status: OrderStatus;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order-item bundle grouping — S-SBUNI-5 2026-05-13.
|
|
3
|
+
*
|
|
4
|
+
* Orders carry bundle members as individual `OrderItem` rows (per S-SBUNI-4
|
|
5
|
+
* schema) when the buyer's cart line was a bundle. The order-detail UI
|
|
6
|
+
* collapses those rows back under a single "Bundle: <name>" header so the
|
|
7
|
+
* checkout receipt mirrors the buyer's intent. This helper is the pure
|
|
8
|
+
* grouping logic — the UI primitive lives next to the consumer view.
|
|
9
|
+
*
|
|
10
|
+
* Two flavours of "bundle row" can appear on an order:
|
|
11
|
+
* 1. ONE order row whose `bundleCategorySlug` + `bundleProductIds[]` set
|
|
12
|
+
* describe the bundle (this is what S-SBUNI-4's checkout writes — the
|
|
13
|
+
* bundle stays a single row in the order with the locked
|
|
14
|
+
* bundlePriceInPaise as its line total).
|
|
15
|
+
* 2. (Future) Expanded N rows, each tagged with the same
|
|
16
|
+
* `bundleCategorySlug`. The grouping handles this too in case a future
|
|
17
|
+
* session pivots to row expansion.
|
|
18
|
+
*
|
|
19
|
+
* Either way, `groupOrderItemsByBundle` returns a stable, ordered list of
|
|
20
|
+
* "groups" so the renderer can iterate once.
|
|
21
|
+
*/
|
|
22
|
+
/** Minimal shape consumed from an order item (Firestore wire format). */
|
|
23
|
+
export interface OrderItemForBundleGrouping {
|
|
24
|
+
/** Bundle discriminator — set when this row is part of a bundle. */
|
|
25
|
+
bundleCategorySlug?: string;
|
|
26
|
+
/** Snapshot of bundle members at order-creation time. */
|
|
27
|
+
bundleProductIds?: string[];
|
|
28
|
+
}
|
|
29
|
+
export type BundleOrderGroup<T extends OrderItemForBundleGrouping> = {
|
|
30
|
+
kind: "single";
|
|
31
|
+
item: T;
|
|
32
|
+
index: number;
|
|
33
|
+
} | {
|
|
34
|
+
kind: "bundle";
|
|
35
|
+
bundleCategorySlug: string;
|
|
36
|
+
items: Array<{
|
|
37
|
+
item: T;
|
|
38
|
+
index: number;
|
|
39
|
+
}>;
|
|
40
|
+
/** Pulled from the first row in the group; reflects what checkout snapshotted. */
|
|
41
|
+
memberCount: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Walk the items array preserving original order; collapse contiguous (or
|
|
45
|
+
* non-contiguous) bundle rows sharing the same `bundleCategorySlug` into a
|
|
46
|
+
* single group. Single rows pass through unchanged.
|
|
47
|
+
*/
|
|
48
|
+
export declare function groupOrderItemsByBundle<T extends OrderItemForBundleGrouping>(items: T[]): Array<BundleOrderGroup<T>>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order-item bundle grouping — S-SBUNI-5 2026-05-13.
|
|
3
|
+
*
|
|
4
|
+
* Orders carry bundle members as individual `OrderItem` rows (per S-SBUNI-4
|
|
5
|
+
* schema) when the buyer's cart line was a bundle. The order-detail UI
|
|
6
|
+
* collapses those rows back under a single "Bundle: <name>" header so the
|
|
7
|
+
* checkout receipt mirrors the buyer's intent. This helper is the pure
|
|
8
|
+
* grouping logic — the UI primitive lives next to the consumer view.
|
|
9
|
+
*
|
|
10
|
+
* Two flavours of "bundle row" can appear on an order:
|
|
11
|
+
* 1. ONE order row whose `bundleCategorySlug` + `bundleProductIds[]` set
|
|
12
|
+
* describe the bundle (this is what S-SBUNI-4's checkout writes — the
|
|
13
|
+
* bundle stays a single row in the order with the locked
|
|
14
|
+
* bundlePriceInPaise as its line total).
|
|
15
|
+
* 2. (Future) Expanded N rows, each tagged with the same
|
|
16
|
+
* `bundleCategorySlug`. The grouping handles this too in case a future
|
|
17
|
+
* session pivots to row expansion.
|
|
18
|
+
*
|
|
19
|
+
* Either way, `groupOrderItemsByBundle` returns a stable, ordered list of
|
|
20
|
+
* "groups" so the renderer can iterate once.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Walk the items array preserving original order; collapse contiguous (or
|
|
24
|
+
* non-contiguous) bundle rows sharing the same `bundleCategorySlug` into a
|
|
25
|
+
* single group. Single rows pass through unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export function groupOrderItemsByBundle(items) {
|
|
28
|
+
const groups = [];
|
|
29
|
+
const bundleIndexBySlug = new Map();
|
|
30
|
+
items.forEach((item, index) => {
|
|
31
|
+
const slug = item.bundleCategorySlug;
|
|
32
|
+
if (!slug) {
|
|
33
|
+
groups.push({ kind: "single", item, index });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const existingIdx = bundleIndexBySlug.get(slug);
|
|
37
|
+
if (existingIdx === undefined) {
|
|
38
|
+
const memberCount = item.bundleProductIds?.length ?? 1;
|
|
39
|
+
groups.push({
|
|
40
|
+
kind: "bundle",
|
|
41
|
+
bundleCategorySlug: slug,
|
|
42
|
+
items: [{ item, index }],
|
|
43
|
+
memberCount,
|
|
44
|
+
});
|
|
45
|
+
bundleIndexBySlug.set(slug, groups.length - 1);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const existing = groups[existingIdx];
|
|
49
|
+
if (existing.kind === "bundle") {
|
|
50
|
+
existing.items.push({ item, index });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return groups;
|
|
54
|
+
}
|
|
@@ -3,22 +3,21 @@ export interface OrderGroup<T> {
|
|
|
3
3
|
items: T[];
|
|
4
4
|
orderType: OrderType;
|
|
5
5
|
}
|
|
6
|
+
import type { CartItemDocument } from "../../cart/schemas/firestore";
|
|
6
7
|
/**
|
|
7
8
|
* Split a sequence of cart-items into order groups by `OrderType`.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* The split key and order type are both derived from the checkout rule
|
|
11
|
+
* registry so new listing types need no changes here.
|
|
12
|
+
*
|
|
13
|
+
* Prize-draw items with qty > PRIZE_DRAW_MAX_REVEALS_PER_ORDER are first
|
|
14
|
+
* expanded into virtual single-batch items (via `rule.splitMultipleOrders`),
|
|
15
|
+
* then each batch lands in its own order group.
|
|
13
16
|
*
|
|
14
17
|
* SB1-G Phase 4 — keys off the canonical `CartItem.listingType` discriminator
|
|
15
18
|
* instead of the legacy `isAuction` / `isPreOrder` booleans.
|
|
19
|
+
* S-SBUNI-RULES 2026-05-13 — rule-registry dispatch replaces if/else chain.
|
|
16
20
|
*/
|
|
17
21
|
export declare function splitCartIntoOrderGroups<T extends {
|
|
18
|
-
item:
|
|
19
|
-
itemId: string;
|
|
20
|
-
storeId?: string;
|
|
21
|
-
listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
|
|
22
|
-
isOffer?: boolean;
|
|
23
|
-
};
|
|
22
|
+
item: CartItemDocument;
|
|
24
23
|
}>(checks: T[]): OrderGroup<T>[];
|
|
@@ -1,45 +1,39 @@
|
|
|
1
|
+
import { getListingRule, offerRule, } from "../../../_internal/shared/checkout/rules";
|
|
1
2
|
/**
|
|
2
3
|
* Split a sequence of cart-items into order groups by `OrderType`.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* The split key and order type are both derived from the checkout rule
|
|
6
|
+
* registry so new listing types need no changes here.
|
|
7
|
+
*
|
|
8
|
+
* Prize-draw items with qty > PRIZE_DRAW_MAX_REVEALS_PER_ORDER are first
|
|
9
|
+
* expanded into virtual single-batch items (via `rule.splitMultipleOrders`),
|
|
10
|
+
* then each batch lands in its own order group.
|
|
8
11
|
*
|
|
9
12
|
* SB1-G Phase 4 — keys off the canonical `CartItem.listingType` discriminator
|
|
10
13
|
* instead of the legacy `isAuction` / `isPreOrder` booleans.
|
|
14
|
+
* S-SBUNI-RULES 2026-05-13 — rule-registry dispatch replaces if/else chain.
|
|
11
15
|
*/
|
|
12
16
|
export function splitCartIntoOrderGroups(checks) {
|
|
13
17
|
const groups = new Map();
|
|
14
18
|
for (const check of checks) {
|
|
15
19
|
const { item } = check;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
key
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
key = `preorder:${item.storeId ?? "unknown"}`;
|
|
33
|
-
orderType = "preorder";
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
key = `standard:${item.storeId ?? "unknown"}`;
|
|
37
|
-
orderType = "standard";
|
|
38
|
-
}
|
|
39
|
-
if (!groups.has(key)) {
|
|
40
|
-
groups.set(key, { items: [], orderType });
|
|
20
|
+
const lt = (item.listingType ?? "standard");
|
|
21
|
+
const rule = item.isOffer ? offerRule : (getListingRule(lt) ?? getListingRule("standard"));
|
|
22
|
+
// Prize-draw (and future types with maxLinesPerOrder < Infinity) may split
|
|
23
|
+
// one cart item into N virtual batch items.
|
|
24
|
+
const virtualItems = rule.splitMultipleOrders(item);
|
|
25
|
+
for (let batchIdx = 0; batchIdx < virtualItems.length; batchIdx++) {
|
|
26
|
+
const virtualItem = virtualItems[batchIdx];
|
|
27
|
+
const virtualCheck = { ...check, item: virtualItem };
|
|
28
|
+
const baseKey = rule.splitKey(virtualItem);
|
|
29
|
+
// Append a batch suffix only when there are multiple batches so the key
|
|
30
|
+
// stays stable for single-order types.
|
|
31
|
+
const key = virtualItems.length > 1 ? `${baseKey}:batch-${batchIdx}` : baseKey;
|
|
32
|
+
if (!groups.has(key)) {
|
|
33
|
+
groups.set(key, { items: [], orderType: rule.orderType });
|
|
34
|
+
}
|
|
35
|
+
groups.get(key).items.push(virtualCheck);
|
|
41
36
|
}
|
|
42
|
-
groups.get(key).items.push(check);
|
|
43
37
|
}
|
|
44
38
|
return Array.from(groups.values());
|
|
45
39
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { BaseRepository, type SieveModel, type FirebaseSieveResult } from "../../../providers/db-firebase";
|
|
8
8
|
import type { DocumentReference, WriteResult } from "firebase-admin/firestore";
|
|
9
|
-
import type { PayoutDocument, PayoutCreateInput, PayoutStatus, PayoutUpdateInput } from "../schemas";
|
|
9
|
+
import type { PayoutDocument, PayoutCreateInput, PayoutRefundDeduction, PayoutStatus, PayoutUpdateInput } from "../schemas";
|
|
10
10
|
export declare class PayoutRepository extends BaseRepository<PayoutDocument> {
|
|
11
11
|
constructor();
|
|
12
12
|
/** Decrypt PII fields on a payout document after Firestore read */
|
|
@@ -57,6 +57,18 @@ export declare class PayoutRepository extends BaseRepository<PayoutDocument> {
|
|
|
57
57
|
* Used to avoid double-paying the same orders.
|
|
58
58
|
*/
|
|
59
59
|
getPaidOutOrderIds(storeId: string): Promise<Set<string>>;
|
|
60
|
+
/**
|
|
61
|
+
* Find the most recent pending payout for a store.
|
|
62
|
+
* Used to locate the deduction target when a refund is issued.
|
|
63
|
+
*/
|
|
64
|
+
findPendingByStore(storeId: string): Promise<PayoutDocument | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Atomically append a refund deduction and recalculate netAmount.
|
|
67
|
+
*
|
|
68
|
+
* Only valid while status = "pending". Throws if the payout is not found
|
|
69
|
+
* or is no longer pending. netAmount is floored at 0.
|
|
70
|
+
*/
|
|
71
|
+
applyRefundDeduction(payoutId: string, deduction: Omit<PayoutRefundDeduction, "appliedAt">): Promise<PayoutDocument>;
|
|
60
72
|
static readonly SIEVE_FIELDS: {
|
|
61
73
|
id: {
|
|
62
74
|
canFilter: boolean;
|
|
@@ -90,6 +102,10 @@ export declare class PayoutRepository extends BaseRepository<PayoutDocument> {
|
|
|
90
102
|
canFilter: boolean;
|
|
91
103
|
canSort: boolean;
|
|
92
104
|
};
|
|
105
|
+
netAmount: {
|
|
106
|
+
canFilter: boolean;
|
|
107
|
+
canSort: boolean;
|
|
108
|
+
};
|
|
93
109
|
requestedAt: {
|
|
94
110
|
canFilter: boolean;
|
|
95
111
|
canSort: boolean;
|
|
@@ -172,6 +172,52 @@ export class PayoutRepository extends BaseRepository {
|
|
|
172
172
|
});
|
|
173
173
|
return ids;
|
|
174
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Find the most recent pending payout for a store.
|
|
177
|
+
* Used to locate the deduction target when a refund is issued.
|
|
178
|
+
*/
|
|
179
|
+
async findPendingByStore(storeId) {
|
|
180
|
+
const snapshot = await this.db
|
|
181
|
+
.collection(this.collection)
|
|
182
|
+
.where(PAYOUT_FIELDS.STORE_ID, "==", storeId)
|
|
183
|
+
.where(PAYOUT_FIELDS.STATUS, "==", "pending")
|
|
184
|
+
.orderBy(PAYOUT_FIELDS.CREATED_AT, "desc")
|
|
185
|
+
.limit(1)
|
|
186
|
+
.get();
|
|
187
|
+
if (snapshot.empty)
|
|
188
|
+
return null;
|
|
189
|
+
return this.decryptPayout({ id: snapshot.docs[0].id, ...snapshot.docs[0].data() });
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Atomically append a refund deduction and recalculate netAmount.
|
|
193
|
+
*
|
|
194
|
+
* Only valid while status = "pending". Throws if the payout is not found
|
|
195
|
+
* or is no longer pending. netAmount is floored at 0.
|
|
196
|
+
*/
|
|
197
|
+
async applyRefundDeduction(payoutId, deduction) {
|
|
198
|
+
const ref = this.db.collection(this.collection).doc(payoutId);
|
|
199
|
+
const entry = { ...deduction, appliedAt: new Date() };
|
|
200
|
+
const updated = await this.db.runTransaction(async (tx) => {
|
|
201
|
+
const snap = await tx.get(ref);
|
|
202
|
+
if (!snap.exists)
|
|
203
|
+
throw new Error(`Payout ${payoutId} not found`);
|
|
204
|
+
const doc = { id: snap.id, ...snap.data() };
|
|
205
|
+
if (doc.status !== "pending") {
|
|
206
|
+
throw new Error(`Cannot deduct from payout ${payoutId} in status "${doc.status}"`);
|
|
207
|
+
}
|
|
208
|
+
const existing = doc.refundDeductions ?? [];
|
|
209
|
+
const newDeductions = [...existing, entry];
|
|
210
|
+
const totalDeducted = newDeductions.reduce((s, d) => s + d.deductedAmount, 0);
|
|
211
|
+
const netAmount = Math.max(0, doc.amount - totalDeducted);
|
|
212
|
+
tx.update(ref, {
|
|
213
|
+
refundDeductions: newDeductions.map((d) => prepareForFirestore(d)),
|
|
214
|
+
netAmount,
|
|
215
|
+
updatedAt: new Date(),
|
|
216
|
+
});
|
|
217
|
+
return { ...doc, refundDeductions: newDeductions, netAmount, updatedAt: new Date() };
|
|
218
|
+
});
|
|
219
|
+
return this.decryptPayout(updated);
|
|
220
|
+
}
|
|
175
221
|
/**
|
|
176
222
|
* Paginated, Firestore-native payout list (admin use).
|
|
177
223
|
*/
|
|
@@ -194,6 +240,7 @@ PayoutRepository.SIEVE_FIELDS = {
|
|
|
194
240
|
status: { canFilter: true, canSort: true },
|
|
195
241
|
paymentMethod: { canFilter: true, canSort: false },
|
|
196
242
|
amount: { canFilter: true, canSort: true },
|
|
243
|
+
netAmount: { canFilter: true, canSort: true },
|
|
197
244
|
requestedAt: { canFilter: true, canSort: true },
|
|
198
245
|
createdAt: { canFilter: true, canSort: true },
|
|
199
246
|
processedAt: { canFilter: true, canSort: true },
|
|
@@ -9,6 +9,22 @@ export interface PayoutBankAccount {
|
|
|
9
9
|
bankName: string;
|
|
10
10
|
}
|
|
11
11
|
export type PayoutStatus = "pending" | "processing" | "completed" | "failed";
|
|
12
|
+
/**
|
|
13
|
+
* A single refund deduction applied against a payout before dispatch.
|
|
14
|
+
*
|
|
15
|
+
* deductedAmount = refundedAmount − (refundedAmount × platformFeeRate)
|
|
16
|
+
* The platform keeps its fee share; only the net seller portion is deducted.
|
|
17
|
+
*/
|
|
18
|
+
export interface PayoutRefundDeduction {
|
|
19
|
+
orderId: string;
|
|
20
|
+
refundId: string;
|
|
21
|
+
/** Gross refund amount in paise (for audit trail). */
|
|
22
|
+
refundedAmount: number;
|
|
23
|
+
/** Net amount deducted from the seller payout in paise. */
|
|
24
|
+
deductedAmount: number;
|
|
25
|
+
reason: string;
|
|
26
|
+
appliedAt: Date;
|
|
27
|
+
}
|
|
12
28
|
export declare const PayoutStatusValues: {
|
|
13
29
|
readonly PENDING: "pending";
|
|
14
30
|
readonly PROCESSING: "processing";
|
|
@@ -38,6 +54,16 @@ export interface PayoutDocument {
|
|
|
38
54
|
gstAmount?: number;
|
|
39
55
|
gstRate?: number;
|
|
40
56
|
isAutomatic?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Refund deductions applied before dispatch (while status = "pending").
|
|
59
|
+
* Each entry reduces the seller's net payout by deductedAmount.
|
|
60
|
+
*/
|
|
61
|
+
refundDeductions?: PayoutRefundDeduction[];
|
|
62
|
+
/**
|
|
63
|
+
* amount − sum(refundDeductions.deductedAmount). Undefined when no
|
|
64
|
+
* deductions have been applied; dispatch code must use `netAmount ?? amount`.
|
|
65
|
+
*/
|
|
66
|
+
netAmount?: number;
|
|
41
67
|
requestedAt: Date;
|
|
42
68
|
processedAt?: Date;
|
|
43
69
|
createdAt: Date;
|
|
@@ -7,6 +7,9 @@ export declare function PreorderBadge({ shipDate, className }: PreorderBadgeProp
|
|
|
7
7
|
interface PreorderCardProps {
|
|
8
8
|
item: PreorderItem;
|
|
9
9
|
href: string;
|
|
10
|
+
selectable?: boolean;
|
|
11
|
+
isSelected?: boolean;
|
|
12
|
+
onSelect?: (id: string, selected: boolean) => void;
|
|
10
13
|
}
|
|
11
|
-
export declare function PreorderCard({ item, href }: PreorderCardProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function PreorderCard({ item, href, selectable, isSelected, onSelect }: PreorderCardProps): import("react/jsx-runtime").JSX.Element;
|
|
12
15
|
export {};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import Link from "next/link";
|
|
3
|
-
import { Div, Heading, Span, Text } from "../../../ui";
|
|
3
|
+
import { BaseListingCard, Div, Heading, Span, Text } from "../../../ui";
|
|
4
4
|
import { getPreorderStatus } from "../types";
|
|
5
5
|
import { formatCurrency } from "../../../utils/number.formatter";
|
|
6
6
|
import { getDefaultLocale } from "../../../core/baseline-resolver";
|
|
7
|
+
import { useLongPress } from "../../../react/hooks/useLongPress";
|
|
7
8
|
const STATUS_LABELS = {
|
|
8
9
|
available: "Pre-order now",
|
|
9
10
|
shipping_soon: "Shipping soon",
|
|
@@ -18,9 +19,10 @@ export function PreorderBadge({ shipDate, className }) {
|
|
|
18
19
|
const status = getPreorderStatus(shipDate);
|
|
19
20
|
return (_jsx(Span, { className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${STATUS_COLORS[status]} ${className ?? ""}`, children: STATUS_LABELS[status] }));
|
|
20
21
|
}
|
|
21
|
-
export function PreorderCard({ item, href }) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
export function PreorderCard({ item, href, selectable = false, isSelected = false, onSelect }) {
|
|
23
|
+
const longPress = useLongPress(() => onSelect?.(item.id, !isSelected));
|
|
24
|
+
return (_jsxs(Div, { className: `group relative block overflow-hidden rounded-xl border bg-white dark:bg-slate-900 transition-shadow hover:shadow-md ${isSelected ? "border-primary outline outline-2 outline-primary" : "border-gray-200 dark:border-slate-700"}`, onMouseDown: onSelect && !isSelected ? longPress.onMouseDown : undefined, onMouseUp: onSelect && !isSelected ? longPress.onMouseUp : undefined, onMouseLeave: onSelect && !isSelected ? longPress.onMouseLeave : undefined, onTouchStart: onSelect && !isSelected ? longPress.onTouchStart : undefined, onTouchEnd: onSelect && !isSelected ? longPress.onTouchEnd : undefined, children: [onSelect && (_jsx(BaseListingCard.Checkbox, { selected: isSelected, onSelect: (e) => { e.preventDefault(); onSelect(item.id, !isSelected); }, label: isSelected ? "Deselect pre-order" : "Select pre-order", position: "top-2 left-2", className: selectable || isSelected ? "opacity-100" : "opacity-0 group-hover:opacity-100 transition-opacity" })), _jsxs(Link, { href: href, className: "block", children: [item.images[0] ? (_jsx(Div, { role: "img", "aria-label": item.name, className: "aspect-square w-full bg-center bg-cover transition-transform duration-300 group-hover:scale-105", style: { backgroundImage: `url(${item.images[0]})` } })) : (_jsx(Div, { className: "aspect-square w-full bg-gray-100" })), _jsxs(Div, { className: "p-4", children: [_jsx(PreorderBadge, { shipDate: item.preorderShipDate }), _jsx(Heading, { level: 3, className: "mt-2 font-semibold text-gray-900 dark:text-zinc-100 text-base", children: item.name }), _jsx(Text, { className: "mt-1 text-sm text-gray-500 dark:text-zinc-400", children: item.brand }), _jsxs(Div, { className: "mt-3 flex items-baseline gap-2", children: [_jsx(Span, { className: "text-lg font-bold text-gray-900 dark:text-zinc-100", children: formatCurrency(item.salePrice) }), item.regularPrice > item.salePrice && (_jsx(Span, { className: "text-sm text-gray-400 dark:text-zinc-500 line-through", children: formatCurrency(item.regularPrice) }))] }), item.preorderShipDate && (_jsxs(Text, { className: "mt-1 text-xs text-gray-400 dark:text-zinc-500", children: ["Ships:", " ", new Date(item.preorderShipDate).toLocaleDateString(getDefaultLocale(), {
|
|
25
|
+
month: "short",
|
|
26
|
+
year: "numeric",
|
|
27
|
+
})] }))] })] })] }));
|
|
26
28
|
}
|
|
@@ -6,7 +6,7 @@ export interface ProductListActionParams {
|
|
|
6
6
|
page?: number;
|
|
7
7
|
pageSize?: number;
|
|
8
8
|
/** Canonical listing-kind discriminator (SB1-G Phase 4). */
|
|
9
|
-
listingType?: "standard" | "auction" | "pre-order" | "prize-draw";
|
|
9
|
+
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live";
|
|
10
10
|
featured?: boolean;
|
|
11
11
|
storeId?: string;
|
|
12
12
|
categoriesIn?: string[];
|