@mohasinac/appkit 4.13.1 → 4.15.0
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/client/features/layout/DashboardLayoutClient.js +14 -5
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +3 -0
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -0
- package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +8 -0
- package/dist/_internal/client/features/lottery/LotteryDetailView.js +4 -1
- package/dist/_internal/client/features/lottery/LotteryListView.d.ts +7 -0
- package/dist/_internal/client/features/lottery/LotteryListView.js +1 -1
- package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +4 -1
- package/dist/_internal/client/features/lottery/slot-collage-items.d.ts +15 -0
- package/dist/_internal/client/features/lottery/slot-collage-items.js +13 -0
- package/dist/_internal/server/features/auctions/actions.js +8 -2
- package/dist/_internal/server/features/bundles/data.d.ts +16 -0
- package/dist/_internal/server/features/bundles/data.js +26 -0
- package/dist/_internal/server/features/bundles/index.d.ts +1 -1
- package/dist/_internal/server/features/bundles/index.js +1 -1
- package/dist/_internal/server/features/cart/service.d.ts +3 -3
- package/dist/_internal/server/features/checkout/actions.js +25 -0
- package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
- package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
- package/dist/_internal/server/features/checkout/source-context.d.ts +5 -0
- package/dist/_internal/server/features/checkout/source-context.js +157 -0
- package/dist/_internal/server/features/homepage/index.d.ts +0 -1
- package/dist/_internal/server/features/homepage/index.js +7 -1
- package/dist/_internal/server/features/lottery/adapters.js +4 -0
- package/dist/_internal/server/features/offers/adapters.d.ts +103 -0
- package/dist/_internal/server/features/offers/adapters.js +88 -0
- package/dist/_internal/server/features/offers/index.d.ts +2 -0
- package/dist/_internal/server/features/offers/index.js +1 -0
- package/dist/_internal/server/features/orders/adapters.js +24 -0
- package/dist/_internal/server/features/products/data.js +15 -37
- package/dist/_internal/server/features/products/index.d.ts +1 -1
- package/dist/_internal/server/features/products/index.js +1 -1
- package/dist/_internal/server/features/products/list-public.d.ts +46 -20
- package/dist/_internal/server/features/products/list-public.js +266 -90
- package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
- package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
- package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
- package/dist/_internal/server/features/site-settings/adapters.js +75 -0
- package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
- package/dist/_internal/server/features/site-settings/index.js +1 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
- package/dist/_internal/server/features/stores/adapters.js +91 -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/jobs/core/auctionSettlement.js +56 -2
- package/dist/_internal/server/jobs/core/offerExpiry.js +55 -19
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
- package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
- package/dist/_internal/server/jobs/handlers/messages.js +10 -0
- package/dist/_internal/shared/actions/action-registry.js +17 -1
- package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
- package/dist/_internal/shared/checkout/lanes.js +26 -0
- package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
- package/dist/_internal/shared/features/auctions/config.js +27 -0
- package/dist/_internal/shared/features/auctions/schema.d.ts +14 -2
- package/dist/_internal/shared/features/auctions/schema.js +13 -1
- package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
- package/dist/_internal/shared/features/cart/schema.d.ts +20 -15
- package/dist/_internal/shared/features/cart/schema.js +15 -0
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
- package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
- package/dist/_internal/shared/features/emi/schedule.js +20 -5
- package/dist/_internal/shared/features/events/schema.d.ts +2 -2
- package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
- package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
- package/dist/_internal/shared/features/offers/config.d.ts +30 -0
- package/dist/_internal/shared/features/offers/config.js +59 -0
- package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
- package/dist/_internal/shared/features/products/schema.d.ts +30 -30
- package/dist/_internal/shared/features/products/to-product-item.js +6 -0
- package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
- package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
- package/dist/_internal/shared/features/site-settings/fees.js +39 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
- package/dist/_internal/shared/features/site-settings/types.js +1 -0
- package/dist/_internal/shared/history/history.d.ts +88 -0
- package/dist/_internal/shared/history/history.js +198 -0
- package/dist/_internal/shared/history/index.d.ts +4 -0
- package/dist/_internal/shared/history/index.js +2 -0
- package/dist/_internal/shared/history/types.d.ts +61 -0
- package/dist/_internal/shared/history/types.js +6 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
- package/dist/_internal/shared/listing-types/_registry.js +67 -0
- package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/art/config.js +5 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
- package/dist/_internal/shared/listing-types/auction/config.js +21 -0
- package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
- package/dist/_internal/shared/listing-types/availability.js +104 -0
- package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
- package/dist/_internal/shared/listing-types/capabilities.js +12 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/classified/config.js +5 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
- package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/live/config.js +5 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/standard/config.js +5 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
- package/dist/client.d.ts +20 -7
- package/dist/client.js +22 -4
- package/dist/constants/api-endpoints.d.ts +6 -0
- package/dist/constants/api-endpoints.js +2 -0
- package/dist/constants/field-names.d.ts +57 -8
- package/dist/constants/field-names.js +101 -8
- package/dist/constants/table-keys.d.ts +17 -0
- package/dist/constants/table-keys.js +17 -0
- package/dist/errors/error-codes.d.ts +13 -1
- package/dist/errors/error-codes.js +13 -1
- package/dist/errors/error-display-map.js +12 -3
- package/dist/errors/messages.d.ts +10 -2
- package/dist/errors/messages.js +10 -2
- package/dist/features/about/components/AboutView.d.ts +3 -0
- package/dist/features/about/components/AboutView.js +3 -2
- package/dist/features/about/components/PolicyPageView.d.ts +2 -1
- package/dist/features/about/components/PolicyPageView.js +61 -23
- package/dist/features/about/components/PublicProfileView.js +5 -0
- package/dist/features/about/schemas/firestore.d.ts +3 -0
- package/dist/features/account/components/UserBidsView.js +12 -4
- package/dist/features/account/components/UserOrdersView.js +7 -0
- package/dist/features/account/components/UserReturnsView.d.ts +3 -0
- package/dist/features/account/components/UserReturnsView.js +17 -1
- package/dist/features/account/components/index.d.ts +0 -2
- package/dist/features/account/components/index.js +0 -1
- package/dist/features/account/schemas/index.d.ts +2 -2
- package/dist/features/account/types/index.d.ts +21 -2
- package/dist/features/addresses/schemas/index.d.ts +4 -4
- package/dist/features/admin/components/AdminArtView.js +8 -3
- package/dist/features/admin/components/AdminAuditLogView.js +1 -0
- package/dist/features/admin/components/AdminBidsView.js +15 -2
- package/dist/features/admin/components/AdminBlogEditorView.js +65 -33
- package/dist/features/admin/components/AdminClassifiedView.js +8 -3
- package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
- package/dist/features/admin/components/AdminFeatureEditorView.js +35 -6
- package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
- package/dist/features/admin/components/AdminLiveView.js +8 -3
- package/dist/features/admin/components/AdminNavEditorView.js +15 -5
- package/dist/features/admin/components/AdminNewsletterView.js +18 -2
- package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
- package/dist/features/admin/components/AdminOffersView.js +230 -0
- package/dist/features/admin/components/AdminOrdersView.js +10 -1
- package/dist/features/admin/components/AdminPaymentMethodsView.js +24 -4
- package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
- package/dist/features/admin/components/AdminProductsView.js +16 -29
- package/dist/features/admin/components/AdminScammerEditorView.d.ts +2 -1
- package/dist/features/admin/components/AdminScammerEditorView.js +3 -13
- package/dist/features/admin/components/AdminScammersView.js +3 -8
- package/dist/features/admin/components/AdminSectionsView.js +32 -23
- package/dist/features/admin/components/AdminSessionsView.js +17 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
- package/dist/features/admin/components/AdminSiteView.js +6 -2
- package/dist/features/admin/components/AdminStickersView.js +8 -3
- package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -0
- 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.d.ts +4 -2
- package/dist/features/admin/components/sections/adminSectionsTypes.js +45 -27
- package/dist/features/admin/constants/filter-tabs.d.ts +89 -0
- package/dist/features/admin/constants/filter-tabs.js +56 -0
- package/dist/features/admin/schemas/firestore.d.ts +122 -3
- package/dist/features/admin/schemas/firestore.js +1 -0
- package/dist/features/admin/schemas/homepage-section-form.d.ts +22 -0
- package/dist/features/admin/schemas/homepage-section-form.js +68 -0
- package/dist/features/admin/schemas/nav-item-form.d.ts +74 -0
- package/dist/features/admin/schemas/nav-item-form.js +72 -0
- package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
- package/dist/features/auctions/actions/bid-actions.js +93 -20
- package/dist/features/auctions/components/AuctionBidsTable.d.ts +10 -1
- package/dist/features/auctions/components/AuctionBidsTable.js +22 -4
- package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
- package/dist/features/auctions/components/AuctionsListView.js +5 -6
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
- package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
- package/dist/features/auctions/components/bid-detail-fields.d.ts +29 -0
- package/dist/features/auctions/components/bid-detail-fields.js +103 -0
- package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
- package/dist/features/auctions/repository/bid.repository.js +23 -0
- package/dist/features/auctions/schemas/firestore.d.ts +17 -0
- package/dist/features/auctions/schemas/index.d.ts +12 -12
- package/dist/features/audit-log/schemas/firestore.d.ts +14 -0
- package/dist/features/audit-log/schemas/firestore.js +7 -0
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +10 -1
- package/dist/features/blog/actions/blog-actions.d.ts +7 -7
- package/dist/features/blog/schemas/blog-form.d.ts +80 -0
- package/dist/features/blog/schemas/blog-form.js +100 -0
- package/dist/features/blog/schemas/index.d.ts +6 -6
- package/dist/features/cart/repository/cart.repository.js +1 -0
- package/dist/features/cart/schemas/firestore.d.ts +15 -0
- package/dist/features/catalogue/schemas/validation.d.ts +4 -4
- package/dist/features/categories/components/BrandDetailPageView.js +23 -40
- package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
- package/dist/features/categories/components/BrandDetailTabs.js +8 -12
- package/dist/features/categories/components/BundleCollage.js +1 -1
- package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
- package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
- package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
- package/dist/features/categories/components/CategoryProductsListing.js +11 -1
- package/dist/features/categories/components/ConcernCard.js +7 -1
- package/dist/features/categories/schemas/firestore.d.ts +13 -0
- package/dist/features/categories/schemas/index.d.ts +26 -26
- package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
- package/dist/features/events/components/AdminEventEditorView.js +32 -54
- package/dist/features/events/components/AdminEventEntriesView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +15 -11
- package/dist/features/events/components/EventFilters.d.ts +9 -1
- package/dist/features/events/components/EventFilters.js +45 -21
- package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
- package/dist/features/events/components/EventsIndexListing.js +2 -2
- package/dist/features/events/components/EventsListPageView.js +13 -4
- package/dist/features/events/repository/events.repository.d.ts +17 -0
- package/dist/features/events/repository/events.repository.js +27 -0
- package/dist/features/events/schemas/event-form.d.ts +113 -0
- package/dist/features/events/schemas/event-form.js +82 -0
- package/dist/features/events/schemas/firestore.d.ts +12 -0
- package/dist/features/events/schemas/firestore.js +12 -0
- package/dist/features/events/schemas/index.d.ts +50 -50
- package/dist/features/events/types/index.d.ts +11 -0
- package/dist/features/events/types/index.js +57 -1
- package/dist/features/faq/actions/faq-actions.d.ts +12 -12
- package/dist/features/faq/schemas/index.d.ts +8 -8
- package/dist/features/filters/FilterFacetSection.d.ts +7 -1
- package/dist/features/filters/FilterFacetSection.js +11 -3
- package/dist/features/grouped/schemas/grouped-listing-form.d.ts +101 -0
- package/dist/features/grouped/schemas/grouped-listing-form.js +89 -0
- package/dist/features/grouped/schemas/index.d.ts +4 -4
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +11 -3
- package/dist/features/homepage/actions/homepage-section-actions.js +33 -1
- package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
- package/dist/features/homepage/components/AnnouncementBar.js +3 -3
- package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
- package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
- package/dist/features/homepage/hooks/homepage-query.js +45 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
- package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
- package/dist/features/homepage/schemas/index.d.ts +33 -2
- package/dist/features/homepage/schemas/index.js +24 -0
- package/dist/features/layout/AppLayoutShell.d.ts +11 -1
- package/dist/features/layout/AppLayoutShell.js +15 -14
- package/dist/features/layout/BackToTop.d.ts +9 -0
- package/dist/features/layout/BackToTop.js +10 -1
- package/dist/features/layout/BottomActions.js +28 -25
- package/dist/features/layout/BottomChrome.d.ts +34 -0
- package/dist/features/layout/BottomChrome.js +55 -0
- package/dist/features/layout/BottomNavLayout.d.ts +6 -0
- package/dist/features/layout/BottomNavLayout.js +7 -1
- package/dist/features/layout/BottomNavbar.js +15 -2
- package/dist/features/layout/FooterLayout.js +11 -1
- package/dist/features/layout/NavbarLayout.js +1 -1
- package/dist/features/layout/TitleBarLayout.d.ts +7 -0
- package/dist/features/layout/TitleBarLayout.js +28 -5
- package/dist/features/layout/index.d.ts +2 -0
- package/dist/features/layout/index.js +1 -0
- package/dist/features/lottery/types/index.d.ts +3 -0
- package/dist/features/media/MediaPickerModal.js +5 -1
- package/dist/features/messages/schemas/index.d.ts +2 -2
- package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
- package/dist/features/orders/components/OrderScopeTabs.js +31 -0
- package/dist/features/orders/components/OrderStatusTimeline.d.ts +5 -1
- package/dist/features/orders/components/OrderStatusTimeline.js +39 -20
- package/dist/features/orders/constants/order-scope.d.ts +48 -0
- package/dist/features/orders/constants/order-scope.js +111 -0
- package/dist/features/orders/repository/orders.repository.d.ts +54 -7
- package/dist/features/orders/repository/orders.repository.js +121 -22
- package/dist/features/orders/schemas/firestore.d.ts +152 -0
- package/dist/features/orders/schemas/firestore.js +30 -0
- package/dist/features/orders/schemas/index.d.ts +18 -18
- package/dist/features/orders/types/index.d.ts +35 -7
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
- package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
- package/dist/features/pre-orders/schemas/index.d.ts +1 -1
- package/dist/features/products/actions/product-actions.d.ts +14 -0
- package/dist/features/products/actions/product-actions.js +49 -11
- package/dist/features/products/api/route.d.ts +12 -0
- package/dist/features/products/api/route.js +42 -100
- package/dist/features/products/components/ArtStickersListView.js +2 -2
- package/dist/features/products/components/AuctionsIndexListing.js +13 -11
- package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
- package/dist/features/products/components/AvailabilityTabs.js +47 -0
- package/dist/features/products/components/GroupSettingsPanel.js +5 -1
- package/dist/features/products/components/MakeOfferButton.js +48 -49
- package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
- package/dist/features/products/components/PrizeDrawCollage.js +9 -1
- package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
- package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
- package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
- package/dist/features/products/components/PrizeDrawsSection.js +23 -18
- package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
- package/dist/features/products/components/ProductDetailPageView.js +18 -4
- package/dist/features/products/components/ProductForm.js +5 -2
- package/dist/features/products/components/ProductGrid.js +6 -1
- package/dist/features/products/components/ProductsIndexListing.js +22 -32
- package/dist/features/products/components/ProductsIndexPageView.js +6 -9
- package/dist/features/products/components/index.d.ts +2 -2
- package/dist/features/products/components/index.js +1 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
- package/dist/features/products/config/listing-type-listing-config.js +22 -10
- package/dist/features/products/constants/action-defs.d.ts +2 -0
- package/dist/features/products/constants/action-defs.js +6 -0
- package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
- package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
- package/dist/features/products/hooks/useProducts.d.ts +5 -0
- package/dist/features/products/hooks/useProducts.js +13 -2
- package/dist/features/products/repository/products.repository.d.ts +31 -2
- package/dist/features/products/repository/products.repository.js +53 -21
- package/dist/features/products/schemas/firestore.d.ts +17 -3
- package/dist/features/products/schemas/firestore.js +7 -2
- package/dist/features/products/schemas/index.d.ts +64 -64
- package/dist/features/products/schemas/product-features.validators.d.ts +79 -6
- package/dist/features/products/schemas/product-features.validators.js +63 -0
- package/dist/features/products/types/index.d.ts +16 -1
- package/dist/features/promotions/schemas/index.d.ts +2 -2
- package/dist/features/reviews/schemas/index.d.ts +16 -16
- package/dist/features/scams/constants/scammer-status-display.d.ts +28 -0
- package/dist/features/scams/constants/scammer-status-display.js +79 -0
- package/dist/features/search/schemas/index.d.ts +4 -4
- package/dist/features/seller/actions/offer-actions.js +57 -4
- package/dist/features/seller/components/OfferPhaseTimeline.d.ts +59 -0
- package/dist/features/seller/components/OfferPhaseTimeline.js +107 -0
- package/dist/features/seller/components/SellerArtView.js +5 -0
- package/dist/features/seller/components/SellerAuctionsView.js +13 -15
- package/dist/features/seller/components/SellerBidsView.js +11 -4
- package/dist/features/seller/components/SellerClassifiedView.js +5 -0
- package/dist/features/seller/components/SellerCouponEditorView.js +17 -17
- package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
- package/dist/features/seller/components/SellerLiveView.js +5 -0
- package/dist/features/seller/components/SellerOffersView.js +2 -1
- package/dist/features/seller/components/SellerOrdersView.js +31 -9
- package/dist/features/seller/components/SellerPayoutSettingsView.js +56 -31
- package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
- package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
- package/dist/features/seller/components/SellerProductShell.js +7 -1
- package/dist/features/seller/components/SellerProductsView.js +11 -8
- package/dist/features/seller/components/SellerStickersView.js +5 -0
- package/dist/features/seller/components/index.d.ts +0 -2
- package/dist/features/seller/components/index.js +0 -1
- package/dist/features/seller/repository/offer.repository.d.ts +142 -24
- package/dist/features/seller/repository/offer.repository.js +165 -26
- package/dist/features/seller/schemas/coupon-form.d.ts +72 -0
- package/dist/features/seller/schemas/coupon-form.js +116 -0
- package/dist/features/seller/schemas/firestore.d.ts +56 -2
- package/dist/features/seller/schemas/firestore.js +27 -0
- package/dist/features/seller/schemas/index.d.ts +2 -2
- package/dist/features/seller/schemas/offer-forms.d.ts +46 -0
- package/dist/features/seller/schemas/offer-forms.js +42 -0
- package/dist/features/seller/server.d.ts +0 -1
- package/dist/features/seller/server.js +0 -1
- package/dist/features/shell/SectionForm.d.ts +99 -0
- package/dist/features/shell/SectionForm.js +128 -0
- package/dist/features/shell/build-sections.d.ts +63 -0
- package/dist/features/shell/build-sections.js +207 -0
- package/dist/features/shell/entity-form.d.ts +109 -0
- package/dist/features/shell/entity-form.js +96 -0
- package/dist/features/shell/field-ui-meta.d.ts +115 -0
- package/dist/features/shell/field-ui-meta.js +324 -0
- package/dist/features/shell/index.d.ts +8 -0
- package/dist/features/shell/index.js +4 -0
- package/dist/features/status-history/components/StatusTimeline.d.ts +74 -0
- package/dist/features/status-history/components/StatusTimeline.js +46 -0
- package/dist/features/status-history/index.d.ts +11 -0
- package/dist/features/status-history/index.js +10 -0
- package/dist/features/store-extensions/components/ReviewDecisionModal.d.ts +27 -0
- package/dist/features/store-extensions/components/ReviewDecisionModal.js +82 -0
- package/dist/features/store-extensions/index.d.ts +12 -0
- package/dist/features/store-extensions/index.js +12 -0
- package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +36 -0
- package/dist/features/store-extensions/schemas/admin-notification-form.js +114 -0
- package/dist/features/store-extensions/schemas/analytics-forms.d.ts +57 -0
- package/dist/features/store-extensions/schemas/analytics-forms.js +158 -0
- package/dist/features/store-extensions/schemas/custom-role-form.d.ts +85 -0
- package/dist/features/store-extensions/schemas/custom-role-form.js +118 -0
- package/dist/features/store-extensions/schemas/firestore.d.ts +21 -1
- package/dist/features/store-extensions/schemas/firestore.js +60 -0
- package/dist/features/store-extensions/schemas/google-config-form.d.ts +53 -0
- package/dist/features/store-extensions/schemas/google-config-form.js +105 -0
- package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +28 -0
- package/dist/features/store-extensions/schemas/item-request-create-form.js +80 -0
- package/dist/features/store-extensions/schemas/listing-template-form.d.ts +78 -0
- package/dist/features/store-extensions/schemas/listing-template-form.js +87 -0
- package/dist/features/store-extensions/schemas/moderation-review-form.d.ts +49 -0
- package/dist/features/store-extensions/schemas/moderation-review-form.js +101 -0
- package/dist/features/store-extensions/schemas/payout-method-form.d.ts +153 -0
- package/dist/features/store-extensions/schemas/payout-method-form.js +155 -0
- package/dist/features/store-extensions/schemas/report-create-form.d.ts +25 -0
- package/dist/features/store-extensions/schemas/report-create-form.js +79 -0
- package/dist/features/store-extensions/schemas/report-review-form.d.ts +47 -0
- package/dist/features/store-extensions/schemas/report-review-form.js +111 -0
- package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +148 -0
- package/dist/features/store-extensions/schemas/shipping-config-form.js +104 -0
- package/dist/features/store-extensions/schemas/store-category-form.d.ts +54 -0
- package/dist/features/store-extensions/schemas/store-category-form.js +73 -0
- package/dist/features/stores/api/[storeSlug]/route.js +2 -25
- package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
- package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
- package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
- package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
- package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
- package/dist/features/stores/components/StoreProductsListing.js +11 -1
- package/dist/features/stores/repository/store.repository.js +6 -0
- package/dist/features/stores/schemas/index.d.ts +6 -6
- package/dist/features/support/schemas/index.d.ts +4 -4
- package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
- package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +431 -1
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/index.d.ts +25 -12
- package/dist/index.js +26 -11
- package/dist/next/routing/route-map.d.ts +23 -3
- package/dist/next/routing/route-map.js +14 -2
- package/dist/providers/db-firebase/base.repository.d.ts +30 -0
- package/dist/providers/db-firebase/base.repository.js +50 -1
- package/dist/providers/db-firebase/index.d.ts +1 -1
- package/dist/providers/db-firebase/index.js +1 -1
- package/dist/providers/db-firebase/sieve.d.ts +25 -0
- package/dist/providers/db-firebase/sieve.js +52 -18
- package/dist/react/hooks/useUrlTable.js +10 -1
- package/dist/schemas/firestore-value.d.ts +8 -0
- package/dist/schemas/firestore-value.js +44 -0
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/registry.d.ts +702 -69
- package/dist/schemas/registry.js +64 -1
- package/dist/seed/_helpers/category-forest.d.ts +2 -0
- package/dist/seed/_helpers/category-forest.js +309 -0
- package/dist/seed/_helpers/category-tree.d.ts +27 -0
- package/dist/seed/_helpers/category-tree.js +103 -0
- package/dist/seed/bids-seed-data.js +30 -0
- package/dist/seed/catalogue-seed-data.js +12 -12
- package/dist/seed/categories-seed-data.js +177 -162
- package/dist/seed/events-seed-data.js +61 -10
- package/dist/seed/homepage-sections-seed-data.js +5 -1
- package/dist/seed/offers-seed-data.js +244 -34
- package/dist/seed/orders-seed-data.js +336 -1
- package/dist/seed/products-art-seed-data.js +50 -12
- package/dist/seed/products-auctions-seed-data.js +138 -18
- package/dist/seed/products-classifieds-seed-data.js +80 -16
- package/dist/seed/products-digital-codes-seed-data.js +66 -18
- package/dist/seed/products-live-items-seed-data.js +64 -13
- package/dist/seed/products-preorders-seed-data.d.ts +0 -1
- package/dist/seed/products-preorders-seed-data.js +52 -13
- package/dist/seed/products-prize-draws-seed-data.js +63 -14
- package/dist/seed/products-standard-seed-data.js +99 -26
- package/dist/seed/products-stickers-seed-data.js +47 -12
- package/dist/seed/reviews-seed-data.js +6 -1
- package/dist/seed/site-settings-seed-data.d.ts +1 -38
- package/dist/seed/site-settings-seed-data.js +38 -76
- package/dist/seed/stores-seed-data.js +71 -1
- package/dist/seed/users-seed-data.js +15 -5
- package/dist/server-entry.d.ts +1 -2
- package/dist/server-entry.js +4 -3
- package/dist/server.d.ts +6 -3
- package/dist/server.js +13 -4
- package/dist/styles.css +78 -12
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Button.style.css +19 -4
- package/dist/ui/components/CollapsibleSection.d.ts +17 -1
- package/dist/ui/components/CollapsibleSection.js +6 -2
- package/dist/ui/components/FilterChipGroup.d.ts +25 -1
- package/dist/ui/components/FilterChipGroup.js +21 -4
- package/dist/ui/components/HandMode.style.css +47 -0
- package/dist/ui/components/Layout.d.ts +9 -2
- package/dist/ui/components/Layout.js +1 -1
- package/dist/ui/components/ListingLayout.js +8 -8
- package/dist/ui/components/ListingLayout.style.css +8 -7
- package/dist/ui/components/RecordDetailModal.d.ts +10 -1
- package/dist/ui/components/RecordDetailModal.js +2 -2
- package/dist/ui/components/StickyToolbar.d.ts +3 -1
- package/dist/ui/components/StickyToolbar.js +62 -20
- package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
- package/dist/ui/components/bottom-chrome-slot.js +29 -0
- package/dist/ui/components/index.style.css +3 -0
- package/dist/ui/forms/FormShell.d.ts +43 -13
- package/dist/ui/forms/FormShell.js +22 -11
- package/dist/ui/forms/index.d.ts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +2 -1
- package/scripts/node-esm-loader.mjs +65 -0
- package/scripts/seed-cli-loader.mjs +6 -49
- package/scripts/seed-cli.mjs +1 -1
|
@@ -2,8 +2,9 @@ import { normalizeError } from "../../../errors/normalize";
|
|
|
2
2
|
import { DatabaseError, NotFoundError } from "../../../errors";
|
|
3
3
|
import { BaseRepository, prepareForFirestore, parseSieveDateValue, } from "../../../providers/db-firebase";
|
|
4
4
|
import { decryptPiiFields, encryptPiiFields, ORDER_PII_FIELDS, } from "../../../security";
|
|
5
|
-
import { serverTimestamp } from "../../../contracts/field-ops";
|
|
6
|
-
import { createOrderId, ORDER_COLLECTION, OrderStatusValues, } from "../schemas";
|
|
5
|
+
import { serverTimestamp, arrayUnion } from "../../../contracts/field-ops";
|
|
6
|
+
import { createOrderId, ORDER_COLLECTION, ORDER_TRACKED_FIELDS, OrderStatusValues, } from "../schemas";
|
|
7
|
+
import { withHistory } from "../../../_internal/shared/history/index";
|
|
7
8
|
import { MANUAL_PAYMENT_METHODS, PAYMENT_REVIEW_QUEUE_SCAN_LIMIT, } from "../constants/payment-window";
|
|
8
9
|
import { ORDER_FIELDS } from "../../../constants/field-names";
|
|
9
10
|
/**
|
|
@@ -65,12 +66,49 @@ class OrderRepository extends BaseRepository {
|
|
|
65
66
|
async findPending() {
|
|
66
67
|
return this.findBy(ORDER_FIELDS.STATUS, "pending");
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Every write primitive below routes through this so `statusHistory` is
|
|
71
|
+
* appended at the SEVEN places a tracked field can change, rather than at
|
|
72
|
+
* the ~32 call sites above them. That is what makes order history a
|
|
73
|
+
* contained change instead of a codebase-wide sweep — and it follows the
|
|
74
|
+
* precedent `postRefundEvent` already set for append-only order data.
|
|
75
|
+
*
|
|
76
|
+
* `ctx` is optional throughout: a caller that has not been updated yet
|
|
77
|
+
* records `system` rather than failing, so this rolls out incrementally.
|
|
78
|
+
* The actor is worth passing wherever it is known — a history entry that
|
|
79
|
+
* cannot say who cancelled an order is a much weaker record.
|
|
80
|
+
*/
|
|
81
|
+
async updateWithHistory(orderId, patch, ctx, defaultTrigger,
|
|
82
|
+
/**
|
|
83
|
+
* The already-fetched document, when the caller has one. Three of the six
|
|
84
|
+
* write primitives (`markPicked`, `markCodCollected`, `postRefundEvent`)
|
|
85
|
+
* read the order before patching it — passing it through avoids a second
|
|
86
|
+
* read of the same document on every one of those writes, which matters
|
|
87
|
+
* against the Firestore daily read budget (Rule #6).
|
|
88
|
+
*/
|
|
89
|
+
known) {
|
|
90
|
+
const current = known !== undefined ? known : await this.findById(orderId);
|
|
91
|
+
const withEntry = withHistory(current, patch, {
|
|
92
|
+
tracked: ORDER_TRACKED_FIELDS,
|
|
93
|
+
actor: ctx?.actor ?? { role: "system" },
|
|
94
|
+
trigger: ctx?.trigger ?? defaultTrigger,
|
|
95
|
+
reason: ctx?.reason,
|
|
96
|
+
note: ctx?.note,
|
|
97
|
+
extraChanges: ctx?.extraChanges,
|
|
98
|
+
// `encryptPiiFields` is a flat top-level loop and never descends into
|
|
99
|
+
// arrays, so anything PII-named reaching `changes` would persist in
|
|
100
|
+
// PLAINTEXT inside statusHistory. None of ORDER_TRACKED_FIELDS is PII
|
|
101
|
+
// today — this is defence for the next field somebody adds.
|
|
102
|
+
piiFields: ORDER_PII_FIELDS,
|
|
103
|
+
historyField: "statusHistory",
|
|
104
|
+
truncatedField: "statusHistoryTruncated",
|
|
73
105
|
});
|
|
106
|
+
// `null` means no tracked field actually changed — write the patch as-is
|
|
107
|
+
// so an untracked update never grows the array.
|
|
108
|
+
return this.update(orderId, (withEntry ?? patch));
|
|
109
|
+
}
|
|
110
|
+
async updateStatus(orderId, status, additionalData, ctx) {
|
|
111
|
+
return this.updateWithHistory(orderId, { status, ...additionalData, updatedAt: new Date() }, ctx, "orderRepository.updateStatus");
|
|
74
112
|
}
|
|
75
113
|
async assignWorker(orderId, workerId) {
|
|
76
114
|
return this.update(orderId, { assignedWorkerId: workerId, updatedAt: new Date() });
|
|
@@ -78,12 +116,12 @@ class OrderRepository extends BaseRepository {
|
|
|
78
116
|
async unassignWorker(orderId) {
|
|
79
117
|
return this.update(orderId, { assignedWorkerId: undefined, updatedAt: new Date() });
|
|
80
118
|
}
|
|
81
|
-
async markPicked(orderId) {
|
|
119
|
+
async markPicked(orderId, ctx) {
|
|
82
120
|
const order = await this.findById(orderId);
|
|
83
121
|
if (!order)
|
|
84
122
|
throw new NotFoundError(`Order ${orderId} not found`);
|
|
85
123
|
const nextStatus = order.status === "confirmed" ? "processing" : order.status;
|
|
86
|
-
return this.
|
|
124
|
+
return this.updateWithHistory(orderId, { pickedAt: new Date(), status: nextStatus, updatedAt: new Date() }, ctx, "orderRepository.markPicked", order);
|
|
87
125
|
}
|
|
88
126
|
async markPacked(orderId) {
|
|
89
127
|
return this.update(orderId, { packedAt: new Date(), updatedAt: new Date() });
|
|
@@ -95,11 +133,11 @@ class OrderRepository extends BaseRepository {
|
|
|
95
133
|
* verify against, so `verifiedBy` is the acting user's uid and
|
|
96
134
|
* `verificationMethod` is always "cod_collection".
|
|
97
135
|
*/
|
|
98
|
-
async markCodCollected(orderId, verifiedBy, note) {
|
|
136
|
+
async markCodCollected(orderId, verifiedBy, note, ctx) {
|
|
99
137
|
const order = await this.findById(orderId);
|
|
100
138
|
if (!order)
|
|
101
139
|
throw new NotFoundError(`Order ${orderId} not found`);
|
|
102
|
-
return this.
|
|
140
|
+
return this.updateWithHistory(orderId, {
|
|
103
141
|
paymentStatus: "paid",
|
|
104
142
|
paymentRecord: {
|
|
105
143
|
method: "cod",
|
|
@@ -110,7 +148,10 @@ class OrderRepository extends BaseRepository {
|
|
|
110
148
|
verificationMethod: "cod_collection",
|
|
111
149
|
},
|
|
112
150
|
updatedAt: new Date(),
|
|
113
|
-
}
|
|
151
|
+
},
|
|
152
|
+
// `verifiedBy` is the acting user — use it unless the caller supplied a
|
|
153
|
+
// richer actor. Cash collection is always a person, never the system.
|
|
154
|
+
ctx ?? { actor: { uid: verifiedBy, role: "seller" }, note }, "orderRepository.markCodCollected", order);
|
|
114
155
|
}
|
|
115
156
|
async findFulfillmentQueue(storeId) {
|
|
116
157
|
const snap = await this.db
|
|
@@ -122,21 +163,25 @@ class OrderRepository extends BaseRepository {
|
|
|
122
163
|
.get();
|
|
123
164
|
return snap.docs.map((doc) => this.decryptOrder({ id: doc.id, ...doc.data() }));
|
|
124
165
|
}
|
|
125
|
-
async updatePaymentStatus(orderId, paymentStatus, paymentId) {
|
|
126
|
-
return this.
|
|
166
|
+
async updatePaymentStatus(orderId, paymentStatus, paymentId, ctx) {
|
|
167
|
+
return this.updateWithHistory(orderId, {
|
|
127
168
|
paymentStatus,
|
|
128
169
|
...(paymentId ? { paymentId } : {}),
|
|
129
170
|
updatedAt: new Date(),
|
|
130
|
-
});
|
|
171
|
+
}, ctx, "orderRepository.updatePaymentStatus");
|
|
131
172
|
}
|
|
132
|
-
async cancelOrder(orderId, reason, refundAmount) {
|
|
133
|
-
return this.
|
|
173
|
+
async cancelOrder(orderId, reason, refundAmount, ctx) {
|
|
174
|
+
return this.updateWithHistory(orderId, {
|
|
134
175
|
status: "cancelled",
|
|
135
176
|
cancellationDate: new Date(),
|
|
136
177
|
cancellationReason: reason,
|
|
137
178
|
...(refundAmount ? { refundAmount, refundStatus: "pending" } : {}),
|
|
138
179
|
updatedAt: new Date(),
|
|
139
|
-
}
|
|
180
|
+
},
|
|
181
|
+
// The cancellation reason is already a first-class argument here — carry
|
|
182
|
+
// it into the history entry so the timeline can say WHY, not just that
|
|
183
|
+
// it was cancelled.
|
|
184
|
+
{ ...ctx, reason: ctx?.reason ?? reason }, "orderRepository.cancelOrder");
|
|
140
185
|
}
|
|
141
186
|
async findRecentByUser(userId) {
|
|
142
187
|
const now = new Date();
|
|
@@ -251,17 +296,38 @@ class OrderRepository extends BaseRepository {
|
|
|
251
296
|
* Append one refund event to the order and mark it non-contestable.
|
|
252
297
|
* If `becomeRefunded` is true, also transitions the order status to "refunded".
|
|
253
298
|
*/
|
|
254
|
-
async postRefundEvent(orderId, event, becomeRefunded = false) {
|
|
299
|
+
async postRefundEvent(orderId, event, becomeRefunded = false, ctx) {
|
|
255
300
|
const order = await this.findById(orderId);
|
|
256
301
|
if (!order)
|
|
257
302
|
throw new NotFoundError(`Order ${orderId} not found`);
|
|
258
303
|
const existing = order.refunds ?? [];
|
|
259
|
-
return this.
|
|
304
|
+
return this.updateWithHistory(orderId, {
|
|
260
305
|
refunds: [...existing, event],
|
|
261
306
|
contestable: false,
|
|
262
307
|
...(becomeRefunded ? { status: "refunded" } : {}),
|
|
263
308
|
updatedAt: new Date(),
|
|
264
|
-
}
|
|
309
|
+
}, {
|
|
310
|
+
...ctx,
|
|
311
|
+
// The refund is contributed explicitly rather than diffed. A raw diff
|
|
312
|
+
// of `refunds[]` would say "an array of 1 became an array of 2" —
|
|
313
|
+
// true, and useless on a timeline. PARTIAL refunds matter as much as
|
|
314
|
+
// full ones here: a partial changes no tracked field at all, so
|
|
315
|
+
// without this it would leave no trace despite being exactly the kind
|
|
316
|
+
// of event a buyer later asks about.
|
|
317
|
+
extraChanges: {
|
|
318
|
+
refund: {
|
|
319
|
+
from: null,
|
|
320
|
+
to: {
|
|
321
|
+
refundId: event.refundId,
|
|
322
|
+
type: event.type,
|
|
323
|
+
amount: event.amount,
|
|
324
|
+
reason: event.reason,
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
actor: ctx?.actor ?? { uid: event.refundedBy, role: "admin" },
|
|
329
|
+
reason: ctx?.reason ?? event.reason,
|
|
330
|
+
}, "orderRepository.postRefundEvent", order);
|
|
265
331
|
}
|
|
266
332
|
/** Fetch all orders sharing a paymentBatchId (for sibling-orders display). */
|
|
267
333
|
async findByPaymentBatchId(batchId) {
|
|
@@ -469,19 +535,52 @@ class OrderRepository extends BaseRepository {
|
|
|
469
535
|
payoutStatus: "requested",
|
|
470
536
|
payoutId,
|
|
471
537
|
updatedAt: serverTimestamp(),
|
|
538
|
+
...this.batchHistoryPatch({
|
|
539
|
+
changes: { payoutStatus: { from: "eligible", to: "requested" } },
|
|
540
|
+
trigger: "orderRepository.markPayoutRequested",
|
|
541
|
+
}),
|
|
472
542
|
});
|
|
473
543
|
}
|
|
474
544
|
/**
|
|
475
545
|
* Cloud Functions: stage a cancellation update into a caller-owned WriteBatch.
|
|
546
|
+
*
|
|
547
|
+
* `fromStatus` is supplied by the caller because a batch write does no read
|
|
548
|
+
* — but the sweep that calls this already filtered on a status, so it knows
|
|
549
|
+
* the value. Passing it beats recording `null` for something that is
|
|
550
|
+
* genuinely known one stack frame up.
|
|
476
551
|
*/
|
|
477
|
-
cancelInBatch(batch, ref) {
|
|
552
|
+
cancelInBatch(batch, ref, fromStatus = null) {
|
|
478
553
|
batch.update(ref, {
|
|
479
554
|
status: OrderStatusValues.CANCELLED,
|
|
480
555
|
cancellationDate: new Date(),
|
|
481
556
|
cancellationReason: "payment_timeout",
|
|
482
557
|
updatedAt: serverTimestamp(),
|
|
558
|
+
...this.batchHistoryPatch({
|
|
559
|
+
changes: { status: { from: fromStatus, to: OrderStatusValues.CANCELLED } },
|
|
560
|
+
reason: "payment_timeout",
|
|
561
|
+
trigger: "orderRepository.cancelInBatch",
|
|
562
|
+
}),
|
|
483
563
|
});
|
|
484
564
|
}
|
|
565
|
+
/**
|
|
566
|
+
* History append for the two WriteBatch paths, which cannot read-then-diff.
|
|
567
|
+
*
|
|
568
|
+
* Uses `arrayUnion` so the entry lands without a prior read. The FIFO cap
|
|
569
|
+
* therefore is NOT applied here — it is enforced on the next ordinary
|
|
570
|
+
* write. That is an acceptable trade: both batch paths are terminal
|
|
571
|
+
* transitions (cancelled, payout-requested) that fire at most once per
|
|
572
|
+
* order, so they cannot be what overflows the array.
|
|
573
|
+
*/
|
|
574
|
+
batchHistoryPatch(input) {
|
|
575
|
+
const entry = {
|
|
576
|
+
at: new Date(),
|
|
577
|
+
actorRole: "system",
|
|
578
|
+
changes: input.changes,
|
|
579
|
+
trigger: input.trigger,
|
|
580
|
+
...(input.reason ? { reason: input.reason } : {}),
|
|
581
|
+
};
|
|
582
|
+
return { statusHistory: arrayUnion(entry) };
|
|
583
|
+
}
|
|
485
584
|
}
|
|
486
585
|
OrderRepository.SELLER_SIEVE_FIELDS = {
|
|
487
586
|
id: { canFilter: true, canSort: false },
|
|
@@ -5,6 +5,94 @@ import type { OrderStatus, PaymentStatus } from "../types";
|
|
|
5
5
|
import type { OrderType } from "../utils/order-splitter";
|
|
6
6
|
import type { BaseDocument } from "../../../_internal/shared/types/base-document";
|
|
7
7
|
import type { ListingType } from "../../products/types";
|
|
8
|
+
import type { StatusChangeEntry } from "../../../_internal/shared/history/index";
|
|
9
|
+
export interface OrderSourceStandard {
|
|
10
|
+
path: "standard";
|
|
11
|
+
listPrice: number;
|
|
12
|
+
}
|
|
13
|
+
export interface OrderSourceAuctionWon {
|
|
14
|
+
path: "auction-won";
|
|
15
|
+
auctionId: string;
|
|
16
|
+
bidId: string;
|
|
17
|
+
winningBidAmount: number;
|
|
18
|
+
/** Bids placed across the whole auction — the "against N bidders" figure. */
|
|
19
|
+
bidCount: number;
|
|
20
|
+
startingBid: number;
|
|
21
|
+
reservePrice?: number;
|
|
22
|
+
reserveMet: boolean;
|
|
23
|
+
auctionEndedAt: Date;
|
|
24
|
+
/** Second-highest bid, when there was one. */
|
|
25
|
+
runnerUpAmount?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A buyout is a REAL BID, not a bid-free purchase.
|
|
29
|
+
*
|
|
30
|
+
* An earlier draft of this type asserted "zero bids BY DEFINITION, because
|
|
31
|
+
* buy-now is only valid while `!bidsHaveStarted`". That gate no longer
|
|
32
|
+
* exists: `buyNowAuction` places an actual `BidDocument` (`isBuyout: true`)
|
|
33
|
+
* plus a 1h locked cart line and leaves the auction **live**, and Buy Now is
|
|
34
|
+
* offered whenever `buyNowPrice` still beats the standing bid. Recording
|
|
35
|
+
* `bidCount: 0` would bake a falsehood into an immutable audit record.
|
|
36
|
+
*
|
|
37
|
+
* `standingBidAtBuyout` is the highest NON-buyout bid the buyout beat — read
|
|
38
|
+
* from the bids rather than `product.currentBid`, because a pending buyout
|
|
39
|
+
* deliberately never writes to that mirror.
|
|
40
|
+
*
|
|
41
|
+
* An unpaid buyout lapses to **`cancelled`**, not `forfeited`, and the seller
|
|
42
|
+
* is deliberately not notified: nothing was ever sold. That makes its
|
|
43
|
+
* timeline materially different from a lapsed auction win.
|
|
44
|
+
*/
|
|
45
|
+
export interface OrderSourceAuctionBuyNow {
|
|
46
|
+
path: "auction-buy-now";
|
|
47
|
+
auctionId: string;
|
|
48
|
+
/** The buyout bid itself — a buyout IS a bid. */
|
|
49
|
+
bidId: string;
|
|
50
|
+
buyNowPrice: number;
|
|
51
|
+
listPrice: number;
|
|
52
|
+
/** Highest non-buyout bid at the moment of buyout. 0 when nobody had bid. */
|
|
53
|
+
standingBidAtBuyout: number;
|
|
54
|
+
/** Active non-buyout bids at buyout time. NOT always zero. */
|
|
55
|
+
bidCount: number;
|
|
56
|
+
boughtAt: Date;
|
|
57
|
+
/** `min(now + AUCTION_BUYOUT_WINDOW_MS, auctionEndDate)`. */
|
|
58
|
+
checkoutDeadline: Date;
|
|
59
|
+
auctionEndDate?: Date;
|
|
60
|
+
}
|
|
61
|
+
export interface OrderSourceOfferAccepted {
|
|
62
|
+
path: "offer-accepted";
|
|
63
|
+
offerId: string;
|
|
64
|
+
offeredAmount: number;
|
|
65
|
+
/** The asking price at the moment the offer was made. */
|
|
66
|
+
listPriceAtOffer: number;
|
|
67
|
+
counterAmount?: number;
|
|
68
|
+
/**
|
|
69
|
+
* How many counter rounds before agreement. 1 = accepted outright.
|
|
70
|
+
*
|
|
71
|
+
* Read straight off the accepted offer's `counterRound`, which W2 made a
|
|
72
|
+
* persisted field. Before that this number was **unknowable**: each counter
|
|
73
|
+
* created an unlinked document and `previousOfferId` lived only inside a
|
|
74
|
+
* `serverLogger.info` call, so a three-round negotiation left no trace of
|
|
75
|
+
* having been one.
|
|
76
|
+
*/
|
|
77
|
+
counterRounds: number;
|
|
78
|
+
acceptedBy: string;
|
|
79
|
+
acceptedAt: Date;
|
|
80
|
+
checkoutDeadline?: Date;
|
|
81
|
+
}
|
|
82
|
+
export interface OrderSourcePreOrder {
|
|
83
|
+
path: "pre-order";
|
|
84
|
+
depositAmount: number;
|
|
85
|
+
balanceDue: number;
|
|
86
|
+
expectedDeliveryDate?: Date;
|
|
87
|
+
}
|
|
88
|
+
export interface OrderSourcePrizeDraw {
|
|
89
|
+
path: "prize-draw";
|
|
90
|
+
prizeDrawProductId: string;
|
|
91
|
+
pricePerEntry: number;
|
|
92
|
+
entryCount: number;
|
|
93
|
+
revealMode: "instant" | "scheduled";
|
|
94
|
+
}
|
|
95
|
+
export type OrderSourceContext = OrderSourceStandard | OrderSourceAuctionWon | OrderSourceAuctionBuyNow | OrderSourceOfferAccepted | OrderSourcePreOrder | OrderSourcePrizeDraw;
|
|
8
96
|
/** Manual shipping is the only supported method — sellers enter carrier + tracking directly, no carrier API integration. */
|
|
9
97
|
export type ShippingMethod = "custom";
|
|
10
98
|
export type RefundType = "full" | "partial";
|
|
@@ -150,6 +238,18 @@ export interface OrderDocument extends BaseDocument {
|
|
|
150
238
|
storeName?: string;
|
|
151
239
|
items?: OrderDocumentItem[];
|
|
152
240
|
orderType?: OrderType;
|
|
241
|
+
/**
|
|
242
|
+
* True when this `orderType: "auction"` order came from Buy Now rather than
|
|
243
|
+
* from winning the bidding.
|
|
244
|
+
*
|
|
245
|
+
* Not a new `orderType` value on purpose — the /user/orders tabs key on
|
|
246
|
+
* `orderType`, and a buyout IS an auction order from the buyer's point of
|
|
247
|
+
* view. What it changes is the ADMIN review window: a buyout is settled in a
|
|
248
|
+
* one-hour scramble against a still-live auction, so `paymentReviewAutoApprove`
|
|
249
|
+
* gives an admin a full day to verify its proof instead of the usual couple of
|
|
250
|
+
* hours before auto-approving.
|
|
251
|
+
*/
|
|
252
|
+
isBuyout?: boolean;
|
|
153
253
|
imageUrls?: string[];
|
|
154
254
|
quantity: number;
|
|
155
255
|
unitPrice: number;
|
|
@@ -248,6 +348,37 @@ export interface OrderDocument extends BaseDocument {
|
|
|
248
348
|
* orders are the source of truth for invoicing, refunds, and disputes.
|
|
249
349
|
*/
|
|
250
350
|
paymentBatchId?: string;
|
|
351
|
+
/**
|
|
352
|
+
* Append-only delta log of every tracked-field change on this order —
|
|
353
|
+
* who, when, from what to what, and which function did it.
|
|
354
|
+
*
|
|
355
|
+
* DELTAS, never snapshots: only `statusHistory[0]` (the creation entry)
|
|
356
|
+
* carries a `snapshot`, holding the provenance that cannot be re-derived
|
|
357
|
+
* later because its sources move on — the discounts and add-ons actually
|
|
358
|
+
* applied and the fee breakdown at the moment of purchase.
|
|
359
|
+
*
|
|
360
|
+
* Capped at `STATUS_HISTORY_MAX` (FIFO). An unbounded array on a document
|
|
361
|
+
* this hot inflates every read of it (Rule #6).
|
|
362
|
+
*/
|
|
363
|
+
statusHistory?: StatusChangeEntry[];
|
|
364
|
+
/**
|
|
365
|
+
* Entries dropped off the front of `statusHistory` over this order's
|
|
366
|
+
* lifetime. Present so the UI can say "earlier history trimmed" instead
|
|
367
|
+
* of implying the order simply had no earlier history.
|
|
368
|
+
*/
|
|
369
|
+
statusHistoryTruncated?: number;
|
|
370
|
+
/**
|
|
371
|
+
* How the buyer acquired the right to buy, written ONCE at creation.
|
|
372
|
+
*
|
|
373
|
+
* A discriminated union rather than optional fields, because `orderType`
|
|
374
|
+
* cannot distinguish an auction that was WON from one that was BOUGHT OUT
|
|
375
|
+
* — both are `"auction"` — and `winningBidAmount`/`bidCount` are
|
|
376
|
+
* meaningless on a buy-now, where there are zero bids by definition.
|
|
377
|
+
*
|
|
378
|
+
* Never recomputed: a settled auction's numbers must not move when the
|
|
379
|
+
* auction document is later archived or the product is re-priced.
|
|
380
|
+
*/
|
|
381
|
+
sourceContext?: OrderSourceContext;
|
|
251
382
|
/**
|
|
252
383
|
* Append-only log of refund events on this order. Multiple partial refund
|
|
253
384
|
* events are allowed until the cumulative amount equals `totalPrice`.
|
|
@@ -384,6 +515,27 @@ export declare const ORDER_INDEXED_FIELDS: readonly ["userId", "productId", "sto
|
|
|
384
515
|
export declare const DEFAULT_ORDER_DATA: Partial<OrderDocument>;
|
|
385
516
|
export declare const ORDER_PUBLIC_FIELDS: readonly ["id", "productId", "productTitle", "quantity", "unitPrice", "totalPrice", "currency", "status", "paymentStatus", "shippingAddress", "trackingNumber", "notes", "orderDate", "shippingDate", "deliveryDate", "createdAt"];
|
|
386
517
|
export declare const ORDER_UPDATABLE_FIELDS: readonly ["notes", "shippingAddress"];
|
|
518
|
+
/**
|
|
519
|
+
* The fields whose changes are recorded in `statusHistory`.
|
|
520
|
+
*
|
|
521
|
+
* Deliberately minimal — the timeline answers "where is my order and what
|
|
522
|
+
* happened to it", nothing else.
|
|
523
|
+
*
|
|
524
|
+
* **Money is NOT tracked here.** `appliedDiscounts`, `storeAddons` and the
|
|
525
|
+
* fee fields hold the FINAL state on the order document, and that is the
|
|
526
|
+
* record. Logging every intermediate coupon/add-on change would bury the five
|
|
527
|
+
* transitions anyone actually reads under pricing churn, and a coupon that
|
|
528
|
+
* was dropped before the order existed is not part of the order's history.
|
|
529
|
+
*
|
|
530
|
+
* **Acquisition is NOT tracked here either** — how the buyer got the right to
|
|
531
|
+
* buy (auction won, offer accepted, bought out) is written once to
|
|
532
|
+
* `sourceContext` at creation. It never changes, so it is not a timeline
|
|
533
|
+
* event.
|
|
534
|
+
*
|
|
535
|
+
* A whole-document diff would append an entry for every `updatedAt` bump —
|
|
536
|
+
* which is every single write — and exhaust the FIFO cap within days.
|
|
537
|
+
*/
|
|
538
|
+
export declare const ORDER_TRACKED_FIELDS: readonly ["status", "paymentStatus", "paymentReviewOutcome", "trackingNumber", "cancellationReason"];
|
|
387
539
|
export type OrderCreateInput = Omit<OrderDocument, "id" | "createdAt" | "updatedAt" | "orderDate">;
|
|
388
540
|
export type OrderUpdateInput = Partial<Pick<OrderDocument, (typeof ORDER_UPDATABLE_FIELDS)[number]>>;
|
|
389
541
|
export type OrderAdminUpdateInput = Partial<Omit<OrderDocument, "id" | "createdAt">>;
|
|
@@ -88,6 +88,36 @@ export const ORDER_PUBLIC_FIELDS = [
|
|
|
88
88
|
"createdAt",
|
|
89
89
|
];
|
|
90
90
|
export const ORDER_UPDATABLE_FIELDS = ["notes", "shippingAddress"];
|
|
91
|
+
/**
|
|
92
|
+
* The fields whose changes are recorded in `statusHistory`.
|
|
93
|
+
*
|
|
94
|
+
* Deliberately minimal — the timeline answers "where is my order and what
|
|
95
|
+
* happened to it", nothing else.
|
|
96
|
+
*
|
|
97
|
+
* **Money is NOT tracked here.** `appliedDiscounts`, `storeAddons` and the
|
|
98
|
+
* fee fields hold the FINAL state on the order document, and that is the
|
|
99
|
+
* record. Logging every intermediate coupon/add-on change would bury the five
|
|
100
|
+
* transitions anyone actually reads under pricing churn, and a coupon that
|
|
101
|
+
* was dropped before the order existed is not part of the order's history.
|
|
102
|
+
*
|
|
103
|
+
* **Acquisition is NOT tracked here either** — how the buyer got the right to
|
|
104
|
+
* buy (auction won, offer accepted, bought out) is written once to
|
|
105
|
+
* `sourceContext` at creation. It never changes, so it is not a timeline
|
|
106
|
+
* event.
|
|
107
|
+
*
|
|
108
|
+
* A whole-document diff would append an entry for every `updatedAt` bump —
|
|
109
|
+
* which is every single write — and exhaust the FIFO cap within days.
|
|
110
|
+
*/
|
|
111
|
+
export const ORDER_TRACKED_FIELDS = [
|
|
112
|
+
"status",
|
|
113
|
+
"paymentStatus",
|
|
114
|
+
/** Manual-payment review: proof verified, re-upload requested, rejected. */
|
|
115
|
+
"paymentReviewOutcome",
|
|
116
|
+
/** The substance of the "shipped" transition. */
|
|
117
|
+
"trackingNumber",
|
|
118
|
+
/** Why it was cancelled — a bare "cancelled" is not a useful entry. */
|
|
119
|
+
"cancellationReason",
|
|
120
|
+
];
|
|
91
121
|
export const orderQueryHelpers = {
|
|
92
122
|
byUser: (userId) => ["userId", "==", userId],
|
|
93
123
|
byStore: (storeId) => ["storeId", "==", storeId],
|
|
@@ -562,14 +562,7 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
562
562
|
platformFee?: number | undefined;
|
|
563
563
|
paymentMethod?: string | undefined;
|
|
564
564
|
notes?: string | undefined;
|
|
565
|
-
storeName?: string | undefined;
|
|
566
565
|
prizeRevealMode?: "scheduled" | "instant" | undefined;
|
|
567
|
-
physicalLocation?: {
|
|
568
|
-
zone: string;
|
|
569
|
-
shelf: string;
|
|
570
|
-
bin: string;
|
|
571
|
-
} | undefined;
|
|
572
|
-
payoutStatus?: "paid" | "eligible" | "requested" | undefined;
|
|
573
566
|
paymentId?: string | undefined;
|
|
574
567
|
shippingAddress?: string | undefined;
|
|
575
568
|
trackingNumber?: string | undefined;
|
|
@@ -588,6 +581,7 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
588
581
|
depositAmount?: number | undefined;
|
|
589
582
|
codRemainingAmount?: number | undefined;
|
|
590
583
|
shippingFee?: number | undefined;
|
|
584
|
+
payoutStatus?: "paid" | "eligible" | "requested" | undefined;
|
|
591
585
|
payoutId?: string | undefined;
|
|
592
586
|
shippingMethod?: "custom" | undefined;
|
|
593
587
|
shippingCarrier?: string | undefined;
|
|
@@ -611,9 +605,13 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
611
605
|
}, z.ZodTypeAny, "passthrough">;
|
|
612
606
|
} | undefined;
|
|
613
607
|
prizeDrawProductId?: string | undefined;
|
|
608
|
+
storeName?: string | undefined;
|
|
614
609
|
couponCode?: string | undefined;
|
|
615
|
-
|
|
616
|
-
|
|
610
|
+
physicalLocation?: {
|
|
611
|
+
zone: string;
|
|
612
|
+
shelf: string;
|
|
613
|
+
bin: string;
|
|
614
|
+
} | undefined;
|
|
617
615
|
orderType?: string | undefined;
|
|
618
616
|
imageUrls?: string[] | undefined;
|
|
619
617
|
refundFeeDeducted?: number | undefined;
|
|
@@ -629,6 +627,8 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
629
627
|
couponId?: string | undefined;
|
|
630
628
|
}[] | undefined;
|
|
631
629
|
codHandlingFee?: number | undefined;
|
|
630
|
+
emiEnabled?: boolean | undefined;
|
|
631
|
+
emiTenureMonths?: number | undefined;
|
|
632
632
|
emiTokenAmount?: number | undefined;
|
|
633
633
|
emiSurchargeAmount?: number | undefined;
|
|
634
634
|
emiInstallments?: {
|
|
@@ -710,14 +710,7 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
710
710
|
platformFee?: number | undefined;
|
|
711
711
|
paymentMethod?: string | undefined;
|
|
712
712
|
notes?: string | undefined;
|
|
713
|
-
storeName?: string | undefined;
|
|
714
713
|
prizeRevealMode?: "scheduled" | "instant" | undefined;
|
|
715
|
-
physicalLocation?: {
|
|
716
|
-
zone: string;
|
|
717
|
-
shelf: string;
|
|
718
|
-
bin: string;
|
|
719
|
-
} | undefined;
|
|
720
|
-
payoutStatus?: "paid" | "eligible" | "requested" | undefined;
|
|
721
714
|
paymentId?: string | undefined;
|
|
722
715
|
shippingAddress?: string | undefined;
|
|
723
716
|
trackingNumber?: string | undefined;
|
|
@@ -736,6 +729,7 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
736
729
|
depositAmount?: number | undefined;
|
|
737
730
|
codRemainingAmount?: number | undefined;
|
|
738
731
|
shippingFee?: number | undefined;
|
|
732
|
+
payoutStatus?: "paid" | "eligible" | "requested" | undefined;
|
|
739
733
|
payoutId?: string | undefined;
|
|
740
734
|
shippingMethod?: "custom" | undefined;
|
|
741
735
|
shippingCarrier?: string | undefined;
|
|
@@ -759,9 +753,13 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
759
753
|
}, z.ZodTypeAny, "passthrough">;
|
|
760
754
|
} | undefined;
|
|
761
755
|
prizeDrawProductId?: string | undefined;
|
|
756
|
+
storeName?: string | undefined;
|
|
762
757
|
couponCode?: string | undefined;
|
|
763
|
-
|
|
764
|
-
|
|
758
|
+
physicalLocation?: {
|
|
759
|
+
zone: string;
|
|
760
|
+
shelf: string;
|
|
761
|
+
bin: string;
|
|
762
|
+
} | undefined;
|
|
765
763
|
orderType?: string | undefined;
|
|
766
764
|
imageUrls?: string[] | undefined;
|
|
767
765
|
refundFeeDeducted?: number | undefined;
|
|
@@ -777,6 +775,8 @@ export declare const orderFirestoreSchema: z.ZodObject<{
|
|
|
777
775
|
couponId?: string | undefined;
|
|
778
776
|
}[] | undefined;
|
|
779
777
|
codHandlingFee?: number | undefined;
|
|
778
|
+
emiEnabled?: boolean | undefined;
|
|
779
|
+
emiTenureMonths?: number | undefined;
|
|
780
780
|
emiTokenAmount?: number | undefined;
|
|
781
781
|
emiSurchargeAmount?: number | undefined;
|
|
782
782
|
emiInstallments?: {
|
|
@@ -2,7 +2,8 @@ import { type PaymentGateway, PaymentGatewayValues } from "../../payments/schema
|
|
|
2
2
|
export { type PaymentGateway, PaymentGatewayValues };
|
|
3
3
|
import type { ListingType } from "../../products/types/index";
|
|
4
4
|
import type { OrderType } from "../utils/order-splitter";
|
|
5
|
-
import type { AppliedOrderDiscount } from "../schemas/firestore";
|
|
5
|
+
import type { AppliedOrderDiscount, OrderSourceContext } from "../schemas/firestore";
|
|
6
|
+
import type { FieldChange } from "../../../_internal/shared/history/index";
|
|
6
7
|
export type PaymentStatus = "pending" | "processing" | "paid" | "failed" | "refunded" | "partial_refund";
|
|
7
8
|
export interface UserAddress {
|
|
8
9
|
id: string;
|
|
@@ -46,12 +47,34 @@ export interface OrderItem {
|
|
|
46
47
|
/** Snapshot of bundle.bundleProductIds at order-creation time. */
|
|
47
48
|
bundleProductIds?: string[];
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
/**
|
|
51
|
+
* One entry on an order's timeline — the client-facing shape of
|
|
52
|
+
* `StatusChangeEntry`, with dates as ISO strings.
|
|
53
|
+
*
|
|
54
|
+
* The previous declaration here was `{status, message?, timestamp, actor?}`
|
|
55
|
+
* and had **zero writers** in the entire codebase since the day it was
|
|
56
|
+
* added, so nothing depended on it. `OrderStatusTimeline` synthesised its
|
|
57
|
+
* steps from four scalar date fields instead, which meant any transition
|
|
58
|
+
* without a dedicated date field — payment reviewed, proof re-upload asked
|
|
59
|
+
* for, a partial refund posted — could not appear at all.
|
|
60
|
+
*/
|
|
61
|
+
export interface OrderTimelineEntry {
|
|
62
|
+
at: string;
|
|
63
|
+
actorUid?: string;
|
|
64
|
+
actorRole: "buyer" | "seller" | "admin" | "system";
|
|
65
|
+
/**
|
|
66
|
+
* Delta only: `{ status: { from: "confirmed", to: "shipped" } }`.
|
|
67
|
+
* Reuses the primitive's `FieldChange` rather than restating the shape, so
|
|
68
|
+
* the client type cannot drift from what the repository writes.
|
|
69
|
+
*/
|
|
70
|
+
changes: Record<string, FieldChange>;
|
|
71
|
+
reason?: string;
|
|
72
|
+
note?: string;
|
|
73
|
+
/** The function or job that caused it — what the timeline renders by. */
|
|
74
|
+
trigger: string;
|
|
54
75
|
}
|
|
76
|
+
/** @deprecated Use {@link OrderTimelineEntry}. Kept only to avoid breaking a stale import. */
|
|
77
|
+
export type OrderTimeline = OrderTimelineEntry;
|
|
55
78
|
export interface Order {
|
|
56
79
|
id: string;
|
|
57
80
|
userId: string;
|
|
@@ -108,7 +131,12 @@ export interface Order {
|
|
|
108
131
|
/** Carrier tracking page URL — rendered as an external link that opens in a new tab. No live-tracking API integration; this is just the passthrough URL a seller/admin entered. */
|
|
109
132
|
trackingUrl?: string;
|
|
110
133
|
notes?: string;
|
|
111
|
-
|
|
134
|
+
/** Real recorded transitions — see {@link OrderTimelineEntry}. */
|
|
135
|
+
timeline?: OrderTimelineEntry[];
|
|
136
|
+
/** Entries trimmed off the front of the capped history, if any. */
|
|
137
|
+
timelineTruncated?: number;
|
|
138
|
+
/** How the buyer acquired the right to buy. Written once, at creation. */
|
|
139
|
+
sourceContext?: OrderSourceContext;
|
|
112
140
|
physicalLocation?: {
|
|
113
141
|
zone: string;
|
|
114
142
|
shelf: string;
|