@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
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { BaseRepository, applySieveToFirestore, parseSieveDateValue, prepareForFirestore, } from "../../../providers/db-firebase/index.js";
|
|
2
|
+
import { normalizeError } from "../../../errors/normalize.js";
|
|
3
|
+
import { GATEWAY_EVENTS_COLLECTION, GATEWAY_EVENT_ERROR_MAX_BYTES, GATEWAY_EVENT_FIELDS, GATEWAY_EVENT_LEASE_SECONDS, GATEWAY_EVENT_RETENTION_DAYS, createGatewayEventId, } from "../schemas/firestore.js";
|
|
4
|
+
/** gRPC `ALREADY_EXISTS`. The one failure of `.create()` that means "duplicate". */
|
|
5
|
+
const GRPC_ALREADY_EXISTS = 6;
|
|
6
|
+
/**
|
|
7
|
+
* Is this the specific "a document with that id already exists" failure, as
|
|
8
|
+
* opposed to any other write failure?
|
|
9
|
+
*
|
|
10
|
+
* 🛑 THIS DISTINCTION IS THE WHOLE POINT, and it is where the inbox differs
|
|
11
|
+
* from every other `.create()` claim in the codebase.
|
|
12
|
+
*
|
|
13
|
+
* `refunds/actions.ts` catches *every* error from its claim and treats it as a
|
|
14
|
+
* duplicate — and that is correct THERE, because the cost of being wrong is
|
|
15
|
+
* issuing a second real refund, so it must fail CLOSED.
|
|
16
|
+
*
|
|
17
|
+
* Here the cost of being wrong is inverted: treating a permissions error or a
|
|
18
|
+
* Firestore outage as "already have it" would make the route ack 200 and the
|
|
19
|
+
* event would be **silently lost** — which is the exact failure this collection
|
|
20
|
+
* exists to prevent. So the inbox fails OPEN: anything that is not
|
|
21
|
+
* ALREADY_EXISTS propagates, the route answers 503, and the gateway sends it
|
|
22
|
+
* again.
|
|
23
|
+
*
|
|
24
|
+
* Same primitive, opposite failure direction, because the asymmetry of harm is
|
|
25
|
+
* opposite. Do not "unify" these two call sites.
|
|
26
|
+
*/
|
|
27
|
+
function isAlreadyExists(err) {
|
|
28
|
+
if (typeof err !== "object" || err === null)
|
|
29
|
+
return false;
|
|
30
|
+
const code = err.code;
|
|
31
|
+
if (code === GRPC_ALREADY_EXISTS)
|
|
32
|
+
return true;
|
|
33
|
+
/*
|
|
34
|
+
* The Admin SDK has also surfaced this as a string code and as a plain
|
|
35
|
+
* message depending on version and transport. Checked in addition to, never
|
|
36
|
+
* instead of, the numeric code — a message test alone is the kind of
|
|
37
|
+
* stringly-typed guard that breaks silently on an SDK bump.
|
|
38
|
+
*/
|
|
39
|
+
if (code === "already-exists" || code === "ALREADY_EXISTS")
|
|
40
|
+
return true;
|
|
41
|
+
const message = err.message;
|
|
42
|
+
return typeof message === "string" && message.includes("ALREADY_EXISTS");
|
|
43
|
+
}
|
|
44
|
+
function truncate(value, maxBytes) {
|
|
45
|
+
if (!value)
|
|
46
|
+
return undefined;
|
|
47
|
+
return value.length <= maxBytes ? value : value.slice(0, maxBytes);
|
|
48
|
+
}
|
|
49
|
+
export class GatewayEventsRepository extends BaseRepository {
|
|
50
|
+
constructor() {
|
|
51
|
+
super(GATEWAY_EVENTS_COLLECTION);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Persist-and-claim in one write. Returns `claimed: false` for a duplicate.
|
|
55
|
+
*
|
|
56
|
+
* 🛑 THROWS on any write failure that is not a duplicate — see
|
|
57
|
+
* `isAlreadyExists`. The caller must translate that into a 503 so the gateway
|
|
58
|
+
* redelivers; swallowing it is how an event is lost.
|
|
59
|
+
*/
|
|
60
|
+
async claim(input) {
|
|
61
|
+
const now = input.now ?? new Date();
|
|
62
|
+
const id = createGatewayEventId(input.gateway, input.providerEventId, input.bodySha256);
|
|
63
|
+
const doc = {
|
|
64
|
+
id,
|
|
65
|
+
gateway: input.gateway,
|
|
66
|
+
rawEvent: input.rawEvent,
|
|
67
|
+
kind: input.kind,
|
|
68
|
+
status: "received",
|
|
69
|
+
bodySha256: input.bodySha256,
|
|
70
|
+
...(input.providerEventId ? { providerEventId: input.providerEventId } : {}),
|
|
71
|
+
...(input.gatewayOrderId ? { gatewayOrderId: input.gatewayOrderId } : {}),
|
|
72
|
+
...(input.gatewayPaymentId ? { gatewayPaymentId: input.gatewayPaymentId } : {}),
|
|
73
|
+
...(typeof input.amount === "number" ? { amount: input.amount } : {}),
|
|
74
|
+
...(input.payload ? { payload: input.payload } : {}),
|
|
75
|
+
...(input.payloadTruncated ? { payloadTruncated: true } : {}),
|
|
76
|
+
receivedAt: now,
|
|
77
|
+
claimedAt: now,
|
|
78
|
+
leaseExpiresAt: new Date(now.getTime() + GATEWAY_EVENT_LEASE_SECONDS * 1000),
|
|
79
|
+
attempts: 1,
|
|
80
|
+
expiresAt: new Date(now.getTime() + GATEWAY_EVENT_RETENTION_DAYS * 86400000),
|
|
81
|
+
createdAt: now,
|
|
82
|
+
updatedAt: now,
|
|
83
|
+
};
|
|
84
|
+
try {
|
|
85
|
+
await this.getCollection().doc(id).create(prepareForFirestore(doc));
|
|
86
|
+
return { claimed: true, id, doc };
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
if (isAlreadyExists(err)) {
|
|
90
|
+
void normalizeError(err);
|
|
91
|
+
return { claimed: false, id };
|
|
92
|
+
}
|
|
93
|
+
/*
|
|
94
|
+
* Not a duplicate — a real write failure. Normalised for the log trail
|
|
95
|
+
* and then RETHROWN, deliberately: the inbox holds no record, so the only
|
|
96
|
+
* honest answer to the gateway is "send it again".
|
|
97
|
+
*/
|
|
98
|
+
void normalizeError(err);
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** Flip a claimed row to its outcome. Never throws — see the docstring. */
|
|
103
|
+
async settle(id, input) {
|
|
104
|
+
const now = input.now ?? new Date();
|
|
105
|
+
try {
|
|
106
|
+
await this.getCollection()
|
|
107
|
+
.doc(id)
|
|
108
|
+
.update({
|
|
109
|
+
status: input.status,
|
|
110
|
+
processedAt: now,
|
|
111
|
+
updatedAt: now,
|
|
112
|
+
...(input.orderIds?.length ? { orderIds: input.orderIds } : {}),
|
|
113
|
+
...(input.lastError
|
|
114
|
+
? { lastError: truncate(input.lastError, GATEWAY_EVENT_ERROR_MAX_BYTES) }
|
|
115
|
+
: {}),
|
|
116
|
+
...(typeof input.terminal === "boolean" ? { terminal: input.terminal } : {}),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
/*
|
|
121
|
+
* Swallowed on purpose, and the asymmetry with `claim` is the reason: by
|
|
122
|
+
* the time we settle, the EVENT IS ALREADY DURABLE and the work is
|
|
123
|
+
* already done. Rethrowing would turn a bookkeeping failure into a 5xx
|
|
124
|
+
* and have the gateway redeliver an event we successfully processed. The
|
|
125
|
+
* row is left `received` with a lease that expires, which the stuck-event
|
|
126
|
+
* sweep then picks up — the right failure mode.
|
|
127
|
+
*/
|
|
128
|
+
void normalizeError(err);
|
|
129
|
+
console.error("[gatewayEvents.settle] failed to persist outcome", { id, err });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* R1's query: rows claimed but never settled, whose lease has lapsed.
|
|
134
|
+
*
|
|
135
|
+
* 🛑 `status` is an `in` equality and `leaseExpiresAt` the single inequality,
|
|
136
|
+
* which is the only shape Firestore will serve without demanding the
|
|
137
|
+
* inequality field lead the `orderBy` (Root Cause #59). Ordered by
|
|
138
|
+
* `leaseExpiresAt` for exactly that reason — not by `receivedAt`, which would
|
|
139
|
+
* need an index in an order nobody declares.
|
|
140
|
+
*/
|
|
141
|
+
async listStuck(now, limit = 20) {
|
|
142
|
+
const snap = await this.getCollection()
|
|
143
|
+
.where(GATEWAY_EVENT_FIELDS.STATUS, "in", ["received", "processing"])
|
|
144
|
+
.where(GATEWAY_EVENT_FIELDS.LEASE_EXPIRES_AT, "<", now)
|
|
145
|
+
.orderBy(GATEWAY_EVENT_FIELDS.LEASE_EXPIRES_AT, "asc")
|
|
146
|
+
.limit(limit)
|
|
147
|
+
.get();
|
|
148
|
+
return snap.docs.map((d) => this.mapDoc(d));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Make the NEXT delivery of this event be accepted instead of acked.
|
|
152
|
+
*
|
|
153
|
+
* ## 🛑 IT DOES NOT REPROCESS ANYTHING, AND THE NAME SAYS SO
|
|
154
|
+
*
|
|
155
|
+
* There is no way to replay a gateway event from here, deliberately. R1's own
|
|
156
|
+
* header gives the reason: re-dispatching from a job or an admin button would
|
|
157
|
+
* mean duplicating the webhook route's entire switch — and its RTDB
|
|
158
|
+
* signalling — in a second place, which is Root Cause #75 on the dispatch
|
|
159
|
+
* axis. The webhook route is the only thing that knows how to handle an event.
|
|
160
|
+
*
|
|
161
|
+
* So this reopens the DOOR and nothing more. The operator still has to press
|
|
162
|
+
* Resend in the gateway dashboard (or wait for the gateway's own retry); this
|
|
163
|
+
* is what stops the inbox from refusing that redelivery as a duplicate.
|
|
164
|
+
*
|
|
165
|
+
* Anything calling this must tell the operator that second step is theirs. A
|
|
166
|
+
* button labelled "Reprocess" that only did this would be the worst kind of
|
|
167
|
+
* half-truth — it would look like the work had been done.
|
|
168
|
+
*
|
|
169
|
+
* ## Why these four fields, read off `resolveDuplicateDelivery`'s table
|
|
170
|
+
*
|
|
171
|
+
* That function decides ack-vs-redispatch, and three of its branches would
|
|
172
|
+
* otherwise swallow the redelivery:
|
|
173
|
+
*
|
|
174
|
+
* · `processed` / `ignored` / `conflict` → always ack. Hence `status` is
|
|
175
|
+
* reset to `failed`, the one non-terminal state that redispatches.
|
|
176
|
+
* · `failed` + `terminal: true` → ack. Hence `terminal: false`.
|
|
177
|
+
* · lapsed lease but `attempts >= GATEWAY_EVENT_MAX_ATTEMPTS` → ack. Hence
|
|
178
|
+
* `attempts: 0`.
|
|
179
|
+
*
|
|
180
|
+
* And the lease is set to `now`, i.e. already expired, because the
|
|
181
|
+
* received/processing branch is decided by the LEASE rather than the status —
|
|
182
|
+
* a live lease means "another worker has this" and must keep acking.
|
|
183
|
+
*
|
|
184
|
+
* `lastError` records that a human did this, so the row does not read as a
|
|
185
|
+
* fresh transient failure to whoever looks next.
|
|
186
|
+
*/
|
|
187
|
+
async reopenForRedelivery(id, actorUid, now = new Date()) {
|
|
188
|
+
await this.getCollection()
|
|
189
|
+
.doc(id)
|
|
190
|
+
.update({
|
|
191
|
+
status: "failed",
|
|
192
|
+
terminal: false,
|
|
193
|
+
attempts: 0,
|
|
194
|
+
claimedAt: now,
|
|
195
|
+
// Already lapsed — see the docstring: the lease, not the status, is what
|
|
196
|
+
// decides the received/processing branch.
|
|
197
|
+
leaseExpiresAt: now,
|
|
198
|
+
lastError: `Reopened for redelivery by ${actorUid}`,
|
|
199
|
+
updatedAt: now,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/** Take over a lapsed lease and count the attempt. */
|
|
203
|
+
async renewLease(id, attempts, now) {
|
|
204
|
+
await this.getCollection()
|
|
205
|
+
.doc(id)
|
|
206
|
+
.update({
|
|
207
|
+
status: "processing",
|
|
208
|
+
attempts: attempts + 1,
|
|
209
|
+
claimedAt: now,
|
|
210
|
+
leaseExpiresAt: new Date(now.getTime() + GATEWAY_EVENT_LEASE_SECONDS * 1000),
|
|
211
|
+
updatedAt: now,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/** Every event for one gateway order — the reconciliation join. */
|
|
215
|
+
async findByGatewayOrderId(gatewayOrderId) {
|
|
216
|
+
const snap = await this.getCollection()
|
|
217
|
+
.where(GATEWAY_EVENT_FIELDS.GATEWAY_ORDER_ID, "==", gatewayOrderId)
|
|
218
|
+
.orderBy(GATEWAY_EVENT_FIELDS.RECEIVED_AT, "desc")
|
|
219
|
+
.limit(50)
|
|
220
|
+
.get();
|
|
221
|
+
return snap.docs.map((d) => this.mapDoc(d));
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Retention: refs for rows past `expiresAt`, for the caller's batch delete.
|
|
225
|
+
* Mirrors `sessionRepository.getExpiredRefs` so `dailyDataCleanup` composes
|
|
226
|
+
* it the same way it composes sessions and tokens.
|
|
227
|
+
*/
|
|
228
|
+
async getExpiredRefs(now, limit = 500) {
|
|
229
|
+
const snap = await this.getCollection()
|
|
230
|
+
.where(GATEWAY_EVENT_FIELDS.EXPIRES_AT, "<", now)
|
|
231
|
+
.limit(limit)
|
|
232
|
+
.get();
|
|
233
|
+
return snap.docs.map((d) => d.ref);
|
|
234
|
+
}
|
|
235
|
+
async list(model) {
|
|
236
|
+
return applySieveToFirestore({
|
|
237
|
+
baseQuery: this.getCollection(),
|
|
238
|
+
model,
|
|
239
|
+
fields: GatewayEventsRepository.SIEVE_FIELDS,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* 🛑 Every date field carries `parseValue: parseSieveDateValue`, and it is not
|
|
245
|
+
* optional: these are stored Firestore Timestamps, and sievejs' default
|
|
246
|
+
* `convertValue()` only coerces `"true"`/`"false"`/numeric strings. An ISO
|
|
247
|
+
* string therefore reaches the adapter unchanged and becomes
|
|
248
|
+
* `.where("receivedAt", ">=", "<iso-string>")` — a type mismatch against a
|
|
249
|
+
* Timestamp, which matches **zero documents with no error at all**
|
|
250
|
+
* (Root Cause #47). `audit-sieve-date-fields` blocks the omission.
|
|
251
|
+
*/
|
|
252
|
+
GatewayEventsRepository.SIEVE_FIELDS = {
|
|
253
|
+
gateway: { canFilter: true, canSort: false },
|
|
254
|
+
rawEvent: { canFilter: true, canSort: false },
|
|
255
|
+
kind: { canFilter: true, canSort: false },
|
|
256
|
+
status: { canFilter: true, canSort: false },
|
|
257
|
+
terminal: { canFilter: true, canSort: false },
|
|
258
|
+
providerEventId: { canFilter: true, canSort: false },
|
|
259
|
+
gatewayOrderId: { canFilter: true, canSort: false },
|
|
260
|
+
gatewayPaymentId: { canFilter: true, canSort: false },
|
|
261
|
+
attempts: { canFilter: true, canSort: true },
|
|
262
|
+
receivedAt: { canFilter: true, canSort: true, parseValue: parseSieveDateValue },
|
|
263
|
+
claimedAt: { canFilter: true, canSort: true, parseValue: parseSieveDateValue },
|
|
264
|
+
leaseExpiresAt: { canFilter: true, canSort: true, parseValue: parseSieveDateValue },
|
|
265
|
+
processedAt: { canFilter: true, canSort: true, parseValue: parseSieveDateValue },
|
|
266
|
+
expiresAt: { canFilter: true, canSort: true, parseValue: parseSieveDateValue },
|
|
267
|
+
};
|
|
268
|
+
let cached = null;
|
|
269
|
+
/** Lazy singleton — avoids cold-start admin SDK init when nothing is ingesting. */
|
|
270
|
+
export function gatewayEventsRepository() {
|
|
271
|
+
if (!cached)
|
|
272
|
+
cached = new GatewayEventsRepository();
|
|
273
|
+
return cached;
|
|
274
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gatewayEvents` — the durable inbox for every payment-gateway webhook.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this collection exists
|
|
5
|
+
*
|
|
6
|
+
* Before it, a webhook was a request and nothing else. If the handler threw, or
|
|
7
|
+
* the Lambda died mid-dispatch, or the event type was one we had not written a
|
|
8
|
+
* `case` for, **the event was gone** — there was no record it had ever arrived.
|
|
9
|
+
* That is what made the 2026-10-21 incident undiagnosable (₹2,511.80 captured,
|
|
10
|
+
* no order, a manual refund): the only trace was a `serverLogger.warn` in a log
|
|
11
|
+
* buffer that drops at ~4 KB/s, and a Server Action's throw never reaches
|
|
12
|
+
* `onRequestError` because `wrapAction` returns rather than throws
|
|
13
|
+
* (Root Cause #87).
|
|
14
|
+
*
|
|
15
|
+
* The inbox inverts that. Persist, then act, then ack — so a crash leaves a row
|
|
16
|
+
* with an expired lease that a reconciler finds within 5 minutes, instead of
|
|
17
|
+
* leaving nothing at all.
|
|
18
|
+
*
|
|
19
|
+
* ## The name
|
|
20
|
+
*
|
|
21
|
+
* 🛑 Not `paymentEvents` — that collides with `RTDB_PATHS.PAYMENT_EVENTS`, a
|
|
22
|
+
* short-lived Realtime Database signal channel that is a completely different
|
|
23
|
+
* thing (a browser-facing ping, pruned every 15 minutes). Not `disputes` or
|
|
24
|
+
* `incidents` either: both names are taken, by a buyer-contests-auto-approval
|
|
25
|
+
* flow and a `scammerProfiles` subcollection respectively.
|
|
26
|
+
*
|
|
27
|
+
* ## Dedupe: the document id IS the key
|
|
28
|
+
*
|
|
29
|
+
* `${gateway}_${providerEventId ?? bodySha256.slice(0,32)}`, written with
|
|
30
|
+
* Firestore's `.create()`, which **fails if the document exists**. That is the
|
|
31
|
+
* same at-most-once primitive `gatewayOrderClaims` and `refundClaims` already
|
|
32
|
+
* use, and it needs no transaction and no read.
|
|
33
|
+
*
|
|
34
|
+
* 🛑 **The `bodySha256` fallback is load-bearing, not a nicety.** Razorpay
|
|
35
|
+
* sends `x-razorpay-event-id` and it is believed stable across redeliveries —
|
|
36
|
+
* but that has NOT been verified against a live delivery, and verifying it
|
|
37
|
+
* needs a real webhook. So the fallback means a missing or unstable header
|
|
38
|
+
* degrades to body-identity dedupe rather than to *no* dedupe. PhonePe needs
|
|
39
|
+
* that branch regardless: it documents no event id, and its bodies carry
|
|
40
|
+
* `merchantOrderId` + `state`, so two identical bodies genuinely are the same
|
|
41
|
+
* logical transition.
|
|
42
|
+
*
|
|
43
|
+
* ## Write amplification
|
|
44
|
+
*
|
|
45
|
+
* 2 writes + 0 reads for a new event; 1 failed create for a duplicate. At 100
|
|
46
|
+
* events/day that is ~1% of the free daily write budget.
|
|
47
|
+
*
|
|
48
|
+
* 🛑 **Do not "optimise" this with an allowlist of event types that get a
|
|
49
|
+
* durable row.** That reintroduces the exact gap this collection closes — the
|
|
50
|
+
* unhandled event is the one you most want a record of, because it is the one
|
|
51
|
+
* no code path is watching. The correct lever for volume is unsubscribing
|
|
52
|
+
* unwanted types in the gateway's own dashboard.
|
|
53
|
+
*/
|
|
54
|
+
import type { BaseDocument } from "../../../_internal/shared/types/base-document";
|
|
55
|
+
import type { FirestoreDocument } from "../../../schemas/types";
|
|
56
|
+
export declare const GATEWAY_EVENTS_COLLECTION = "gatewayEvents";
|
|
57
|
+
/**
|
|
58
|
+
* What the event is about, with the gateway's vocabulary already resolved.
|
|
59
|
+
*
|
|
60
|
+
* Deliberately the same five values the webhook route's own `NormalisedEvent`
|
|
61
|
+
* uses, so the route classifies once and both the inbox and the dispatcher read
|
|
62
|
+
* the same answer. `"dispute"` and `"refund"` have no producer until Phase 3
|
|
63
|
+
* widens `normaliseRazorpayEvent` — they are declared here first **on purpose**:
|
|
64
|
+
* a `payment.dispute.created` arriving today lands as `kind: "other"` with its
|
|
65
|
+
* `rawEvent` intact and is therefore recoverable, rather than vanishing.
|
|
66
|
+
*/
|
|
67
|
+
export type GatewayEventKind = "paid" | "failed" | "dispute" | "refund" | "other";
|
|
68
|
+
/**
|
|
69
|
+
* Lifecycle. Every value is reachable and each means something distinct:
|
|
70
|
+
*
|
|
71
|
+
* | value | meaning |
|
|
72
|
+
* |---|---|
|
|
73
|
+
* | `received` | persisted and claimed; dispatch has not returned yet |
|
|
74
|
+
* | `processing` | re-dispatched by the stuck-event sweep (attempt ≥ 2) |
|
|
75
|
+
* | `processed` | the handler succeeded |
|
|
76
|
+
* | `ignored` | an event type we do not handle — recorded verbatim, not dropped |
|
|
77
|
+
* | `conflict` | a LATE event whose transition would regress the order |
|
|
78
|
+
* | `failed` | the handler threw; `terminal` says whether a retry can help |
|
|
79
|
+
*
|
|
80
|
+
* 🛑 `conflict` is not an error state. A late `order.paid` arriving after the
|
|
81
|
+
* order shipped is not *wrong*, it is *out of date* — and asking the gateway to
|
|
82
|
+
* retry a regression it can never win is the pathology the webhook route's own
|
|
83
|
+
* header warns about. It acks 200 and records the conflict for a human.
|
|
84
|
+
*/
|
|
85
|
+
export type GatewayEventStatus = "received" | "processing" | "processed" | "ignored" | "conflict" | "failed";
|
|
86
|
+
export interface GatewayEventDocument extends BaseDocument {
|
|
87
|
+
/** `payment.name` — "razorpay" | "phonepe" | "manual". */
|
|
88
|
+
gateway: string;
|
|
89
|
+
/** The gateway's own event string, verbatim, e.g. `payment.dispute.created`. */
|
|
90
|
+
rawEvent: string;
|
|
91
|
+
kind: GatewayEventKind;
|
|
92
|
+
status: GatewayEventStatus;
|
|
93
|
+
/**
|
|
94
|
+
* Set with `status: "failed"` to mean "a retry cannot help" — a 4xx-class
|
|
95
|
+
* fault, a validation refusal, an exhausted attempt budget. Absent means
|
|
96
|
+
* unknown, which the sweep treats as retryable.
|
|
97
|
+
*/
|
|
98
|
+
terminal?: boolean;
|
|
99
|
+
/** `x-razorpay-event-id` when the gateway sent one. Absent for PhonePe. */
|
|
100
|
+
providerEventId?: string;
|
|
101
|
+
/**
|
|
102
|
+
* sha256 of the raw body. Always present, even when `providerEventId` is —
|
|
103
|
+
* it is the dedupe fallback AND the integrity check that survives payload
|
|
104
|
+
* redaction, so the row can prove what arrived without storing it.
|
|
105
|
+
*/
|
|
106
|
+
bodySha256: string;
|
|
107
|
+
gatewayOrderId?: string;
|
|
108
|
+
gatewayPaymentId?: string;
|
|
109
|
+
/**
|
|
110
|
+
* Decimal RUPEES, never subunits. Converted at the provider boundary with
|
|
111
|
+
* `paiseToRupees` — `audit-money-units` blocks both the raw arithmetic and
|
|
112
|
+
* the word for the subunit appearing in a comment or a label.
|
|
113
|
+
*/
|
|
114
|
+
amount?: number;
|
|
115
|
+
/**
|
|
116
|
+
* The reconciliation join key: which of OUR orders this event produced or
|
|
117
|
+
* concerns. Empty on an `ignored` row and on a `failed` one that never got
|
|
118
|
+
* far enough to place anything.
|
|
119
|
+
*/
|
|
120
|
+
orderIds?: string[];
|
|
121
|
+
receivedAt: Date;
|
|
122
|
+
/**
|
|
123
|
+
* 🛑 `claimedAt`, `leaseExpiresAt` and `expiresAt` are all REQUIRED, and that
|
|
124
|
+
* is a correctness requirement rather than tidiness — Root Cause #100.
|
|
125
|
+
*
|
|
126
|
+
* The stuck-event sweep queries `leaseExpiresAt < now`, and the retention
|
|
127
|
+
* sweep queries `expiresAt < now`. **A Firestore inequality excludes every
|
|
128
|
+
* document that LACKS the field**, so an optional lease would make the
|
|
129
|
+
* detector structurally unable to see exactly the rows it exists to find:
|
|
130
|
+
* an event that crashed before claiming would be invisible to the thing
|
|
131
|
+
* watching for events that crashed. Same for retention — an optional
|
|
132
|
+
* `expiresAt` means rows that accumulate forever while the sweep reports
|
|
133
|
+
* success.
|
|
134
|
+
*
|
|
135
|
+
* The create therefore always sets all three. There is no "unclaimed" state.
|
|
136
|
+
*/
|
|
137
|
+
claimedAt: Date;
|
|
138
|
+
leaseExpiresAt: Date;
|
|
139
|
+
processedAt?: Date;
|
|
140
|
+
/** 1 on create; incremented by each re-dispatch. */
|
|
141
|
+
attempts: number;
|
|
142
|
+
/** Truncated. Never the raw body — that is what `bodySha256` is for. */
|
|
143
|
+
lastError?: string;
|
|
144
|
+
/** Retention anchor. 90 days — see `GATEWAY_EVENT_RETENTION_DAYS`. */
|
|
145
|
+
expiresAt: Date;
|
|
146
|
+
/**
|
|
147
|
+
* A REDACTED projection of the body, never the body itself.
|
|
148
|
+
*
|
|
149
|
+
* Razorpay payment entities carry `email`, `contact`, `card.last4`, `vpa` and
|
|
150
|
+
* `bank`. `redactGatewayPayload` strips those recursively and caps the
|
|
151
|
+
* result; `bodySha256` preserves integrity regardless, so nothing is lost
|
|
152
|
+
* that a diagnosis actually needs.
|
|
153
|
+
*/
|
|
154
|
+
payload?: FirestoreDocument;
|
|
155
|
+
/** True when redaction hit the size cap, so a reader knows it is partial. */
|
|
156
|
+
payloadTruncated?: boolean;
|
|
157
|
+
}
|
|
158
|
+
export declare const GATEWAY_EVENT_FIELDS: {
|
|
159
|
+
readonly ID: "id";
|
|
160
|
+
readonly GATEWAY: "gateway";
|
|
161
|
+
readonly RAW_EVENT: "rawEvent";
|
|
162
|
+
readonly KIND: "kind";
|
|
163
|
+
readonly STATUS: "status";
|
|
164
|
+
readonly TERMINAL: "terminal";
|
|
165
|
+
readonly PROVIDER_EVENT_ID: "providerEventId";
|
|
166
|
+
readonly BODY_SHA256: "bodySha256";
|
|
167
|
+
readonly GATEWAY_ORDER_ID: "gatewayOrderId";
|
|
168
|
+
readonly GATEWAY_PAYMENT_ID: "gatewayPaymentId";
|
|
169
|
+
readonly AMOUNT: "amount";
|
|
170
|
+
readonly ORDER_IDS: "orderIds";
|
|
171
|
+
readonly RECEIVED_AT: "receivedAt";
|
|
172
|
+
readonly CLAIMED_AT: "claimedAt";
|
|
173
|
+
readonly LEASE_EXPIRES_AT: "leaseExpiresAt";
|
|
174
|
+
readonly PROCESSED_AT: "processedAt";
|
|
175
|
+
readonly ATTEMPTS: "attempts";
|
|
176
|
+
readonly LAST_ERROR: "lastError";
|
|
177
|
+
readonly EXPIRES_AT: "expiresAt";
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* 90 days, deliberately longer than `serverErrors`' 30.
|
|
181
|
+
*
|
|
182
|
+
* A chargeback can arrive 120+ days after the payment it concerns, and the
|
|
183
|
+
* first thing anyone wants then is the original `order.paid` event. 90 days
|
|
184
|
+
* does not cover the full chargeback horizon — nothing short of indefinite
|
|
185
|
+
* would — but it covers the window in which an event is still the cheapest way
|
|
186
|
+
* to answer "what did the gateway actually tell us", and a row referenced by an
|
|
187
|
+
* open case is excluded from the sweep regardless.
|
|
188
|
+
*/
|
|
189
|
+
export declare const GATEWAY_EVENT_RETENTION_DAYS = 90;
|
|
190
|
+
/**
|
|
191
|
+
* How long a dispatch may hold its claim before the stuck-event sweep assumes
|
|
192
|
+
* the worker died.
|
|
193
|
+
*
|
|
194
|
+
* 🛑 Must exceed the route's own `maxDuration` (60s), or the sweep re-dispatches
|
|
195
|
+
* an event that is still legitimately in flight — which, for a `paid` event,
|
|
196
|
+
* means two concurrent order placements. The placement claim makes that a no-op
|
|
197
|
+
* rather than a double order, but relying on a downstream guard to cover a
|
|
198
|
+
* timing bug we chose is the wrong order of defences.
|
|
199
|
+
*/
|
|
200
|
+
export declare const GATEWAY_EVENT_LEASE_SECONDS = 120;
|
|
201
|
+
/** Attempts after which the sweep stops re-dispatching and opens a case. */
|
|
202
|
+
export declare const GATEWAY_EVENT_MAX_ATTEMPTS = 5;
|
|
203
|
+
/** Byte budget for the redacted payload. */
|
|
204
|
+
export declare const GATEWAY_EVENT_PAYLOAD_MAX_BYTES = 32768;
|
|
205
|
+
/** Byte budget for `lastError`. */
|
|
206
|
+
export declare const GATEWAY_EVENT_ERROR_MAX_BYTES = 2048;
|
|
207
|
+
/**
|
|
208
|
+
* Build the dedupe id. Exported so the route, the ingest helper and any future
|
|
209
|
+
* reconciler all derive it the same way — two spellings of a dedupe key is a
|
|
210
|
+
* dedupe that silently does not work.
|
|
211
|
+
*
|
|
212
|
+
* `providerEventId` is preferred because it is stable across redeliveries of
|
|
213
|
+
* the SAME event even when the body is re-serialised; the digest is the
|
|
214
|
+
* fallback. Both are prefixed with the gateway so two providers cannot collide
|
|
215
|
+
* on a shared id format.
|
|
216
|
+
*/
|
|
217
|
+
export declare function createGatewayEventId(gateway: string, providerEventId: string | undefined, bodySha256: string): string;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gatewayEvents` — the durable inbox for every payment-gateway webhook.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this collection exists
|
|
5
|
+
*
|
|
6
|
+
* Before it, a webhook was a request and nothing else. If the handler threw, or
|
|
7
|
+
* the Lambda died mid-dispatch, or the event type was one we had not written a
|
|
8
|
+
* `case` for, **the event was gone** — there was no record it had ever arrived.
|
|
9
|
+
* That is what made the 2026-10-21 incident undiagnosable (₹2,511.80 captured,
|
|
10
|
+
* no order, a manual refund): the only trace was a `serverLogger.warn` in a log
|
|
11
|
+
* buffer that drops at ~4 KB/s, and a Server Action's throw never reaches
|
|
12
|
+
* `onRequestError` because `wrapAction` returns rather than throws
|
|
13
|
+
* (Root Cause #87).
|
|
14
|
+
*
|
|
15
|
+
* The inbox inverts that. Persist, then act, then ack — so a crash leaves a row
|
|
16
|
+
* with an expired lease that a reconciler finds within 5 minutes, instead of
|
|
17
|
+
* leaving nothing at all.
|
|
18
|
+
*
|
|
19
|
+
* ## The name
|
|
20
|
+
*
|
|
21
|
+
* 🛑 Not `paymentEvents` — that collides with `RTDB_PATHS.PAYMENT_EVENTS`, a
|
|
22
|
+
* short-lived Realtime Database signal channel that is a completely different
|
|
23
|
+
* thing (a browser-facing ping, pruned every 15 minutes). Not `disputes` or
|
|
24
|
+
* `incidents` either: both names are taken, by a buyer-contests-auto-approval
|
|
25
|
+
* flow and a `scammerProfiles` subcollection respectively.
|
|
26
|
+
*
|
|
27
|
+
* ## Dedupe: the document id IS the key
|
|
28
|
+
*
|
|
29
|
+
* `${gateway}_${providerEventId ?? bodySha256.slice(0,32)}`, written with
|
|
30
|
+
* Firestore's `.create()`, which **fails if the document exists**. That is the
|
|
31
|
+
* same at-most-once primitive `gatewayOrderClaims` and `refundClaims` already
|
|
32
|
+
* use, and it needs no transaction and no read.
|
|
33
|
+
*
|
|
34
|
+
* 🛑 **The `bodySha256` fallback is load-bearing, not a nicety.** Razorpay
|
|
35
|
+
* sends `x-razorpay-event-id` and it is believed stable across redeliveries —
|
|
36
|
+
* but that has NOT been verified against a live delivery, and verifying it
|
|
37
|
+
* needs a real webhook. So the fallback means a missing or unstable header
|
|
38
|
+
* degrades to body-identity dedupe rather than to *no* dedupe. PhonePe needs
|
|
39
|
+
* that branch regardless: it documents no event id, and its bodies carry
|
|
40
|
+
* `merchantOrderId` + `state`, so two identical bodies genuinely are the same
|
|
41
|
+
* logical transition.
|
|
42
|
+
*
|
|
43
|
+
* ## Write amplification
|
|
44
|
+
*
|
|
45
|
+
* 2 writes + 0 reads for a new event; 1 failed create for a duplicate. At 100
|
|
46
|
+
* events/day that is ~1% of the free daily write budget.
|
|
47
|
+
*
|
|
48
|
+
* 🛑 **Do not "optimise" this with an allowlist of event types that get a
|
|
49
|
+
* durable row.** That reintroduces the exact gap this collection closes — the
|
|
50
|
+
* unhandled event is the one you most want a record of, because it is the one
|
|
51
|
+
* no code path is watching. The correct lever for volume is unsubscribing
|
|
52
|
+
* unwanted types in the gateway's own dashboard.
|
|
53
|
+
*/
|
|
54
|
+
export const GATEWAY_EVENTS_COLLECTION = "gatewayEvents";
|
|
55
|
+
export const GATEWAY_EVENT_FIELDS = {
|
|
56
|
+
ID: "id",
|
|
57
|
+
GATEWAY: "gateway",
|
|
58
|
+
RAW_EVENT: "rawEvent",
|
|
59
|
+
KIND: "kind",
|
|
60
|
+
STATUS: "status",
|
|
61
|
+
TERMINAL: "terminal",
|
|
62
|
+
PROVIDER_EVENT_ID: "providerEventId",
|
|
63
|
+
BODY_SHA256: "bodySha256",
|
|
64
|
+
GATEWAY_ORDER_ID: "gatewayOrderId",
|
|
65
|
+
GATEWAY_PAYMENT_ID: "gatewayPaymentId",
|
|
66
|
+
AMOUNT: "amount",
|
|
67
|
+
ORDER_IDS: "orderIds",
|
|
68
|
+
RECEIVED_AT: "receivedAt",
|
|
69
|
+
CLAIMED_AT: "claimedAt",
|
|
70
|
+
LEASE_EXPIRES_AT: "leaseExpiresAt",
|
|
71
|
+
PROCESSED_AT: "processedAt",
|
|
72
|
+
ATTEMPTS: "attempts",
|
|
73
|
+
LAST_ERROR: "lastError",
|
|
74
|
+
EXPIRES_AT: "expiresAt",
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* 90 days, deliberately longer than `serverErrors`' 30.
|
|
78
|
+
*
|
|
79
|
+
* A chargeback can arrive 120+ days after the payment it concerns, and the
|
|
80
|
+
* first thing anyone wants then is the original `order.paid` event. 90 days
|
|
81
|
+
* does not cover the full chargeback horizon — nothing short of indefinite
|
|
82
|
+
* would — but it covers the window in which an event is still the cheapest way
|
|
83
|
+
* to answer "what did the gateway actually tell us", and a row referenced by an
|
|
84
|
+
* open case is excluded from the sweep regardless.
|
|
85
|
+
*/
|
|
86
|
+
export const GATEWAY_EVENT_RETENTION_DAYS = 90;
|
|
87
|
+
/**
|
|
88
|
+
* How long a dispatch may hold its claim before the stuck-event sweep assumes
|
|
89
|
+
* the worker died.
|
|
90
|
+
*
|
|
91
|
+
* 🛑 Must exceed the route's own `maxDuration` (60s), or the sweep re-dispatches
|
|
92
|
+
* an event that is still legitimately in flight — which, for a `paid` event,
|
|
93
|
+
* means two concurrent order placements. The placement claim makes that a no-op
|
|
94
|
+
* rather than a double order, but relying on a downstream guard to cover a
|
|
95
|
+
* timing bug we chose is the wrong order of defences.
|
|
96
|
+
*/
|
|
97
|
+
export const GATEWAY_EVENT_LEASE_SECONDS = 120;
|
|
98
|
+
/** Attempts after which the sweep stops re-dispatching and opens a case. */
|
|
99
|
+
export const GATEWAY_EVENT_MAX_ATTEMPTS = 5;
|
|
100
|
+
/** Byte budget for the redacted payload. */
|
|
101
|
+
export const GATEWAY_EVENT_PAYLOAD_MAX_BYTES = 32768;
|
|
102
|
+
/** Byte budget for `lastError`. */
|
|
103
|
+
export const GATEWAY_EVENT_ERROR_MAX_BYTES = 2048;
|
|
104
|
+
/**
|
|
105
|
+
* Build the dedupe id. Exported so the route, the ingest helper and any future
|
|
106
|
+
* reconciler all derive it the same way — two spellings of a dedupe key is a
|
|
107
|
+
* dedupe that silently does not work.
|
|
108
|
+
*
|
|
109
|
+
* `providerEventId` is preferred because it is stable across redeliveries of
|
|
110
|
+
* the SAME event even when the body is re-serialised; the digest is the
|
|
111
|
+
* fallback. Both are prefixed with the gateway so two providers cannot collide
|
|
112
|
+
* on a shared id format.
|
|
113
|
+
*/
|
|
114
|
+
export function createGatewayEventId(gateway, providerEventId, bodySha256) {
|
|
115
|
+
const key = providerEventId?.trim() || bodySha256.slice(0, 32);
|
|
116
|
+
/*
|
|
117
|
+
* Firestore ids may not contain "/" and must not be "." or "..". A gateway
|
|
118
|
+
* name is ours and safe, but a provider event id is THEIRS — so it is
|
|
119
|
+
* sanitised rather than trusted. Anything outside the safe set collapses to
|
|
120
|
+
* "_", which can at worst merge two events that differ only by an unsafe
|
|
121
|
+
* character; that is strictly better than a write that throws on the one
|
|
122
|
+
* path whose whole job is to not lose the event.
|
|
123
|
+
*/
|
|
124
|
+
return `${gateway}_${key}`.replace(/[^A-Za-z0-9_.:-]/g, "_").slice(0, 1500);
|
|
125
|
+
}
|