@mohasinac/appkit 4.58.0 → 4.60.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/.build-stamp.json +3 -3
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
- package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
- package/dist/_internal/server/features/brands/actions.js +78 -4
- package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
- package/dist/_internal/server/features/checkout/actions.js +668 -183
- package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
- package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
- package/dist/_internal/server/features/gateway-events/index.js +10 -0
- package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
- package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
- package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
- package/dist/_internal/server/features/gateway-events/redact.js +151 -0
- package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
- package/dist/_internal/server/features/grievance/actions.js +173 -0
- package/dist/_internal/server/features/grievance/index.d.ts +8 -0
- package/dist/_internal/server/features/grievance/index.js +8 -0
- package/dist/_internal/server/features/grouped/data.js +28 -3
- package/dist/_internal/server/features/lottery/actions.js +99 -4
- package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
- package/dist/_internal/server/features/order-completion/actions.js +336 -0
- package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
- package/dist/_internal/server/features/order-completion/index.js +7 -0
- package/dist/_internal/server/features/orders/actions.d.ts +13 -0
- package/dist/_internal/server/features/orders/actions.js +56 -2
- package/dist/_internal/server/features/orders/adapters.js +26 -0
- package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
- package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
- package/dist/_internal/server/features/orders/index.d.ts +2 -1
- package/dist/_internal/server/features/orders/index.js +1 -1
- package/dist/_internal/server/features/orders/service.d.ts +60 -0
- package/dist/_internal/server/features/orders/service.js +74 -0
- package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
- package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
- package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
- package/dist/_internal/server/features/payment-cases/index.js +9 -0
- package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
- package/dist/_internal/server/features/payouts/actions.js +84 -10
- package/dist/_internal/server/features/points/adjust.d.ts +61 -0
- package/dist/_internal/server/features/points/adjust.js +121 -0
- package/dist/_internal/server/features/points/award.d.ts +65 -0
- package/dist/_internal/server/features/points/award.js +145 -0
- package/dist/_internal/server/features/price-index/market.d.ts +33 -0
- package/dist/_internal/server/features/price-index/market.js +54 -1
- package/dist/_internal/server/features/products/data.js +40 -22
- package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
- package/dist/_internal/server/features/protection-claims/actions.js +228 -0
- package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
- package/dist/_internal/server/features/protection-claims/index.js +8 -0
- package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
- package/dist/_internal/server/features/refunds/actions.js +259 -17
- package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
- package/dist/_internal/server/features/refunds/capacity.js +37 -0
- package/dist/_internal/server/features/reviews/actions.js +3 -2
- package/dist/_internal/server/features/search/index-build/sources.js +20 -1
- package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
- package/dist/_internal/server/features/shipping/reconcile.js +34 -3
- package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
- package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
- package/dist/_internal/server/features/stores/tabs.js +24 -4
- package/dist/_internal/server/functions/https.d.ts +31 -1
- package/dist/_internal/server/functions/https.js +52 -1
- package/dist/_internal/server/functions/scheduled.d.ts +72 -1
- package/dist/_internal/server/functions/scheduled.js +124 -1
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
- package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
- package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
- package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
- package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
- package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
- package/dist/_internal/server/jobs/core/index.d.ts +2 -0
- package/dist/_internal/server/jobs/core/index.js +2 -0
- package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
- package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
- package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
- package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
- package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
- package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
- package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
- package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
- package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
- package/dist/_internal/server/jobs/handlers/index.js +5 -0
- package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
- package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
- package/dist/_internal/server/jobs/handlers/messages.js +1 -1
- package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
- package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
- package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +71 -0
- package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
- package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
- package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
- package/dist/_internal/shared/checkout/lanes.js +46 -0
- package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
- package/dist/_internal/shared/checkout/order-math.js +251 -3
- package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
- package/dist/_internal/shared/checkout/refundable-base.js +122 -0
- package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
- package/dist/_internal/shared/features/auctions/config.js +30 -1
- package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
- package/dist/_internal/shared/features/brands/schema.js +18 -0
- package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
- package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
- package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
- package/dist/_internal/shared/features/print/label-profiles.js +350 -0
- package/dist/_internal/shared/features/products/to-product-item.js +33 -5
- package/dist/_internal/shared/fees/calculator.d.ts +31 -2
- package/dist/_internal/shared/fees/calculator.js +103 -5
- package/dist/_internal/shared/fees/india-states.d.ts +195 -0
- package/dist/_internal/shared/fees/india-states.js +190 -0
- package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
- package/dist/_internal/shared/fees/payout-hold.js +74 -0
- package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
- package/dist/_internal/shared/obligations/deadlines.js +155 -0
- package/dist/_internal/shared/shipping/quote.d.ts +96 -0
- package/dist/_internal/shared/shipping/quote.js +67 -0
- package/dist/_internal/shared/time/business-days.d.ts +91 -0
- package/dist/_internal/shared/time/business-days.js +185 -0
- package/dist/_internal/shared/types/base-document.d.ts +1 -1
- package/dist/cli/index.js +0 -2
- package/dist/client.d.ts +9 -4
- package/dist/client.js +26 -3
- package/dist/configs/tailwind.d.ts +0 -12
- package/dist/configs/tailwind.js +28 -15
- package/dist/constants/api-endpoints.d.ts +51 -9
- package/dist/constants/api-endpoints.js +23 -7
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/constants/seed-meta.d.ts +113 -0
- package/dist/constants/seed-meta.js +91 -0
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/payment.d.ts +131 -0
- package/dist/features/about/components/AboutView.js +1 -1
- package/dist/features/about/components/DeveloperView.js +5 -2
- package/dist/features/about/components/FAQPageView.js +2 -1
- package/dist/features/about/components/FeesView.js +2 -1
- package/dist/features/about/components/HelpPageView.js +2 -1
- package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
- package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
- package/dist/features/about/components/HowEmiWorksView.js +2 -1
- package/dist/features/about/components/HowOffersWorkView.js +2 -1
- package/dist/features/about/components/HowOrdersWorkView.js +2 -1
- package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
- package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
- package/dist/features/about/components/HowReviewsWorkView.js +2 -1
- package/dist/features/about/components/PolicyPageView.js +2 -1
- package/dist/features/about/components/ProseHero.d.ts +73 -0
- package/dist/features/about/components/ProseHero.js +18 -0
- package/dist/features/about/components/SecurityPrivacyView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +2 -1
- package/dist/features/about/components/TrackOrderView.js +2 -1
- package/dist/features/about/components/UnauthorizedView.js +1 -1
- package/dist/features/about/index.d.ts +2 -0
- package/dist/features/about/index.js +5 -0
- package/dist/features/account/actions/address-actions.d.ts +26 -2
- package/dist/features/account/actions/address-actions.js +25 -1
- package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
- package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
- package/dist/features/account/components/UserOrdersView.js +17 -0
- package/dist/features/account/components/UserSidebar.js +1 -1
- package/dist/features/account/hooks/useNotifications.js +29 -0
- package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
- package/dist/features/admin/components/AdminBeysView.js +2 -2
- package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
- package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
- package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
- package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
- package/dist/features/admin/components/AdminCategoriesView.js +1 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
- package/dist/features/admin/components/AdminContactEditorView.js +1 -1
- package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
- package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
- package/dist/features/admin/components/AdminFaqsView.js +2 -2
- package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
- package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
- package/dist/features/admin/components/AdminGuideHubView.js +1 -1
- package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
- package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
- package/dist/features/admin/components/AdminPartsView.js +2 -2
- package/dist/features/admin/components/AdminProductsView.js +75 -4
- package/dist/features/admin/components/AdminSidebar.js +2 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
- package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
- package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
- package/dist/features/admin/components/AdminUsersView.js +72 -1
- package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
- package/dist/features/admin/components/AdminViewCards.js +4 -4
- package/dist/features/admin/components/DataListingView.d.ts +28 -0
- package/dist/features/admin/components/DataListingView.js +175 -14
- package/dist/features/admin/components/DataTable.d.ts +12 -1
- package/dist/features/admin/components/DataTable.js +3 -3
- package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
- package/dist/features/admin/components/OwnerQuickActions.js +60 -2
- package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
- package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
- package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
- package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
- package/dist/features/admin/components/index.d.ts +4 -0
- package/dist/features/admin/components/index.js +6 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
- package/dist/features/admin/constants/filter-tabs.js +106 -0
- package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
- package/dist/features/admin/repository/site-settings.repository.js +82 -1
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
- package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
- package/dist/features/admin/schemas/firestore.js +5 -1
- package/dist/features/admin/schemas/site-settings-form.js +30 -1
- package/dist/features/auctions/actions/bid-actions.js +13 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
- package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
- package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
- package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
- package/dist/features/audit-log/schemas/firestore.js +14 -0
- package/dist/features/auth/permissions/constants.d.ts +17 -1
- package/dist/features/auth/permissions/constants.js +18 -0
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
- package/dist/features/categories/api/[id]/description-template/route.js +107 -1
- package/dist/features/categories/components/BrandDetailPageView.js +2 -2
- package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
- package/dist/features/categories/components/BundleDetailView.js +1 -1
- package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
- package/dist/features/categories/components/CategoryForm.js +12 -1
- package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
- package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
- package/dist/features/categories/repository/market-price-index.repository.js +105 -0
- package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
- package/dist/features/categories/repository/price-observation.repository.js +132 -0
- package/dist/features/events/components/EventSaleBanner.js +1 -1
- package/dist/features/events/components/EventStatusBadge.js +1 -1
- package/dist/features/faq/components/FAQAccordion.js +2 -1
- package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
- package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
- package/dist/features/faq/components/RelatedFAQs.js +1 -1
- package/dist/features/filters/FilterFacetSection.js +1 -1
- package/dist/features/filters/SwitchFilter.js +1 -1
- package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
- package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
- package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
- package/dist/features/gateway-events/schemas/firestore.js +125 -0
- package/dist/features/gateway-events/schemas/index.d.ts +81 -0
- package/dist/features/gateway-events/schemas/index.js +79 -0
- package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
- package/dist/features/homepage/components/AnnouncementBar.js +37 -1
- package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
- package/dist/features/homepage/components/BrandsSection.js +1 -1
- package/dist/features/homepage/components/CTABannerSection.js +1 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
- package/dist/features/homepage/components/HeroCarousel.js +2 -2
- package/dist/features/homepage/components/SocialPostCard.js +1 -1
- package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
- package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
- package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
- package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
- package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
- package/dist/features/inventory/components/ReceiveStationView.js +413 -0
- package/dist/features/inventory/components/operator-message.d.ts +29 -0
- package/dist/features/inventory/components/operator-message.js +41 -0
- package/dist/features/inventory/index.d.ts +13 -0
- package/dist/features/inventory/index.js +28 -0
- package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
- package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
- package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
- package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
- package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
- package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
- package/dist/features/inventory/schemas/firestore.d.ts +197 -0
- package/dist/features/inventory/schemas/firestore.js +159 -0
- package/dist/features/layout/AppLayoutShell.d.ts +12 -1
- package/dist/features/layout/AppLayoutShell.js +25 -12
- package/dist/features/layout/AutoBreadcrumbs.js +162 -3
- package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
- package/dist/features/layout/BottomNavbar.d.ts +1 -1
- package/dist/features/layout/BottomNavbar.js +2 -2
- package/dist/features/media/MediaAvatar.js +1 -1
- package/dist/features/media/MediaImage.d.ts +24 -4
- package/dist/features/media/MediaImage.js +44 -4
- package/dist/features/media/MediaLightbox.js +1 -1
- package/dist/features/media/modals/ImageCropModal.js +1 -1
- package/dist/features/media/modals/ImageEditor.js +1 -1
- package/dist/features/media/upload/MediaUploadField.js +91 -3
- package/dist/features/obligations/constants/policies.d.ts +92 -0
- package/dist/features/obligations/constants/policies.js +378 -0
- package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
- package/dist/features/obligations/repository/obligations.repository.js +158 -0
- package/dist/features/obligations/schemas/firestore.d.ts +160 -0
- package/dist/features/obligations/schemas/firestore.js +87 -0
- package/dist/features/orders/actions/order-actions.d.ts +43 -4
- package/dist/features/orders/actions/order-actions.js +60 -3
- package/dist/features/orders/actions/refund-actions.js +70 -10
- package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
- package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
- package/dist/features/orders/components/OrdersList.js +2 -2
- package/dist/features/orders/components/RefundHistoryTable.js +3 -1
- package/dist/features/orders/components/index.d.ts +2 -0
- package/dist/features/orders/components/index.js +6 -0
- package/dist/features/orders/constants/transitions.d.ts +59 -0
- package/dist/features/orders/constants/transitions.js +104 -0
- package/dist/features/orders/repository/orders.repository.d.ts +109 -6
- package/dist/features/orders/repository/orders.repository.js +464 -21
- package/dist/features/orders/schemas/firestore.d.ts +270 -0
- package/dist/features/orders/schemas/firestore.js +24 -0
- package/dist/features/orders/schemas/index.d.ts +61 -0
- package/dist/features/orders/schemas/index.js +22 -0
- package/dist/features/orders/types/index.d.ts +79 -0
- package/dist/features/parts/components/PartsIndexPageView.js +8 -1
- package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
- package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
- package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
- package/dist/features/payment-cases/schemas/firestore.js +105 -0
- package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
- package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
- package/dist/features/payments/repository/payout.repository.d.ts +0 -1
- package/dist/features/payments/repository/payout.repository.js +0 -1
- package/dist/features/points/repository/points.repository.d.ts +122 -0
- package/dist/features/points/repository/points.repository.js +304 -1
- package/dist/features/points/schemas/adjust-form.d.ts +58 -0
- package/dist/features/points/schemas/adjust-form.js +63 -0
- package/dist/features/points/schemas/firestore.d.ts +108 -1
- package/dist/features/points/schemas/firestore.js +84 -0
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
- package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
- package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
- package/dist/features/price-index/market-stats.d.ts +82 -0
- package/dist/features/price-index/market-stats.js +230 -0
- package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
- package/dist/features/print/components/BoxLabelPrintView.js +66 -0
- package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
- package/dist/features/print/components/LabelProfilePicker.js +38 -0
- package/dist/features/print/components/labels.d.ts +117 -0
- package/dist/features/print/components/labels.js +258 -0
- package/dist/features/print/components/labels.style.css +46 -0
- package/dist/features/print/index.d.ts +6 -0
- package/dist/features/print/index.js +16 -0
- package/dist/features/products/columns/productTableColumns.js +5 -4
- package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
- package/dist/features/products/components/PrizeDrawCollage.js +1 -1
- package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
- package/dist/features/products/components/PrizeRevealModal.js +2 -2
- package/dist/features/products/components/ProductDetailPageView.js +18 -4
- package/dist/features/products/components/ProductForm.js +34 -23
- package/dist/features/products/components/ProductGrid.js +86 -62
- package/dist/features/products/constants/card-badges.d.ts +97 -0
- package/dist/features/products/constants/card-badges.js +100 -0
- package/dist/features/products/repository/products.repository.js +34 -1
- package/dist/features/products/schemas/firestore.d.ts +46 -3
- package/dist/features/products/schemas/firestore.js +21 -0
- package/dist/features/promotions/components/PromotionsView.js +1 -1
- package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
- package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
- package/dist/features/promotions/schemas/firestore.js +30 -3
- package/dist/features/promotions/schemas/index.d.ts +6 -6
- package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
- package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
- package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
- package/dist/features/protection-claims/schemas/firestore.js +130 -0
- package/dist/features/reviews/actions/review-actions.js +3 -2
- package/dist/features/reviews/components/ReviewModal.js +1 -1
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/schemas/firestore.d.ts +20 -1
- package/dist/features/scams/constants/scam-types.d.ts +2 -0
- package/dist/features/scams/constants/scam-types.js +18 -0
- package/dist/features/scams/schemas/report-form.d.ts +3 -3
- package/dist/features/scams/schemas/report-form.js +26 -1
- package/dist/features/search/components/Search.js +9 -9
- package/dist/features/search/components/SearchResultsClient.js +18 -3
- package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
- package/dist/features/search/components/SearchResultsPageView.js +2 -2
- package/dist/features/seller/actions/offer-actions.js +16 -1
- package/dist/features/seller/actions/seller-actions.js +14 -3
- package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
- package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
- package/dist/features/seller/components/PrintCenterView.js +41 -30
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
- package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
- package/dist/features/seller/components/SellerProductShell.js +123 -13
- package/dist/features/seller/components/SellerReviewsView.js +4 -2
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
- package/dist/features/seller/schemas/coupon-form.js +27 -0
- package/dist/features/seller/schemas/product-form.d.ts +3 -0
- package/dist/features/seller/schemas/product-form.js +5 -0
- package/dist/features/shell/FormShell.js +2 -2
- package/dist/features/shell/QuickFormDrawer.js +14 -0
- package/dist/features/shell/SectionForm.d.ts +19 -0
- package/dist/features/shell/SectionForm.js +133 -9
- package/dist/features/shell/SectionForm.style.css +54 -0
- package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
- package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
- package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
- package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
- package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
- package/dist/features/stores/components/StoreGuideHubView.js +1 -1
- package/dist/features/stores/components/StoreHeader.js +1 -1
- package/dist/features/support/schemas/firestore.d.ts +73 -2
- package/dist/features/support/schemas/firestore.js +59 -0
- package/dist/index.d.ts +16 -155
- package/dist/index.js +88 -341
- package/dist/next/ErrorBoundary.js +1 -1
- package/dist/next/routing/route-map.d.ts +24 -0
- package/dist/next/routing/route-map.js +40 -0
- package/dist/providers/payment-manual/index.d.ts +15 -1
- package/dist/providers/payment-manual/index.js +37 -0
- package/dist/providers/payment-phonepe/index.d.ts +14 -1
- package/dist/providers/payment-phonepe/index.js +36 -0
- package/dist/providers/payment-razorpay/index.d.ts +44 -1
- package/dist/providers/payment-razorpay/index.js +99 -0
- package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
- package/dist/providers/shipping-shiprocket/index.js +18 -0
- package/dist/schemas/registry.d.ts +44 -11
- package/dist/server-entry.d.ts +2 -0
- package/dist/server-entry.js +27 -0
- package/dist/server.d.ts +42 -69
- package/dist/server.js +93 -69
- package/dist/styles.css +418 -149
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +15 -12
- package/dist/tokens/themes/default-light.js +14 -11
- package/dist/tokens/tokens.css +106 -23
- package/dist/ui/DataTable.style.css +4 -4
- package/dist/ui/columns/cell-renderers.d.ts +20 -0
- package/dist/ui/columns/cell-renderers.js +26 -1
- package/dist/ui/columns/index.d.ts +1 -1
- package/dist/ui/columns/index.js +4 -1
- package/dist/ui/components/Badge.style.css +1 -1
- package/dist/ui/components/Breadcrumb.js +19 -1
- package/dist/ui/components/BulkActionBar.style.css +4 -4
- package/dist/ui/components/Button.style.css +1 -1
- package/dist/ui/components/Checkbox.style.css +1 -1
- package/dist/ui/components/FallbackShell.js +1 -1
- package/dist/ui/components/Form.d.ts +14 -1
- package/dist/ui/components/Form.js +2 -2
- package/dist/ui/components/FormField.js +18 -4
- package/dist/ui/components/FormField.style.css +43 -3
- package/dist/ui/components/GatedPrice.style.css +1 -1
- package/dist/ui/components/IconButton.style.css +1 -1
- package/dist/ui/components/Input.js +22 -1
- package/dist/ui/components/Input.style.css +38 -22
- package/dist/ui/components/ListingFilterDrawer.js +1 -1
- package/dist/ui/components/ListingToolbar.js +1 -1
- package/dist/ui/components/PaginatedSelect.js +0 -0
- package/dist/ui/components/Radio.style.css +1 -1
- package/dist/ui/components/Repeater.d.ts +53 -0
- package/dist/ui/components/Repeater.js +7 -0
- package/dist/ui/components/RichTextEditor.d.ts +20 -1
- package/dist/ui/components/RichTextEditor.js +23 -2
- package/dist/ui/components/Select.style.css +7 -21
- package/dist/ui/components/Semantic.js +27 -3
- package/dist/ui/components/TagInput.style.css +4 -9
- package/dist/ui/components/Textarea.style.css +4 -18
- package/dist/ui/components/Toggle.style.css +1 -1
- package/dist/ui/components/Typography.d.ts +3 -3
- package/dist/ui/components/Typography.js +15 -15
- package/dist/ui/components/ViewToggle.style.css +4 -4
- package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
- package/dist/ui/forms/AddAnotherToggle.js +56 -0
- package/dist/ui/forms/ColorPickerField.js +15 -2
- package/dist/ui/forms/FieldCheckbox.js +15 -2
- package/dist/ui/forms/FieldInput.d.ts +22 -1
- package/dist/ui/forms/FieldInput.js +19 -5
- package/dist/ui/forms/FieldLabel.d.ts +35 -0
- package/dist/ui/forms/FieldLabel.js +70 -0
- package/dist/ui/forms/FieldSelect.d.ts +4 -1
- package/dist/ui/forms/FieldSelect.js +27 -5
- package/dist/ui/forms/FieldTextarea.d.ts +4 -1
- package/dist/ui/forms/FieldTextarea.js +22 -5
- package/dist/ui/forms/FormShell.d.ts +17 -1
- package/dist/ui/forms/FormShell.js +36 -2
- package/dist/ui/forms/FormShell.style.css +41 -33
- package/dist/ui/forms/index.d.ts +5 -1
- package/dist/ui/forms/index.js +2 -0
- package/dist/ui/icons/icon-registry.d.ts +1 -0
- package/dist/ui/icons/icon-registry.js +17 -1
- package/dist/utils/id-generators.d.ts +80 -0
- package/dist/utils/id-generators.js +93 -0
- package/dist/utils/search-txt-builders.d.ts +12 -0
- package/dist/utils/search-txt-builders.js +17 -0
- package/package.json +4 -2
- package/scripts/seed-cli.mjs +175 -6
- package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
- package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
- package/dist/features/loyalty/api/balance/route.d.ts +0 -12
- package/dist/features/loyalty/api/balance/route.js +0 -41
- package/dist/features/loyalty/api/earn/route.d.ts +0 -12
- package/dist/features/loyalty/api/earn/route.js +0 -38
- package/dist/features/loyalty/api/history/route.d.ts +0 -12
- package/dist/features/loyalty/api/history/route.js +0 -58
- package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
- package/dist/features/loyalty/api/redeem/route.js +0 -38
- package/dist/features/loyalty/columns/index.d.ts +0 -17
- package/dist/features/loyalty/columns/index.js +0 -40
- package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
- package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
- package/dist/features/loyalty/components/index.d.ts +0 -1
- package/dist/features/loyalty/components/index.js +0 -1
- package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
- package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
- package/dist/features/loyalty/index.d.ts +0 -6
- package/dist/features/loyalty/index.js +0 -6
- package/dist/features/loyalty/manifest.d.ts +0 -2
- package/dist/features/loyalty/manifest.js +0 -16
- package/dist/features/loyalty/messages/en.json +0 -19
- package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
- package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
- package/dist/features/loyalty/schemas/index.d.ts +0 -85
- package/dist/features/loyalty/schemas/index.js +0 -40
- package/dist/features/loyalty/server.d.ts +0 -6
- package/dist/features/loyalty/server.js +0 -6
- package/dist/features/loyalty/types/index.d.ts +0 -31
- package/dist/features/loyalty/types/index.js +0 -1
- package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
- package/dist/features/loyalty/types/loyalty-config.js +0 -1
- package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
- package/dist/features/loyalty/types/loyalty-math.js +0 -27
- package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
- package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
- package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
- package/dist/features/tester/seed-data/_happy-path.js +0 -710
- package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
- package/dist/features/tester/seed-data/_money-flows.js +0 -610
- package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
- package/dist/features/tester/seed-data/authored/_types.js +0 -35
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
- package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
- package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/index.js +0 -301
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
- package/dist/features/tester/seed-data/index.d.ts +0 -2
- package/dist/features/tester/seed-data/index.js +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
- package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
- package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
- package/dist/features/tester/seed-data/tester-window.js +0 -66
- package/dist/seed/_helpers/brand-rows.d.ts +0 -35
- package/dist/seed/_helpers/brand-rows.js +0 -600
- package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
- package/dist/seed/_helpers/category-content-generated.js +0 -1853
- package/dist/seed/_helpers/category-content.d.ts +0 -68
- package/dist/seed/_helpers/category-content.js +0 -731
- package/dist/seed/_helpers/category-forest.d.ts +0 -4
- package/dist/seed/_helpers/category-forest.js +0 -824
- package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
- package/dist/seed/_helpers/category-images-generated.js +0 -618
- package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
- package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
- package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
- package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
- package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
- package/dist/seed/_helpers/category-models.d.ts +0 -12
- package/dist/seed/_helpers/category-models.js +0 -45
- package/dist/seed/_helpers/category-names.d.ts +0 -54
- package/dist/seed/_helpers/category-names.js +0 -118
- package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
- package/dist/seed/_helpers/category-parts.d.ts +0 -9
- package/dist/seed/_helpers/category-parts.js +0 -15022
- package/dist/seed/_helpers/category-tree.d.ts +0 -27
- package/dist/seed/_helpers/category-tree.js +0 -119
- package/dist/seed/_helpers/character-features.d.ts +0 -10
- package/dist/seed/_helpers/character-features.js +0 -120
- package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
- package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
- package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
- package/dist/seed/_helpers/franchise-rows.js +0 -189
- package/dist/seed/_helpers/media.d.ts +0 -67
- package/dist/seed/_helpers/media.js +0 -172
- package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
- package/dist/seed/_helpers/part-colours-generated.js +0 -273
- package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
- package/dist/seed/_helpers/product-search-txt.js +0 -23
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
- package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
- package/dist/seed/addresses-seed-data.d.ts +0 -2
- package/dist/seed/addresses-seed-data.js +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
- package/dist/seed/bey-products-seed-data.d.ts +0 -18
- package/dist/seed/bey-products-seed-data.js +0 -18011
- package/dist/seed/beys/chunk0.d.ts +0 -17
- package/dist/seed/beys/chunk0.js +0 -36733
- package/dist/seed/beys/chunk1.d.ts +0 -17
- package/dist/seed/beys/chunk1.js +0 -35728
- package/dist/seed/beys/chunk2.d.ts +0 -17
- package/dist/seed/beys/chunk2.js +0 -35857
- package/dist/seed/beys/chunk3.d.ts +0 -17
- package/dist/seed/beys/chunk3.js +0 -34476
- package/dist/seed/beys-seed-data.d.ts +0 -18
- package/dist/seed/beys-seed-data.js +0 -11
- package/dist/seed/bids-seed-data.d.ts +0 -2
- package/dist/seed/bids-seed-data.js +0 -206
- package/dist/seed/blog-posts-seed-data.d.ts +0 -6
- package/dist/seed/blog-posts-seed-data.js +0 -442
- package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
- package/dist/seed/carousel-slides-seed-data.js +0 -411
- package/dist/seed/carousels-seed-data.d.ts +0 -2
- package/dist/seed/carousels-seed-data.js +0 -36
- package/dist/seed/cart-seed-data.d.ts +0 -2
- package/dist/seed/cart-seed-data.js +0 -241
- package/dist/seed/catalogue-seed-data.d.ts +0 -2
- package/dist/seed/catalogue-seed-data.js +0 -112
- package/dist/seed/categories-seed-data.d.ts +0 -3
- package/dist/seed/categories-seed-data.js +0 -816
- package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
- package/dist/seed/claimed-coupons-seed-data.js +0 -85
- package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
- package/dist/seed/coupon-usage-seed-data.js +0 -55
- package/dist/seed/coupons-seed-data.d.ts +0 -2
- package/dist/seed/coupons-seed-data.js +0 -226
- package/dist/seed/defaults/categories.d.ts +0 -2
- package/dist/seed/defaults/categories.js +0 -12
- package/dist/seed/defaults/faqs.d.ts +0 -2
- package/dist/seed/defaults/faqs.js +0 -40
- package/dist/seed/events-seed-data.d.ts +0 -7
- package/dist/seed/events-seed-data.js +0 -482
- package/dist/seed/factories/address.factory.d.ts +0 -21
- package/dist/seed/factories/address.factory.js +0 -44
- package/dist/seed/factories/bid.factory.d.ts +0 -15
- package/dist/seed/factories/bid.factory.js +0 -33
- package/dist/seed/factories/blog-post.factory.d.ts +0 -15
- package/dist/seed/factories/blog-post.factory.js +0 -22
- package/dist/seed/factories/carousel.factory.d.ts +0 -11
- package/dist/seed/factories/carousel.factory.js +0 -17
- package/dist/seed/factories/cart.factory.d.ts +0 -25
- package/dist/seed/factories/cart.factory.js +0 -35
- package/dist/seed/factories/category.factory.d.ts +0 -11
- package/dist/seed/factories/category.factory.js +0 -16
- package/dist/seed/factories/coupon.factory.d.ts +0 -21
- package/dist/seed/factories/coupon.factory.js +0 -43
- package/dist/seed/factories/faq.factory.d.ts +0 -10
- package/dist/seed/factories/faq.factory.js +0 -15
- package/dist/seed/factories/notification.factory.d.ts +0 -18
- package/dist/seed/factories/notification.factory.js +0 -39
- package/dist/seed/factories/order.factory.d.ts +0 -20
- package/dist/seed/factories/order.factory.js +0 -20
- package/dist/seed/factories/payout.factory.d.ts +0 -21
- package/dist/seed/factories/payout.factory.js +0 -38
- package/dist/seed/factories/product.factory.d.ts +0 -27
- package/dist/seed/factories/product.factory.js +0 -80
- package/dist/seed/factories/review.factory.d.ts +0 -14
- package/dist/seed/factories/review.factory.js +0 -52
- package/dist/seed/factories/session.factory.d.ts +0 -15
- package/dist/seed/factories/session.factory.js +0 -31
- package/dist/seed/factories/store.factory.d.ts +0 -23
- package/dist/seed/factories/store.factory.js +0 -47
- package/dist/seed/factories/user.factory.d.ts +0 -19
- package/dist/seed/factories/user.factory.js +0 -56
- package/dist/seed/faq-seed-data.d.ts +0 -18
- package/dist/seed/faq-seed-data.js +0 -1956
- package/dist/seed/firestore-indexes.d.ts +0 -12
- package/dist/seed/firestore-indexes.js +0 -31
- package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
- package/dist/seed/grouped-listings-seed-data.js +0 -283
- package/dist/seed/history-seed-data.d.ts +0 -12
- package/dist/seed/history-seed-data.js +0 -70
- package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
- package/dist/seed/homepage-sections-seed-data.js +0 -1034
- package/dist/seed/index.d.ts +0 -100
- package/dist/seed/index.js +0 -115
- package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
- package/dist/seed/lottery-entries-seed-data.js +0 -108
- package/dist/seed/manifest.d.ts +0 -16
- package/dist/seed/manifest.js +0 -235
- package/dist/seed/media-assets-seed-data.d.ts +0 -22
- package/dist/seed/media-assets-seed-data.js +0 -5593
- package/dist/seed/model-composition-seed-data.d.ts +0 -15
- package/dist/seed/model-composition-seed-data.js +0 -9032
- package/dist/seed/notifications-seed-data.d.ts +0 -2
- package/dist/seed/notifications-seed-data.js +0 -606
- package/dist/seed/offers-seed-data.d.ts +0 -2
- package/dist/seed/offers-seed-data.js +0 -398
- package/dist/seed/orders-seed-data.d.ts +0 -2
- package/dist/seed/orders-seed-data.js +0 -845
- package/dist/seed/part-glossary/chunk0.d.ts +0 -9
- package/dist/seed/part-glossary/chunk0.js +0 -35448
- package/dist/seed/part-glossary/chunk1.d.ts +0 -9
- package/dist/seed/part-glossary/chunk1.js +0 -40494
- package/dist/seed/part-glossary/chunk2.d.ts +0 -9
- package/dist/seed/part-glossary/chunk2.js +0 -51242
- package/dist/seed/part-glossary/chunk3.d.ts +0 -9
- package/dist/seed/part-glossary/chunk3.js +0 -53337
- package/dist/seed/part-glossary/chunk4.d.ts +0 -9
- package/dist/seed/part-glossary/chunk4.js +0 -51454
- package/dist/seed/part-glossary-seed-data.d.ts +0 -15
- package/dist/seed/part-glossary-seed-data.js +0 -25
- package/dist/seed/payouts-seed-data.d.ts +0 -2
- package/dist/seed/payouts-seed-data.js +0 -302
- package/dist/seed/product-features-seed-data.d.ts +0 -3
- package/dist/seed/product-features-seed-data.js +0 -366
- package/dist/seed/products-art-seed-data.d.ts +0 -2
- package/dist/seed/products-art-seed-data.js +0 -289
- package/dist/seed/products-auctions-seed-data.d.ts +0 -2
- package/dist/seed/products-auctions-seed-data.js +0 -475
- package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
- package/dist/seed/products-beyblade-x-seed-data.js +0 -476
- package/dist/seed/products-catalogue/chunk0.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk0.js +0 -7262
- package/dist/seed/products-catalogue/chunk1.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk1.js +0 -7290
- package/dist/seed/products-catalogue/chunk10.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk10.js +0 -7290
- package/dist/seed/products-catalogue/chunk11.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk11.js +0 -7005
- package/dist/seed/products-catalogue/chunk12.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk12.js +0 -7002
- package/dist/seed/products-catalogue/chunk13.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk13.js +0 -7002
- package/dist/seed/products-catalogue/chunk14.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk14.js +0 -7002
- package/dist/seed/products-catalogue/chunk15.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk15.js +0 -7002
- package/dist/seed/products-catalogue/chunk16.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk16.js +0 -7002
- package/dist/seed/products-catalogue/chunk17.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk17.js +0 -7002
- package/dist/seed/products-catalogue/chunk18.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk18.js +0 -4398
- package/dist/seed/products-catalogue/chunk2.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk2.js +0 -7268
- package/dist/seed/products-catalogue/chunk3.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk3.js +0 -7264
- package/dist/seed/products-catalogue/chunk4.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk4.js +0 -7268
- package/dist/seed/products-catalogue/chunk5.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk5.js +0 -7258
- package/dist/seed/products-catalogue/chunk6.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk6.js +0 -7268
- package/dist/seed/products-catalogue/chunk7.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk7.js +0 -7311
- package/dist/seed/products-catalogue/chunk8.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk8.js +0 -7304
- package/dist/seed/products-catalogue/chunk9.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk9.js +0 -7309
- package/dist/seed/products-catalogue-seed-data.d.ts +0 -2
- package/dist/seed/products-catalogue-seed-data.js +0 -60
- package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
- package/dist/seed/products-classifieds-seed-data.js +0 -435
- package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
- package/dist/seed/products-digital-codes-seed-data.js +0 -395
- package/dist/seed/products-live-items-seed-data.d.ts +0 -7
- package/dist/seed/products-live-items-seed-data.js +0 -269
- package/dist/seed/products-preorders-seed-data.d.ts +0 -2
- package/dist/seed/products-preorders-seed-data.js +0 -360
- package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
- package/dist/seed/products-prize-draws-seed-data.js +0 -427
- package/dist/seed/products-spares-seed-data.d.ts +0 -2
- package/dist/seed/products-spares-seed-data.js +0 -368
- package/dist/seed/products-standard-seed-data.d.ts +0 -2
- package/dist/seed/products-standard-seed-data.js +0 -632
- package/dist/seed/products-stickers-seed-data.d.ts +0 -2
- package/dist/seed/products-stickers-seed-data.js +0 -319
- package/dist/seed/reviews-seed-data.d.ts +0 -1
- package/dist/seed/reviews-seed-data.js +0 -185
- package/dist/seed/runner.d.ts +0 -2
- package/dist/seed/runner.js +0 -125
- package/dist/seed/scammers-seed-data.d.ts +0 -2
- package/dist/seed/scammers-seed-data.js +0 -235
- package/dist/seed/seed-market-config.d.ts +0 -48
- package/dist/seed/seed-market-config.js +0 -199
- package/dist/seed/seed-purpose.d.ts +0 -299
- package/dist/seed/seed-purpose.js +0 -440
- package/dist/seed/sessions-seed-data.d.ts +0 -3
- package/dist/seed/sessions-seed-data.js +0 -116
- package/dist/seed/shipments-seed-data.d.ts +0 -5
- package/dist/seed/shipments-seed-data.js +0 -185
- package/dist/seed/site-settings-seed-data.d.ts +0 -2
- package/dist/seed/site-settings-seed-data.js +0 -1069
- package/dist/seed/store-addresses-seed-data.d.ts +0 -18
- package/dist/seed/store-addresses-seed-data.js +0 -71
- package/dist/seed/store-extensions-seed-data.d.ts +0 -11
- package/dist/seed/store-extensions-seed-data.js +0 -292
- package/dist/seed/stores-seed-data.d.ts +0 -6
- package/dist/seed/stores-seed-data.js +0 -242
- package/dist/seed/support-tickets-seed-data.d.ts +0 -16
- package/dist/seed/support-tickets-seed-data.js +0 -239
- package/dist/seed/tax-codes-seed-data.d.ts +0 -34
- package/dist/seed/tax-codes-seed-data.js +0 -100
- package/dist/seed/test-data-ttl.d.ts +0 -29
- package/dist/seed/test-data-ttl.js +0 -31
- package/dist/seed/test-utils.d.ts +0 -49
- package/dist/seed/test-utils.js +0 -110
- package/dist/seed/types.d.ts +0 -89
- package/dist/seed/types.js +0 -15
- package/dist/seed/users-seed-data.d.ts +0 -2
- package/dist/seed/users-seed-data.js +0 -597
- package/dist/seed/wishlists-seed-data.d.ts +0 -12
- package/dist/seed/wishlists-seed-data.js +0 -54
|
@@ -10,8 +10,14 @@ import { serverLogger } from "../../../monitoring/index.js";
|
|
|
10
10
|
import { orderRepository } from "../../orders/repository/orders.repository.js";
|
|
11
11
|
import { RefundStatusValues } from "../../orders/schemas/index.js";
|
|
12
12
|
import { siteSettingsRepository } from "../../admin/repository/site-settings.repository.js";
|
|
13
|
+
/*
|
|
14
|
+
* One owner for "how much of the platform fee is withheld". Shared with the
|
|
15
|
+
* cumulative refund cap, so the figure SHOWN to the buyer and the money
|
|
16
|
+
* actually withheld cannot diverge — they did: this file showed a net figure
|
|
17
|
+
* while `cancelOrder` moved no money at all (D14).
|
|
18
|
+
*/
|
|
19
|
+
import { platformFeeWithheld, refundCapacity, } from "../../../_internal/shared/checkout/refundable-base.js";
|
|
13
20
|
import { sendNotification } from "../../admin/actions/notification-actions.js";
|
|
14
|
-
const DEFAULT_PLATFORM_FEE_PERCENT = 5;
|
|
15
21
|
const DEFAULT_GST_PERCENT = 18;
|
|
16
22
|
export async function issuePartialRefund(adminUid, orderId, deductFees, refundNote) {
|
|
17
23
|
const order = await orderRepository.findById(orderId);
|
|
@@ -22,13 +28,37 @@ export async function issuePartialRefund(adminUid, orderId, deductFees, refundNo
|
|
|
22
28
|
if (order.refundStatus === RefundStatusValues.COMPLETED)
|
|
23
29
|
throw new ValidationError("Order has already been fully refunded.");
|
|
24
30
|
const settings = await siteSettingsRepository.getSingleton();
|
|
25
|
-
const platformFeePercent = settings.commissions?.platformFeePercent ?? DEFAULT_PLATFORM_FEE_PERCENT;
|
|
26
31
|
const gstPercent = settings.commissions?.gstPercent ?? DEFAULT_GST_PERCENT;
|
|
27
|
-
|
|
32
|
+
/*
|
|
33
|
+
* ── D32: THE SINGLE WORST MONEY DEFECT IN THE AUDIT ─────────────────────
|
|
34
|
+
*
|
|
35
|
+
* This computed a PERCENTAGE OF THE REFUND:
|
|
36
|
+
*
|
|
37
|
+
* const effectiveRate = platformFeePercent * (1 + gstPercent / 100);
|
|
38
|
+
* const feeDeducted = (grossRefund * effectiveRate) / 100;
|
|
39
|
+
*
|
|
40
|
+
* which ignores `commissions.platformFeeMax` (default **₹10**) entirely, and
|
|
41
|
+
* ignores `order.platformFee` — the amount that was ACTUALLY COLLECTED and
|
|
42
|
+
* is stored on the order.
|
|
43
|
+
*
|
|
44
|
+
* Measured on a ₹5,000 order at 2% + 18% GST: it deducted **₹118** from a
|
|
45
|
+
* buyer who had paid **₹11.80**, keeping ~₹106.20 of their GOODS money and
|
|
46
|
+
* labelling it a platform fee. The error grows with order value, so it was
|
|
47
|
+
* largest exactly where a buyer would notice.
|
|
48
|
+
*
|
|
49
|
+
* 🛑 `platformFeeWithheld` returns the fee as CHARGED, never a recomputed
|
|
50
|
+
* rate, and it is shared with the cumulative refund cap — so the figure
|
|
51
|
+
* SHOWN to the buyer here and the money actually withheld now come from one
|
|
52
|
+
* place. They did not before: this function showed a net figure while
|
|
53
|
+
* `cancelOrder` moved no money at all (D14).
|
|
54
|
+
*
|
|
55
|
+
* `gstPercent` is passed only as the LEGACY fallback, for orders written
|
|
56
|
+
* before `platformFeeGst` was persisted (2026-10-21). An order that carries
|
|
57
|
+
* the field ignores it entirely — which is the point, since reading today's
|
|
58
|
+
* rate for a historical order is the mistake this replaces.
|
|
59
|
+
*/
|
|
28
60
|
const grossRefund = order.totalPrice;
|
|
29
|
-
const feeDeducted = deductFees
|
|
30
|
-
? parseFloat(((grossRefund * effectiveRate) / 100).toFixed(2))
|
|
31
|
-
: 0;
|
|
61
|
+
const feeDeducted = deductFees ? platformFeeWithheld(order, gstPercent) : 0;
|
|
32
62
|
const netRefund = parseFloat((grossRefund - feeDeducted).toFixed(2));
|
|
33
63
|
await orderRepository.update(orderId, {
|
|
34
64
|
refundStatus: "processing",
|
|
@@ -75,12 +105,42 @@ export async function previewCancellationRefund(userId, orderId) {
|
|
|
75
105
|
if (order.paymentStatus !== "paid")
|
|
76
106
|
return null;
|
|
77
107
|
const settings = await siteSettingsRepository.getSingleton();
|
|
78
|
-
const platformFeePercent = settings.commissions?.platformFeePercent ?? DEFAULT_PLATFORM_FEE_PERCENT;
|
|
79
108
|
const gstPercent = settings.commissions?.gstPercent ?? DEFAULT_GST_PERCENT;
|
|
80
|
-
|
|
109
|
+
/*
|
|
110
|
+
* 🛑 A SECOND COPY of D32 lived here, and the plan only named one.
|
|
111
|
+
*
|
|
112
|
+
* Identical arithmetic to the function above — `platformFeePercent × (1 +
|
|
113
|
+
* gstPercent/100)` applied to the whole refund, ignoring the ₹10 cap and the
|
|
114
|
+
* stored `order.platformFee`. And this is the WORSE of the two, because this
|
|
115
|
+
* is the function whose output is shown to the BUYER before they confirm a
|
|
116
|
+
* cancellation: it quoted a net refund ₹106 short on a ₹5,000 order.
|
|
117
|
+
*
|
|
118
|
+
* Found by grepping for the shape rather than the name — the plan cited
|
|
119
|
+
* `refund-actions.ts:104-110`, which is the other one. Root Cause #75's
|
|
120
|
+
* lesson exactly: a rule reachable by copy-paste gets copied, and the copy
|
|
121
|
+
* is not found by searching for the function that was supposed to own it.
|
|
122
|
+
*
|
|
123
|
+
* ── 2026-10-21: and `refundCapacity`, not `totalPrice − withheld` ─────────
|
|
124
|
+
*
|
|
125
|
+
* 🛑 The net figure now subtracts refunds ALREADY COMMITTED on this order,
|
|
126
|
+
* because `cancelOrderWithRefund` moves exactly `refundCapacity().remaining`
|
|
127
|
+
* — so if these two expressions differ, the number shown to the buyer is not
|
|
128
|
+
* the number that moves, which is the whole defect D14 is about.
|
|
129
|
+
*
|
|
130
|
+
* They differ on precisely one order: a partially-refunded one. The old
|
|
131
|
+
* expression ignored prior refunds, so cancelling an order that had already
|
|
132
|
+
* had a line refunded quoted the buyer the full base a second time. That
|
|
133
|
+
* would not have over-paid — `reserveRefund`'s transactional cap refuses it
|
|
134
|
+
* — but it would have quoted a figure and then failed, which is a worse
|
|
135
|
+
* experience than quoting the right one.
|
|
136
|
+
*
|
|
137
|
+
* On an order with no prior refunds the two are identical, so nothing changes
|
|
138
|
+
* for the common case.
|
|
139
|
+
*/
|
|
140
|
+
const capacity = refundCapacity(order, gstPercent);
|
|
81
141
|
const grossRefund = order.totalPrice;
|
|
82
|
-
const feeDeducted =
|
|
83
|
-
const netRefund =
|
|
142
|
+
const feeDeducted = capacity.withheld;
|
|
143
|
+
const netRefund = capacity.remaining;
|
|
84
144
|
return {
|
|
85
145
|
orderId,
|
|
86
146
|
grossRefund,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface RateableLine {
|
|
2
|
+
orderItemId: string;
|
|
3
|
+
productId: string;
|
|
4
|
+
productTitle: string;
|
|
5
|
+
existingRating?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface OrderCompletionPanelProps {
|
|
8
|
+
orderId: string;
|
|
9
|
+
/** `/api/user/orders/{id}/completion`. Injected so appkit owns no route map. */
|
|
10
|
+
endpoint: string;
|
|
11
|
+
/** Already complete — the panel then only confirms it. */
|
|
12
|
+
completedAt?: string | null;
|
|
13
|
+
/** Who closed it: the buyer's uid, or `"system"` for the 7-day sweep. */
|
|
14
|
+
completedBy?: string | null;
|
|
15
|
+
/** Delivered? Nothing can be rated or completed before the parcel arrives. */
|
|
16
|
+
isDelivered: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Anything contested — an open return, refund or dispute.
|
|
19
|
+
*
|
|
20
|
+
* The server refuses in that case regardless; this suppresses the panel so
|
|
21
|
+
* the buyer is not offered a button that would be refused, and is told why.
|
|
22
|
+
*/
|
|
23
|
+
isContested?: boolean;
|
|
24
|
+
/** Called after a successful completion, so the page can refresh the order. */
|
|
25
|
+
onCompleted?: () => void;
|
|
26
|
+
}
|
|
27
|
+
export declare function OrderCompletionPanel({ orderId, endpoint, completedAt, completedBy, isDelivered, isContested, onCompleted, }: OrderCompletionPanelProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* OrderCompletionPanel — rate the lines, then close the order.
|
|
5
|
+
*
|
|
6
|
+
* ## The owner's rule, and why this panel is the only way to use it
|
|
7
|
+
*
|
|
8
|
+
* *"points only get issued on successful purchases after buyer put reviews,
|
|
9
|
+
* then only… they are also assigned if the user [raises] no issues or updates
|
|
10
|
+
* after 7 days of delivery"*, and then: *"auto assigned after 7 days of
|
|
11
|
+
* delivery, when order is marked complete; if review is given and order marked
|
|
12
|
+
* complete by the buyer before — immediate disburse."*
|
|
13
|
+
*
|
|
14
|
+
* So completion has two writers converging on one fact (`completedAt`): the
|
|
15
|
+
* 7-day `order-complete` obligation, and this. Both were built — the sweep,
|
|
16
|
+
* the dispute cutoff, the per-item review link, `markOrderCompleteAction` — and
|
|
17
|
+
* **the buyer had no UI for any of it.** A grep for `markOrderCompleteAction`
|
|
18
|
+
* across the app returned two hits, both my own comments. This is the surface
|
|
19
|
+
* that makes the rule usable rather than merely implemented.
|
|
20
|
+
*
|
|
21
|
+
* ## 🛑 ≥1 rated line, never all of them
|
|
22
|
+
*
|
|
23
|
+
* Requiring every line makes a six-item order's completion hostage to the one
|
|
24
|
+
* item the buyer has no opinion about — and their alternative is to wait seven
|
|
25
|
+
* days and be completed automatically with **no** review, which is worse for
|
|
26
|
+
* everyone. One rating is the signal; demanding six is a toll. The server
|
|
27
|
+
* enforces the same rule, so this is the affordance, not the gate.
|
|
28
|
+
*
|
|
29
|
+
* ## 🛑 The button says what it DOES, all four consequences
|
|
30
|
+
*
|
|
31
|
+
* Completing closes the dispute window, releases the seller's payout and
|
|
32
|
+
* awards points. A buyer pressing "Mark complete" without being told that it
|
|
33
|
+
* ends their ability to raise a new dispute would be waiving a right by
|
|
34
|
+
* pressing a button labelled as housekeeping. `payout-release` is
|
|
35
|
+
* `blockedBy: ["order-complete"]`, so the early release is a CONSEQUENCE of
|
|
36
|
+
* this press rather than a second decision — which is precisely why it has to
|
|
37
|
+
* be disclosed here.
|
|
38
|
+
*
|
|
39
|
+
* ## Per LINE, not per product (the Zomato shape)
|
|
40
|
+
*
|
|
41
|
+
* `orderItemId` is `${orderId}__${productId}__${n}`, so the same product
|
|
42
|
+
* ordered twice is two ratings. `ReviewDocument` was already per-product; what
|
|
43
|
+
* it lacked was any link to the ORDER — no `orderId` anywhere, and
|
|
44
|
+
* `isVerifiedPurchase` was read in two places and written by nothing, so a
|
|
45
|
+
* review had never been attributable to a purchase.
|
|
46
|
+
*
|
|
47
|
+
* EXPORTS: OrderCompletionPanel, type OrderCompletionPanelProps
|
|
48
|
+
*
|
|
49
|
+
* @tag domain:orders,reviews
|
|
50
|
+
* @tag layer:component
|
|
51
|
+
* @tag pattern:form
|
|
52
|
+
* @tag access:client
|
|
53
|
+
* @tag consumers:user/orders/[id]
|
|
54
|
+
* @tag sideEffects:network
|
|
55
|
+
*/
|
|
56
|
+
import { useCallback, useEffect, useState } from "react";
|
|
57
|
+
import { Alert } from "../../../ui/components/Alert.js";
|
|
58
|
+
import { Button } from "../../../ui/components/Button.js";
|
|
59
|
+
/*
|
|
60
|
+
* `Div` has its OWN module; `Row` and `Stack` are in `Layout`. Imported from
|
|
61
|
+
* the defining modules rather than the `ui` barrel — Root Cause #18, and the
|
|
62
|
+
* barrel is also what the build-weight work is unwinding.
|
|
63
|
+
*/
|
|
64
|
+
import { Div } from "../../../ui/components/Div.js";
|
|
65
|
+
import { Icon } from "../../../ui/components/Icon.js";
|
|
66
|
+
import { Row, Stack } from "../../../ui/components/Layout.js";
|
|
67
|
+
import { Text } from "../../../ui/components/Typography.js";
|
|
68
|
+
import { Textarea } from "../../../ui/components/Textarea.js";
|
|
69
|
+
import { Skeleton } from "../../../ui/components/Skeleton.js";
|
|
70
|
+
import { normalizeError } from "../../../errors/normalize.js";
|
|
71
|
+
const MIN_COMMENT = 10;
|
|
72
|
+
/**
|
|
73
|
+
* Stars as buttons.
|
|
74
|
+
*
|
|
75
|
+
* 🛑 `aria-label` per star and `aria-pressed` on the selected one — a row of
|
|
76
|
+
* five unlabelled glyphs is unusable with a screen reader, and the rating is
|
|
77
|
+
* the only required field here. Colour is never the sole signal: the selected
|
|
78
|
+
* star is filled AND pressed.
|
|
79
|
+
*/
|
|
80
|
+
function StarRow({ value, onChange, disabled, }) {
|
|
81
|
+
return (_jsx(Row, { gap: "xs", role: "group", "aria-label": "Rating out of 5", children: [1, 2, 3, 4, 5].map((n) => (_jsx(Button, { variant: n <= value ? "primary" : "outline", size: "sm", disabled: disabled, "aria-label": `${n} star${n === 1 ? "" : "s"}`, "aria-pressed": n === value, onClick: () => onChange(n), children: _jsx(Icon, { name: "review", filled: n <= value }) }, n))) }));
|
|
82
|
+
}
|
|
83
|
+
export function OrderCompletionPanel({ orderId, endpoint, completedAt, completedBy, isDelivered, isContested, onCompleted, }) {
|
|
84
|
+
const [lines, setLines] = useState([]);
|
|
85
|
+
const [loading, setLoading] = useState(true);
|
|
86
|
+
const [loadError, setLoadError] = useState(null);
|
|
87
|
+
const [openLine, setOpenLine] = useState(null);
|
|
88
|
+
const [rating, setRating] = useState(0);
|
|
89
|
+
const [comment, setComment] = useState("");
|
|
90
|
+
const [busy, setBusy] = useState(false);
|
|
91
|
+
const [actionError, setActionError] = useState(null);
|
|
92
|
+
const load = useCallback(() => {
|
|
93
|
+
setLoading(true);
|
|
94
|
+
setLoadError(null);
|
|
95
|
+
fetch(endpoint)
|
|
96
|
+
.then(async (r) => {
|
|
97
|
+
const body = await r.json().catch(() => null);
|
|
98
|
+
/*
|
|
99
|
+
* 🛑 The status is checked BEFORE the body is trusted. `errorResponse()`
|
|
100
|
+
* is valid JSON with a non-2xx status, so `body?.data?.items ?? []`
|
|
101
|
+
* would turn "the request failed" into "nothing to rate" — and this
|
|
102
|
+
* panel would then hide itself, which is the most convincing possible
|
|
103
|
+
* way to lose a feature.
|
|
104
|
+
*/
|
|
105
|
+
if (!r.ok)
|
|
106
|
+
throw new Error(body?.error ?? `Could not load this order (${r.status})`);
|
|
107
|
+
return (body?.data?.items ?? []);
|
|
108
|
+
})
|
|
109
|
+
.then(setLines)
|
|
110
|
+
.catch((err) => setLoadError(normalizeError(err).message))
|
|
111
|
+
.finally(() => setLoading(false));
|
|
112
|
+
}, [endpoint]);
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
if (!completedAt && isDelivered && !isContested)
|
|
115
|
+
load();
|
|
116
|
+
else
|
|
117
|
+
setLoading(false);
|
|
118
|
+
}, [completedAt, isDelivered, isContested, load]);
|
|
119
|
+
// ── Already complete: confirm it and say which path closed it ────────────
|
|
120
|
+
if (completedAt) {
|
|
121
|
+
const bySystem = completedBy === "system";
|
|
122
|
+
return (_jsx(Div, { surface: "card", padding: "md", children: _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "semibold", color: "primary", children: "This order is complete" }), _jsxs(Text, { size: "xs", color: "muted", children: [bySystem
|
|
123
|
+
? `Completed automatically on ${new Date(completedAt).toLocaleDateString()}, seven days after delivery with nothing raised against it.`
|
|
124
|
+
: `You marked this complete on ${new Date(completedAt).toLocaleDateString()}.`, " ", "The dispute window for it has closed."] })] }) }));
|
|
125
|
+
}
|
|
126
|
+
if (!isDelivered)
|
|
127
|
+
return null;
|
|
128
|
+
if (isContested) {
|
|
129
|
+
return (_jsx(Div, { surface: "card", padding: "md", children: _jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "semibold", color: "primary", children: "Rating is paused on this order" }), _jsx(Text, { size: "xs", color: "muted", children: "There is an open return, refund or dispute. Once that is resolved you can rate what you bought and close the order." })] }) }));
|
|
130
|
+
}
|
|
131
|
+
const ratedCount = lines.filter((l) => l.existingRating != null).length;
|
|
132
|
+
const canComplete = ratedCount > 0;
|
|
133
|
+
const submitRating = async (orderItemId) => {
|
|
134
|
+
setBusy(true);
|
|
135
|
+
setActionError(null);
|
|
136
|
+
try {
|
|
137
|
+
const res = await fetch(endpoint, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
headers: { "Content-Type": "application/json" },
|
|
140
|
+
body: JSON.stringify({ action: "rate", orderItemId, rating, comment }),
|
|
141
|
+
});
|
|
142
|
+
if (!res.ok) {
|
|
143
|
+
const body = await res.json().catch(() => null);
|
|
144
|
+
throw new Error(body?.error ?? `That rating was not saved (${res.status})`);
|
|
145
|
+
}
|
|
146
|
+
setOpenLine(null);
|
|
147
|
+
setRating(0);
|
|
148
|
+
setComment("");
|
|
149
|
+
load();
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
setActionError(normalizeError(err).message);
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
setBusy(false);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const complete = async () => {
|
|
159
|
+
setBusy(true);
|
|
160
|
+
setActionError(null);
|
|
161
|
+
try {
|
|
162
|
+
const res = await fetch(endpoint, {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: { "Content-Type": "application/json" },
|
|
165
|
+
body: JSON.stringify({ action: "complete" }),
|
|
166
|
+
});
|
|
167
|
+
if (!res.ok) {
|
|
168
|
+
const body = await res.json().catch(() => null);
|
|
169
|
+
throw new Error(body?.error ?? `The order was not completed (${res.status})`);
|
|
170
|
+
}
|
|
171
|
+
onCompleted?.();
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
setActionError(normalizeError(err).message);
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
setBusy(false);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
return (_jsx(Div, { surface: "card", padding: "md", children: _jsxs(Stack, { gap: "md", children: [_jsxs(Stack, { gap: "xs", children: [_jsx(Text, { size: "sm", weight: "semibold", color: "primary", children: "Rate what you bought" }), _jsx(Text, { size: "xs", color: "muted", children: "Rate each item separately. One rating is enough to close the order \u2014 or leave it and we will close it automatically seven days after delivery." })] }), actionError ? (_jsx(Alert, { variant: "error", title: "That did not save", children: actionError })) : null, loading ? (_jsxs(Stack, { gap: "sm", children: [_jsx(Skeleton, { variant: "rectangular", height: "48px" }), _jsx(Skeleton, { variant: "rectangular", height: "48px" })] })) : loadError ? (_jsxs(Alert, { variant: "error", title: "Couldn't load the items", children: [loadError, " Refresh to retry."] })) : lines.length === 0 ? (_jsx(Text, { size: "xs", color: "muted", children: "There is nothing on this order to rate." })) : (_jsx(Stack, { gap: "sm", children: lines.map((line) => (_jsxs(Div, { border: "default", rounded: "default", padding: "sm", children: [_jsxs(Row, { justify: "between", align: "start", gap: "sm", wrap: true, children: [_jsx(Text, { size: "sm", className: "flex-1 line-clamp-2", color: "primary", children: line.productTitle }), line.existingRating != null ? (_jsxs(Text, { size: "xs", color: "success", children: ["★".repeat(line.existingRating), " rated"] })) : openLine === line.orderItemId ? null : (_jsx(Button, { variant: "outline", size: "sm", onClick: () => {
|
|
181
|
+
setOpenLine(line.orderItemId);
|
|
182
|
+
setRating(0);
|
|
183
|
+
setComment("");
|
|
184
|
+
}, children: "Rate this" }))] }), openLine === line.orderItemId ? (_jsxs(Stack, { gap: "sm", className: "mt-2", children: [_jsx(StarRow, { value: rating, onChange: setRating, disabled: busy }), _jsx(Textarea, { value: comment, onChange: (e) => setComment(e.target.value), rows: 3, placeholder: "What was it like? The next buyer reads this." }), _jsxs(Row, { gap: "sm", children: [_jsx(Button, { variant: "primary", size: "sm", isLoading: busy,
|
|
185
|
+
/*
|
|
186
|
+
* Mirrors the route's own floor. A one-word review is
|
|
187
|
+
* indistinguishable from an empty box to the next
|
|
188
|
+
* buyer, which is why the server has the same minimum
|
|
189
|
+
* rather than this being a UI preference.
|
|
190
|
+
*/
|
|
191
|
+
disabled: busy || rating === 0 || comment.trim().length < MIN_COMMENT, onClick: () => submitRating(line.orderItemId), children: "Save rating" }), _jsx(Button, { variant: "ghost", size: "sm", disabled: busy, onClick: () => setOpenLine(null), children: "Cancel" })] })] })) : null] }, line.orderItemId))) })), _jsx(Div, { border: "subtle", className: "border-t", padding: "t-sm", children: _jsxs(Stack, { gap: "sm", children: [_jsx(Text, { size: "xs", color: "muted", children: "Marking this complete confirms you are happy with it. It closes the window for raising a new dispute on this order, releases the seller\u2019s payment, and credits your points." }), _jsxs(Row, { gap: "sm", align: "center", wrap: true, children: [_jsx(Button, { variant: "primary", size: "sm", isLoading: busy, disabled: busy || !canComplete, onClick: complete, children: "Mark complete" }), !canComplete ? (_jsx(Text, { size: "xs", color: "muted", children: "Rate at least one item first." })) : null] })] }) })] }) }));
|
|
192
|
+
}
|
|
@@ -14,7 +14,7 @@ const STATUS_COLORS = {
|
|
|
14
14
|
cancelled: "bg-error-surface text-error",
|
|
15
15
|
refunded: "bg-warning-surface text-warning",
|
|
16
16
|
return_requested: "bg-warning-surface text-warning",
|
|
17
|
-
returned: "bg-[var(--appkit-color-surface
|
|
17
|
+
returned: "bg-[var(--appkit-color-surface-elevated)] text-[var(--appkit-color-text-muted)]",
|
|
18
18
|
};
|
|
19
19
|
export function OrderCard({ order, onClick, labels = {}, renderActions }) {
|
|
20
20
|
const date = order.createdAt
|
|
@@ -24,7 +24,7 @@ export function OrderCard({ order, onClick, labels = {}, renderActions }) {
|
|
|
24
24
|
day: "numeric",
|
|
25
25
|
})
|
|
26
26
|
: "";
|
|
27
|
-
const statusColor = STATUS_COLORS[order.orderStatus] ?? "bg-[var(--appkit-color-surface
|
|
27
|
+
const statusColor = STATUS_COLORS[order.orderStatus] ?? "bg-[var(--appkit-color-surface-elevated)] text-[var(--appkit-color-text-muted)]";
|
|
28
28
|
// SB8-F — count unrevealed prize-draw entries to surface a "reveals pending" badge.
|
|
29
29
|
const unrevealedPrizeDraws = order.items.filter((it) => it.listingType === "prize-draw" &&
|
|
30
30
|
it.prizeRevealStatus !== undefined &&
|
|
@@ -10,7 +10,9 @@ function formatDate(d) {
|
|
|
10
10
|
return dt.toLocaleDateString("en-IN", { day: "numeric", month: "short", year: "numeric" });
|
|
11
11
|
}
|
|
12
12
|
function RefundRow({ event, currency }) {
|
|
13
|
-
return (_jsxs(Row, { border: "subtle", justify: "between", align: "start", gap: "sm", className: "border-b last:border-0", padding: "y-sm", children: [_jsxs(Stack, { gap: "xs", className: "flex-1", children: [_jsxs(Row, { gap: "sm", align: "center", children: [_jsx(Badge, { variant: event.type === "full" ? "danger" : "warning", children: event.type === "full" ? REFUND_COPY.history.badgeFull : REFUND_COPY.history.badgePartial }), _jsx(Text, { size: "xs", color: "muted", children: formatDate(event.refundedAt) })] }), _jsx(Text, { size: "sm", children: event.reason }), event.manualTransactionId && (_jsxs(Text, { size: "xs", color: "muted", children: [REFUND_COPY.history.labelTxn, " ", event.manualTransactionId] })), event.phonepeRefundId && (_jsxs(Text, { size: "xs", color: "muted", children: [
|
|
13
|
+
return (_jsxs(Row, { border: "subtle", justify: "between", align: "start", gap: "sm", className: "border-b last:border-0", padding: "y-sm", children: [_jsxs(Stack, { gap: "xs", className: "flex-1", children: [_jsxs(Row, { gap: "sm", align: "center", children: [_jsx(Badge, { variant: event.type === "full" ? "danger" : "warning", children: event.type === "full" ? REFUND_COPY.history.badgeFull : REFUND_COPY.history.badgePartial }), _jsx(Text, { size: "xs", color: "muted", children: formatDate(event.refundedAt) })] }), _jsx(Text, { size: "sm", children: event.reason }), event.manualTransactionId && (_jsxs(Text, { size: "xs", color: "muted", children: [REFUND_COPY.history.labelTxn, " ", event.manualTransactionId] })), (event.gatewayRefundId ?? event.phonepeRefundId) && (_jsxs(Text, { size: "xs", color: "muted", children: [event.gateway
|
|
14
|
+
? `${event.gateway} refund:`
|
|
15
|
+
: REFUND_COPY.history.labelPhonePe, " ", event.gatewayRefundId ?? event.phonepeRefundId] })), event.status === "failed" && (_jsxs(Text, { size: "xs", color: "error", children: ["Failed", event.failureReason ? ` — ${event.failureReason}` : ""] })), event.status === "reserved" && (_jsx(Text, { size: "xs", color: "muted", children: "In progress \u2014 awaiting the gateway" }))] }), _jsx(Text, { size: "sm", weight: "semibold", className: "shrink-0", children: formatCurrency(event.amount, currency) })] }));
|
|
14
16
|
}
|
|
15
17
|
/** Warning triangle icon — inline SVG kept here since it's a single-use decorative element. */
|
|
16
18
|
function WarningIcon() {
|
|
@@ -15,3 +15,5 @@ export type { RefundRequestViewProps } from "./RefundRequestView";
|
|
|
15
15
|
export { YourPurchaseStrip } from "./YourPurchaseStrip";
|
|
16
16
|
export type { YourPurchaseStripProps, PurchaseContext } from "./YourPurchaseStrip";
|
|
17
17
|
export { EmiInstallmentsPanel, type EmiInstallmentsPanelProps, } from "./EmiInstallmentsPanel";
|
|
18
|
+
export { OrderCompletionPanel } from "./OrderCompletionPanel";
|
|
19
|
+
export type { OrderCompletionPanelProps, RateableLine } from "./OrderCompletionPanel";
|
|
@@ -8,3 +8,9 @@ export { RefundHistoryTable } from "./RefundHistoryTable.js";
|
|
|
8
8
|
export { RefundRequestView } from "./RefundRequestView.js";
|
|
9
9
|
export { YourPurchaseStrip } from "./YourPurchaseStrip.js";
|
|
10
10
|
export { EmiInstallmentsPanel, } from "./EmiInstallmentsPanel.js";
|
|
11
|
+
/*
|
|
12
|
+
* The buyer's completion surface — per-line ratings plus Mark complete. The
|
|
13
|
+
* owner's completion rule had no UI at all before this: a grep for
|
|
14
|
+
* `markOrderCompleteAction` across the app returned two hits, both comments.
|
|
15
|
+
*/
|
|
16
|
+
export { OrderCompletionPanel } from "./OrderCompletionPanel.js";
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The order status machine — which transitions are legal.
|
|
3
|
+
*
|
|
4
|
+
* ## 🛑 THIS MAP WAS BUILT FROM A CENSUS, NOT FROM A DESIGN
|
|
5
|
+
*
|
|
6
|
+
* The plan that called for it said "~32 writers and no `from` check anywhere,
|
|
7
|
+
* so inventing the map silently breaks working flows — the failure mode is a
|
|
8
|
+
* legitimate admin action that now throws." That is the right fear and it is
|
|
9
|
+
* why a read-only census came first. **What the census found contradicted the
|
|
10
|
+
* plan's own number**, which is worth recording:
|
|
11
|
+
*
|
|
12
|
+
* `orderRepository.updateStatus` has **four** callers, not thirty-two:
|
|
13
|
+
*
|
|
14
|
+
* 1. `_internal/server/features/orders/actions.ts:99` — hardcodes
|
|
15
|
+
* `"return_requested"`, cast `as any`.
|
|
16
|
+
* 2. `_internal/server/features/orders/actions.ts:113` — passes
|
|
17
|
+
* `parsed.data.status` straight through, cast `as any`.
|
|
18
|
+
* 3. `src/app/api/store/orders/[id]/route.ts:242` — passes `data.status`
|
|
19
|
+
* from the SELLER's request body.
|
|
20
|
+
* 4. `features/admin/actions/admin-actions.ts:152`.
|
|
21
|
+
*
|
|
22
|
+
* 🛑 **And the finding that matters: two of those four accept an arbitrary
|
|
23
|
+
* status from a request body, both with `as any` silencing the one type-level
|
|
24
|
+
* signal there was.** So a seller PATCHing their own order could set
|
|
25
|
+
* `delivered` on an unpaid order, or regress `delivered` → `pending`, and
|
|
26
|
+
* nothing anywhere would refuse it. The "~32 writers" framing made this look
|
|
27
|
+
* like a sprawling refactor; it is four call sites and a guard.
|
|
28
|
+
*
|
|
29
|
+
* (The other ~30 hits a naive grep returns are `offer.repository.ts`'s OWN
|
|
30
|
+
* `updateStatus` — a different method on a different collection. Conflating
|
|
31
|
+
* them is how the estimate got to 32, and acting on it would have meant
|
|
32
|
+
* "fixing" the offer lifecycle by accident.)
|
|
33
|
+
*
|
|
34
|
+
* ## Three entries look wrong and are not
|
|
35
|
+
*
|
|
36
|
+
* - **`return_requested` → `delivered`.** A REJECTED return must go back to
|
|
37
|
+
* its prior terminal state, not strand the order in a requested-return limbo
|
|
38
|
+
* forever. Without this the seller's "no, this is not a valid return" has no
|
|
39
|
+
* expressible outcome.
|
|
40
|
+
* - **`cancelled` → `refunded` and `returned` → `refunded`.** Money moves
|
|
41
|
+
* AFTER the goods decision. `refunded` is the only genuinely terminal state;
|
|
42
|
+
* `cancelled` is a goods outcome that may still owe money.
|
|
43
|
+
* - **`pending` → `refunded` is ABSENT.** A pending order was never captured,
|
|
44
|
+
* so there is nothing to refund. If a writer is found doing this, the writer
|
|
45
|
+
* is the bug — do not widen the map to accommodate it.
|
|
46
|
+
*/
|
|
47
|
+
import type { OrderStatus } from "../types/index";
|
|
48
|
+
/**
|
|
49
|
+
* Legal next states per status. A `Record<OrderStatus, …>` so a tenth status
|
|
50
|
+
* cannot be added to the union without declaring where it can go — an array or
|
|
51
|
+
* a `Record<string, …>` catches neither mistake, which is how ten independent
|
|
52
|
+
* enumerations of `ListingType` came to disagree (Root Cause #61).
|
|
53
|
+
*/
|
|
54
|
+
export declare const ORDER_STATUS_TRANSITIONS: Record<OrderStatus, readonly OrderStatus[]>;
|
|
55
|
+
/** Statuses from which nothing may follow. */
|
|
56
|
+
export declare const ORDER_TERMINAL_STATUSES: readonly OrderStatus[];
|
|
57
|
+
export declare function isLegalOrderTransition(from: OrderStatus, to: OrderStatus): boolean;
|
|
58
|
+
/** Human-readable refusal, for the error a caller sees. */
|
|
59
|
+
export declare function describeIllegalTransition(from: OrderStatus, to: OrderStatus): string;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The order status machine — which transitions are legal.
|
|
3
|
+
*
|
|
4
|
+
* ## 🛑 THIS MAP WAS BUILT FROM A CENSUS, NOT FROM A DESIGN
|
|
5
|
+
*
|
|
6
|
+
* The plan that called for it said "~32 writers and no `from` check anywhere,
|
|
7
|
+
* so inventing the map silently breaks working flows — the failure mode is a
|
|
8
|
+
* legitimate admin action that now throws." That is the right fear and it is
|
|
9
|
+
* why a read-only census came first. **What the census found contradicted the
|
|
10
|
+
* plan's own number**, which is worth recording:
|
|
11
|
+
*
|
|
12
|
+
* `orderRepository.updateStatus` has **four** callers, not thirty-two:
|
|
13
|
+
*
|
|
14
|
+
* 1. `_internal/server/features/orders/actions.ts:99` — hardcodes
|
|
15
|
+
* `"return_requested"`, cast `as any`.
|
|
16
|
+
* 2. `_internal/server/features/orders/actions.ts:113` — passes
|
|
17
|
+
* `parsed.data.status` straight through, cast `as any`.
|
|
18
|
+
* 3. `src/app/api/store/orders/[id]/route.ts:242` — passes `data.status`
|
|
19
|
+
* from the SELLER's request body.
|
|
20
|
+
* 4. `features/admin/actions/admin-actions.ts:152`.
|
|
21
|
+
*
|
|
22
|
+
* 🛑 **And the finding that matters: two of those four accept an arbitrary
|
|
23
|
+
* status from a request body, both with `as any` silencing the one type-level
|
|
24
|
+
* signal there was.** So a seller PATCHing their own order could set
|
|
25
|
+
* `delivered` on an unpaid order, or regress `delivered` → `pending`, and
|
|
26
|
+
* nothing anywhere would refuse it. The "~32 writers" framing made this look
|
|
27
|
+
* like a sprawling refactor; it is four call sites and a guard.
|
|
28
|
+
*
|
|
29
|
+
* (The other ~30 hits a naive grep returns are `offer.repository.ts`'s OWN
|
|
30
|
+
* `updateStatus` — a different method on a different collection. Conflating
|
|
31
|
+
* them is how the estimate got to 32, and acting on it would have meant
|
|
32
|
+
* "fixing" the offer lifecycle by accident.)
|
|
33
|
+
*
|
|
34
|
+
* ## Three entries look wrong and are not
|
|
35
|
+
*
|
|
36
|
+
* - **`return_requested` → `delivered`.** A REJECTED return must go back to
|
|
37
|
+
* its prior terminal state, not strand the order in a requested-return limbo
|
|
38
|
+
* forever. Without this the seller's "no, this is not a valid return" has no
|
|
39
|
+
* expressible outcome.
|
|
40
|
+
* - **`cancelled` → `refunded` and `returned` → `refunded`.** Money moves
|
|
41
|
+
* AFTER the goods decision. `refunded` is the only genuinely terminal state;
|
|
42
|
+
* `cancelled` is a goods outcome that may still owe money.
|
|
43
|
+
* - **`pending` → `refunded` is ABSENT.** A pending order was never captured,
|
|
44
|
+
* so there is nothing to refund. If a writer is found doing this, the writer
|
|
45
|
+
* is the bug — do not widen the map to accommodate it.
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* Legal next states per status. A `Record<OrderStatus, …>` so a tenth status
|
|
49
|
+
* cannot be added to the union without declaring where it can go — an array or
|
|
50
|
+
* a `Record<string, …>` catches neither mistake, which is how ten independent
|
|
51
|
+
* enumerations of `ListingType` came to disagree (Root Cause #61).
|
|
52
|
+
*/
|
|
53
|
+
export const ORDER_STATUS_TRANSITIONS = {
|
|
54
|
+
pending: ["confirmed", "processing", "cancelled"],
|
|
55
|
+
confirmed: ["processing", "shipped", "cancelled", "refunded"],
|
|
56
|
+
processing: ["shipped", "cancelled", "refunded"],
|
|
57
|
+
shipped: ["delivered", "return_requested", "cancelled", "refunded"],
|
|
58
|
+
delivered: ["return_requested", "refunded"],
|
|
59
|
+
return_requested: ["returned", "delivered", "refunded", "cancelled"],
|
|
60
|
+
returned: ["refunded"],
|
|
61
|
+
cancelled: ["refunded"],
|
|
62
|
+
refunded: [],
|
|
63
|
+
};
|
|
64
|
+
/*
|
|
65
|
+
* Two entries beyond the plan's proposed map, and they have DIFFERENT
|
|
66
|
+
* justifications — which is worth separating, because one is evidence and the
|
|
67
|
+
* other is caution.
|
|
68
|
+
*
|
|
69
|
+
* **`pending → processing` — VERIFIED.** `paymentReviewAutoApprove.ts:66`
|
|
70
|
+
* writes `status: "processing"` on a pending order, and
|
|
71
|
+
* `checkout/actions.ts:1210` creates one directly as `PROCESSING` under the
|
|
72
|
+
* admin bypass. The plan's proposed map omitted this hop, so adopting the plan
|
|
73
|
+
* verbatim would have made the 2-hour auto-approve sweep start throwing — the
|
|
74
|
+
* exact "a legitimate flow now fails" regression the census existed to prevent.
|
|
75
|
+
* The census wins, as the plan instructed.
|
|
76
|
+
*
|
|
77
|
+
* 🛑 **`shipped → cancelled` — NOT verified, permissive by choice.** I wrote a
|
|
78
|
+
* comment claiming the census justified this via an RTO flow, then checked: the
|
|
79
|
+
* only grep hits were that comment and an unused `RTO_ENTRY_CUSTODY` constant.
|
|
80
|
+
* No writer produces it today. It is kept because the asymmetry of harm is
|
|
81
|
+
* one-sided — being too permissive here allows a transition nothing currently
|
|
82
|
+
* makes, while being too strict would break a dispatch-then-cancel flow the
|
|
83
|
+
* moment one is built — but it is a JUDGEMENT, not a measurement, and the next
|
|
84
|
+
* person should know which is which.
|
|
85
|
+
*/
|
|
86
|
+
/** Statuses from which nothing may follow. */
|
|
87
|
+
export const ORDER_TERMINAL_STATUSES = ["refunded"];
|
|
88
|
+
export function isLegalOrderTransition(from, to) {
|
|
89
|
+
/*
|
|
90
|
+
* A no-op write is always legal. Re-writing the same status happens all the
|
|
91
|
+
* time — a patch that touches `trackingNumber` and re-sends the status it
|
|
92
|
+
* already had — and refusing it would break those writers for no gain.
|
|
93
|
+
*/
|
|
94
|
+
if (from === to)
|
|
95
|
+
return true;
|
|
96
|
+
return (ORDER_STATUS_TRANSITIONS[from] ?? []).includes(to);
|
|
97
|
+
}
|
|
98
|
+
/** Human-readable refusal, for the error a caller sees. */
|
|
99
|
+
export function describeIllegalTransition(from, to) {
|
|
100
|
+
const allowed = ORDER_STATUS_TRANSITIONS[from] ?? [];
|
|
101
|
+
return allowed.length === 0
|
|
102
|
+
? `An order in "${from}" is terminal — it cannot move to "${to}".`
|
|
103
|
+
: `An order in "${from}" cannot move to "${to}". Allowed: ${allowed.join(", ")}.`;
|
|
104
|
+
}
|