@mohasinac/appkit 4.62.0 → 4.63.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 +8 -29
- package/dist/_internal/client/features/layout/filterNavItems.d.ts +28 -0
- package/dist/_internal/client/features/layout/filterNavItems.js +35 -0
- package/dist/_internal/server/features/ads/booking.d.ts +118 -0
- package/dist/_internal/server/features/ads/booking.js +326 -0
- package/dist/_internal/server/features/checkout/actions.d.ts +129 -9
- package/dist/_internal/server/features/checkout/actions.js +850 -79
- package/dist/_internal/server/features/checkout/expand-order-items.d.ts +1 -2
- package/dist/_internal/server/features/checkout/expand-order-items.js +32 -0
- package/dist/_internal/server/features/checkout/freeze-parts.d.ts +50 -0
- package/dist/_internal/server/features/checkout/freeze-parts.js +94 -0
- package/dist/_internal/server/features/checkout/value-otp-gate.d.ts +55 -0
- package/dist/_internal/server/features/checkout/value-otp-gate.js +60 -0
- package/dist/_internal/server/features/dashboard/attention.d.ts +128 -0
- package/dist/_internal/server/features/dashboard/attention.js +183 -0
- package/dist/_internal/server/features/dashboard/data.d.ts +47 -0
- package/dist/_internal/server/features/dashboard/data.js +82 -0
- package/dist/_internal/server/features/inventory/reservations.d.ts +99 -0
- package/dist/_internal/server/features/inventory/reservations.js +273 -0
- package/dist/_internal/server/features/invoicing/allocate.d.ts +63 -0
- package/dist/_internal/server/features/invoicing/allocate.js +162 -0
- package/dist/_internal/server/features/invoicing/credit-note.d.ts +57 -0
- package/dist/_internal/server/features/invoicing/credit-note.js +126 -0
- package/dist/_internal/server/features/invoicing/gstr1.d.ts +74 -0
- package/dist/_internal/server/features/invoicing/gstr1.js +251 -0
- package/dist/_internal/server/features/invoicing/issue.d.ts +96 -0
- package/dist/_internal/server/features/invoicing/issue.js +202 -0
- package/dist/_internal/server/features/offers/destinations.d.ts +40 -0
- package/dist/_internal/server/features/offers/destinations.js +65 -0
- package/dist/_internal/server/features/orders/actions.d.ts +8 -1
- package/dist/_internal/server/features/orders/actions.js +81 -8
- package/dist/_internal/server/features/orders/adapters.js +54 -0
- package/dist/_internal/server/features/orders/amend-delivery.d.ts +56 -0
- package/dist/_internal/server/features/orders/amend-delivery.js +124 -0
- package/dist/_internal/server/features/orders/balance.d.ts +89 -0
- package/dist/_internal/server/features/orders/balance.js +256 -0
- package/dist/_internal/server/features/orders/cancellation-refund.d.ts +15 -9
- package/dist/_internal/server/features/orders/cancellation-refund.js +15 -9
- package/dist/_internal/server/features/points/award.js +46 -4
- package/dist/_internal/server/features/pricing/actions.d.ts +58 -0
- package/dist/_internal/server/features/pricing/actions.js +144 -0
- package/dist/_internal/server/features/refunds/actions.js +26 -0
- package/dist/_internal/server/features/shipping/book-split.d.ts +86 -0
- package/dist/_internal/server/features/shipping/book-split.js +130 -0
- package/dist/_internal/server/features/shipping/book.d.ts +61 -0
- package/dist/_internal/server/features/shipping/book.js +176 -0
- package/dist/_internal/server/features/shipping/courier-block.d.ts +69 -0
- package/dist/_internal/server/features/shipping/courier-block.js +264 -0
- package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
- package/dist/_internal/server/features/site-settings/adapters.js +29 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +2 -2
- package/dist/_internal/server/features/stores/adapters.js +65 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +95 -2
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +11 -2
- package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +4 -0
- package/dist/_internal/server/jobs/core/dailyStatusDigest.js +19 -2
- package/dist/_internal/server/jobs/core/index.d.ts +2 -1
- package/dist/_internal/server/jobs/core/index.js +2 -1
- package/dist/_internal/server/jobs/core/jobRunners.js +45 -0
- package/dist/_internal/server/jobs/core/onJobCreated.d.ts +30 -7
- package/dist/_internal/server/jobs/core/onJobCreated.js +78 -45
- package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +7 -0
- package/dist/_internal/server/jobs/core/onOrderStatusChange.js +65 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +33 -0
- package/dist/_internal/server/jobs/core/reservationExpiry.d.ts +17 -0
- package/dist/_internal/server/jobs/core/reservationExpiry.js +40 -0
- package/dist/_internal/server/jobs/core/runJobOnce.d.ts +48 -0
- package/dist/_internal/server/jobs/core/runJobOnce.js +195 -0
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +25 -2
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +1 -0
- package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +17 -0
- package/dist/_internal/server/jobs/handlers/reservationExpiry.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/reservationExpiry.js +2 -0
- package/dist/_internal/server/notifications/channel-health.d.ts +26 -3
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +296 -0
- package/dist/_internal/shared/checkout/coupon-discount.d.ts +43 -1
- package/dist/_internal/shared/checkout/coupon-discount.js +26 -1
- package/dist/_internal/shared/checkout/order-math.d.ts +174 -0
- package/dist/_internal/shared/checkout/order-math.js +159 -0
- package/dist/_internal/shared/checkout/refundable-base.d.ts +25 -0
- package/dist/_internal/shared/checkout/refundable-base.js +13 -1
- package/dist/_internal/shared/checkout/rules/index.d.ts +1 -1
- package/dist/_internal/shared/checkout/rules/index.js +1 -1
- package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +18 -0
- package/dist/_internal/shared/checkout/rules/payment-gate.js +25 -0
- package/dist/_internal/shared/checkout/split.d.ts +75 -0
- package/dist/_internal/shared/checkout/split.js +120 -0
- package/dist/_internal/shared/content/disclaimers.d.ts +88 -0
- package/dist/_internal/shared/content/disclaimers.js +217 -0
- package/dist/_internal/shared/content/published-values.d.ts +93 -0
- package/dist/_internal/shared/content/published-values.js +206 -0
- package/dist/_internal/shared/features/admin/integrations.d.ts +139 -0
- package/dist/_internal/shared/features/admin/integrations.js +263 -0
- package/dist/_internal/shared/features/dashboard/hub-sections.d.ts +72 -0
- package/dist/_internal/shared/features/dashboard/hub-sections.js +75 -0
- package/dist/_internal/shared/features/emi/choice.d.ts +98 -0
- package/dist/_internal/shared/features/emi/choice.js +69 -0
- package/dist/_internal/shared/features/emi/group.d.ts +84 -0
- package/dist/_internal/shared/features/emi/group.js +126 -0
- package/dist/_internal/shared/features/ledger/posting.d.ts +107 -0
- package/dist/_internal/shared/features/ledger/posting.js +165 -0
- package/dist/_internal/shared/features/ledger/reports.d.ts +76 -0
- package/dist/_internal/shared/features/ledger/reports.js +127 -0
- package/dist/_internal/shared/features/ledger/rules.d.ts +170 -0
- package/dist/_internal/shared/features/ledger/rules.js +221 -0
- package/dist/_internal/shared/features/offers/coordination.d.ts +122 -0
- package/dist/_internal/shared/features/offers/coordination.js +80 -0
- package/dist/_internal/shared/features/orders/delivery-snapshot.d.ts +114 -0
- package/dist/_internal/shared/features/orders/delivery-snapshot.js +116 -0
- package/dist/_internal/shared/features/orders/dispute-reasons.d.ts +113 -0
- package/dist/_internal/shared/features/orders/dispute-reasons.js +181 -0
- package/dist/_internal/shared/features/orders/refund-copy.d.ts +1 -1
- package/dist/_internal/shared/features/orders/refund-copy.js +18 -1
- package/dist/_internal/shared/features/payouts/pay-period.d.ts +91 -0
- package/dist/_internal/shared/features/payouts/pay-period.js +104 -0
- package/dist/_internal/shared/features/points/accepts.d.ts +29 -0
- package/dist/_internal/shared/features/points/accepts.js +49 -0
- package/dist/_internal/shared/features/pricing/rate-registry.d.ts +150 -0
- package/dist/_internal/shared/features/pricing/rate-registry.js +246 -0
- package/dist/_internal/shared/features/shipping/parcel.d.ts +123 -0
- package/dist/_internal/shared/features/shipping/parcel.js +139 -0
- package/dist/_internal/shared/features/shipping/shared-purchase.d.ts +91 -0
- package/dist/_internal/shared/features/shipping/shared-purchase.js +108 -0
- package/dist/_internal/shared/features/site-settings/fees.d.ts +16 -8
- package/dist/_internal/shared/features/site-settings/fees.js +12 -8
- package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
- package/dist/_internal/shared/fees/calculator.d.ts +33 -1
- package/dist/_internal/shared/fees/calculator.js +32 -2
- package/dist/_internal/shared/fees/explain.d.ts +81 -0
- package/dist/_internal/shared/fees/explain.js +101 -0
- package/dist/_internal/shared/history/index.d.ts +1 -1
- package/dist/_internal/shared/history/index.js +1 -1
- package/dist/_internal/shared/history/types.d.ts +7 -1
- package/dist/_internal/shared/history/types.js +25 -0
- package/dist/client.d.ts +21 -0
- package/dist/client.js +43 -0
- package/dist/constants/api-endpoints.d.ts +114 -0
- package/dist/constants/api-endpoints.js +55 -0
- package/dist/constants/field-names.d.ts +42 -0
- package/dist/constants/field-names.js +52 -0
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/shipping.d.ts +45 -0
- package/dist/contracts/shipping.js +15 -0
- package/dist/features/about/components/AboutView.js +1 -1
- package/dist/features/account/components/BuyerAuctionsGuideView.js +4 -1
- package/dist/features/account/components/UserOrdersView.js +47 -35
- package/dist/features/admin/components/AdminCouponEditorView.js +17 -0
- package/dist/features/admin/components/AdminIntegrationsView.d.ts +55 -0
- package/dist/features/admin/components/AdminIntegrationsView.js +74 -0
- package/dist/features/admin/components/AdminInvoicingView.d.ts +2 -0
- package/dist/features/admin/components/AdminInvoicingView.js +65 -0
- package/dist/features/admin/components/AdminOrderEditorView.d.ts +33 -1
- package/dist/features/admin/components/AdminOrderEditorView.js +81 -3
- package/dist/features/admin/components/AdminOrdersGuideView.js +23 -2
- package/dist/features/admin/components/AdminOrdersView.js +86 -5
- package/dist/features/admin/components/OwnerQuickActions.js +24 -2
- package/dist/features/admin/constants/filter-tabs.d.ts +6 -0
- package/dist/features/admin/constants/filter-tabs.js +6 -0
- package/dist/features/admin/constants/site-settings-tabs.d.ts +1 -1
- package/dist/features/admin/hooks/useAdminListingData.js +16 -0
- package/dist/features/admin/schemas/admin-user-form.d.ts +2 -2
- package/dist/features/admin/schemas/firestore.d.ts +62 -0
- package/dist/features/admin/schemas/firestore.js +5 -0
- package/dist/features/ads/schemas/booking-write.d.ts +120 -0
- package/dist/features/ads/schemas/booking-write.js +75 -0
- package/dist/features/ads/schemas/creative-form.d.ts +18 -0
- package/dist/features/ads/schemas/creative-form.js +51 -0
- package/dist/features/ads/schemas/firestore.d.ts +140 -0
- package/dist/features/ads/schemas/firestore.js +109 -0
- package/dist/features/auctions/repository/bid.repository.js +3 -1
- package/dist/features/audit-log/schemas/firestore.d.ts +140 -0
- package/dist/features/audit-log/schemas/firestore.js +89 -0
- package/dist/features/auth/actions/profile-actions.d.ts +69 -1
- package/dist/features/auth/actions/profile-actions.js +62 -1
- package/dist/features/auth/permissions/constants.js +13 -0
- package/dist/features/auth/schemas/firestore.d.ts +16 -2
- package/dist/features/auth/schemas/firestore.js +2 -1
- package/dist/features/blog/actions/blog-actions.d.ts +6 -0
- package/dist/features/blog/actions/blog-actions.js +17 -2
- package/dist/features/blog/api/route.js +4 -1
- package/dist/features/blog/columns/index.js +5 -0
- package/dist/features/blog/components/BlogIndexPageView.js +2 -1
- package/dist/features/blog/repository/blog.repository.d.ts +4 -0
- package/dist/features/blog/repository/blog.repository.js +5 -0
- package/dist/features/blog/schemas/blog-form.d.ts +3 -0
- package/dist/features/blog/schemas/blog-form.js +1 -0
- package/dist/features/blog/schemas/firestore.d.ts +38 -1
- package/dist/features/blog/schemas/firestore.js +23 -0
- package/dist/features/blog/schemas/index.d.ts +6 -0
- package/dist/features/blog/schemas/index.js +2 -0
- package/dist/features/blog/types/index.d.ts +2 -0
- package/dist/features/cart/components/CartPriceBreakdown.d.ts +25 -1
- package/dist/features/cart/components/CartPriceBreakdown.js +29 -6
- package/dist/features/cart/components/PointsTenderPicker.d.ts +61 -0
- package/dist/features/cart/components/PointsTenderPicker.js +15 -0
- package/dist/features/cart/components/StoreAddonsPicker.js +2 -1
- package/dist/features/cart/components/index.d.ts +2 -0
- package/dist/features/cart/components/index.js +1 -0
- package/dist/features/cart/repository/cart.repository.d.ts +33 -0
- package/dist/features/cart/repository/cart.repository.js +47 -0
- package/dist/features/cart/schemas/firestore.d.ts +116 -0
- package/dist/features/contact/email.d.ts +27 -10
- package/dist/features/contact/email.js +20 -3
- package/dist/features/dashboard/components/DashboardHubView.d.ts +83 -0
- package/dist/features/dashboard/components/DashboardHubView.js +56 -0
- package/dist/features/dashboard/components/DashboardSectionsClient.d.ts +23 -0
- package/dist/features/dashboard/components/DashboardSectionsClient.js +66 -0
- package/dist/features/dispute-reasons/components/AdminDisputeReasonsView.d.ts +55 -0
- package/dist/features/dispute-reasons/components/AdminDisputeReasonsView.js +175 -0
- package/dist/features/dispute-reasons/repository/dispute-reasons.repository.d.ts +62 -0
- package/dist/features/dispute-reasons/repository/dispute-reasons.repository.js +108 -0
- package/dist/features/dispute-reasons/schemas/firestore.d.ts +62 -0
- package/dist/features/dispute-reasons/schemas/firestore.js +40 -0
- package/dist/features/events/components/EventSaleBanner.js +1 -1
- package/dist/features/faq/components/FAQAccordion.d.ts +13 -1
- package/dist/features/faq/components/FAQAccordion.js +29 -4
- package/dist/features/faq/components/FAQPageContent.js +2 -2
- package/dist/features/gateway-events/schemas/index.d.ts +2 -2
- package/dist/features/homepage/schemas/index.d.ts +8 -8
- package/dist/features/inventory/schemas/stock-reservation.d.ts +114 -0
- package/dist/features/inventory/schemas/stock-reservation.js +103 -0
- package/dist/features/invoicing/schemas/firestore.d.ts +112 -0
- package/dist/features/invoicing/schemas/firestore.js +45 -0
- package/dist/features/invoicing/utils/financial-year.d.ts +43 -0
- package/dist/features/invoicing/utils/financial-year.js +53 -0
- package/dist/features/jobs/actions/enqueue-job.js +18 -1
- package/dist/features/jobs/repository/jobs.repository.d.ts +62 -1
- package/dist/features/jobs/repository/jobs.repository.js +84 -1
- package/dist/features/jobs/schemas/firestore.d.ts +80 -0
- package/dist/features/jobs/schemas/firestore.js +37 -0
- package/dist/features/layout/AppLayoutShell.d.ts +9 -1
- package/dist/features/layout/AppLayoutShell.js +12 -4
- package/dist/features/layout/BottomActions.js +2 -1
- package/dist/features/layout/BottomNavbar.d.ts +10 -2
- package/dist/features/layout/SideActionDock.js +52 -2
- package/dist/features/layout/TitleBarLayout.js +13 -4
- package/dist/features/layout/TitleBarLayout.style.css +59 -0
- package/dist/features/layout/useCtaReveal.d.ts +16 -1
- package/dist/features/layout/useCtaReveal.js +17 -26
- package/dist/features/ledger/repository/journal.repository.d.ts +110 -0
- package/dist/features/ledger/repository/journal.repository.js +312 -0
- package/dist/features/ledger/schemas/expenses.d.ts +87 -0
- package/dist/features/ledger/schemas/expenses.js +27 -0
- package/dist/features/ledger/schemas/firestore.d.ts +183 -0
- package/dist/features/ledger/schemas/firestore.js +69 -0
- package/dist/features/lottery/schemas/zod.d.ts +6 -6
- package/dist/features/media/MediaImage.js +22 -1
- package/dist/features/media/upload/ImageUpload.js +1 -1
- package/dist/features/obligations/constants/policies.js +24 -1
- package/dist/features/orders/components/BalancePaymentPanel.d.ts +12 -0
- package/dist/features/orders/components/BalancePaymentPanel.js +94 -0
- package/dist/features/orders/components/OrderPaymentSummary.js +10 -1
- package/dist/features/orders/components/OrderProvenanceCard.d.ts +8 -0
- package/dist/features/orders/components/OrderProvenanceCard.js +185 -0
- package/dist/features/orders/components/RaiseDisputeForm.d.ts +14 -0
- package/dist/features/orders/components/RaiseDisputeForm.js +119 -0
- package/dist/features/orders/components/RefundRequestView.js +19 -1
- package/dist/features/orders/components/index.d.ts +4 -0
- package/dist/features/orders/components/index.js +2 -0
- package/dist/features/orders/constants/order-lane-tabs.d.ts +69 -0
- package/dist/features/orders/constants/order-lane-tabs.js +88 -0
- package/dist/features/orders/repository/orders.repository.d.ts +85 -1
- package/dist/features/orders/repository/orders.repository.js +205 -6
- package/dist/features/orders/schemas/balance.d.ts +40 -0
- package/dist/features/orders/schemas/balance.js +47 -0
- package/dist/features/orders/schemas/firestore.d.ts +398 -1
- package/dist/features/orders/schemas/firestore.js +43 -0
- package/dist/features/orders/schemas/index.d.ts +56 -8
- package/dist/features/orders/schemas/index.js +12 -0
- package/dist/features/orders/types/index.d.ts +47 -0
- package/dist/features/orders/utils/courier-block.d.ts +25 -0
- package/dist/features/orders/utils/courier-block.js +23 -0
- package/dist/features/payment-cases/schemas/firestore.d.ts +26 -1
- package/dist/features/payment-cases/schemas/firestore.js +1 -0
- package/dist/features/payments/repository/payout.repository.js +3 -2
- package/dist/features/payments/schemas/firestore.d.ts +92 -1
- package/dist/features/payments/schemas/firestore.js +23 -0
- package/dist/features/pricing/components/AdminPricingView.d.ts +13 -0
- package/dist/features/pricing/components/AdminPricingView.js +157 -0
- package/dist/features/products/components/PrizeDrawDetailPageView.js +2 -2
- package/dist/features/products/components/ProductDetailPageView.d.ts +17 -1
- package/dist/features/products/components/ProductDetailPageView.js +2 -2
- package/dist/features/products/schemas/firestore.d.ts +26 -1
- package/dist/features/products/schemas/firestore.js +2 -0
- package/dist/features/products/schemas/index.d.ts +2 -2
- package/dist/features/products/schemas/product-features.validators.d.ts +10 -10
- package/dist/features/promotions/actions/coupon-stacking.d.ts +30 -3
- package/dist/features/promotions/actions/coupon-stacking.js +21 -2
- package/dist/features/promotions/components/CouponCard.js +13 -0
- package/dist/features/promotions/constants/coupon-help.d.ts +2 -2
- package/dist/features/promotions/constants/coupon-help.js +9 -1
- package/dist/features/promotions/schemas/firestore.d.ts +24 -0
- package/dist/features/promotions/schemas/firestore.js +4 -0
- package/dist/features/promotions/types/index.d.ts +19 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +14 -0
- package/dist/features/reviews/repository/reviews.repository.js +16 -0
- package/dist/features/scams/components/ScamProfileView.js +2 -2
- package/dist/features/scams/components/ScamRegistryView.js +2 -2
- package/dist/features/scams/repository/scammer.repository.js +2 -1
- package/dist/features/scams/schemas/firestore.d.ts +2 -1
- package/dist/features/scams/schemas/firestore.js +2 -1
- package/dist/features/search/action-index/tab-entries.js +1 -1
- package/dist/features/seller/actions/offer-actions.js +56 -0
- package/dist/features/seller/actions/seller-actions.d.ts +1 -1
- package/dist/features/seller/actions/seller-actions.js +37 -3
- package/dist/features/seller/components/DispatchForm.d.ts +11 -0
- package/dist/features/seller/components/DispatchForm.js +190 -0
- package/dist/features/seller/components/SellerOrdersView.js +221 -27
- package/dist/features/seller/components/index.d.ts +1 -0
- package/dist/features/seller/components/index.js +1 -0
- package/dist/features/seller/hooks/useSellerListingData.js +25 -0
- package/dist/features/seller/repository/offer.repository.js +4 -3
- package/dist/features/seller/schemas/firestore.d.ts +23 -2
- package/dist/features/seller/schemas/firestore.js +3 -2
- package/dist/features/seller/schemas/index.d.ts +4 -4
- package/dist/features/seller/schemas/order-forms.d.ts +61 -4
- package/dist/features/seller/schemas/order-forms.js +41 -8
- package/dist/features/shipments/schemas/firestore.d.ts +25 -0
- package/dist/features/shipments/schemas/validation.d.ts +4 -4
- package/dist/features/shipping-boxes/repository/shipping-boxes.repository.d.ts +82 -0
- package/dist/features/shipping-boxes/repository/shipping-boxes.repository.js +145 -0
- package/dist/features/shipping-boxes/schemas/firestore.d.ts +80 -0
- package/dist/features/shipping-boxes/schemas/firestore.js +53 -0
- package/dist/features/store-extensions/schemas/report-create-form.d.ts +2 -2
- package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +2 -2
- package/dist/features/stores/components/StoreOrdersGuideView.js +6 -1
- package/dist/features/stores/repository/store.repository.d.ts +18 -0
- package/dist/features/stores/repository/store.repository.js +27 -1
- package/dist/features/stores/schemas/firestore.d.ts +112 -0
- package/dist/features/stores/schemas/firestore.js +20 -0
- package/dist/features/stores/schemas/index.d.ts +6 -6
- package/dist/features/stores/types/index.d.ts +19 -0
- package/dist/features/support/repository/support.repository.js +72 -6
- package/dist/features/support/schemas/firestore.d.ts +17 -0
- package/dist/features/support/schemas/index.d.ts +8 -8
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +33 -1
- package/dist/next/routing/route-map.d.ts +112 -0
- package/dist/next/routing/route-map.js +63 -0
- package/dist/providers/shipping-shiprocket/index.d.ts +27 -1
- package/dist/providers/shipping-shiprocket/index.js +84 -1
- package/dist/react/contexts/SessionContext.d.ts +17 -1
- package/dist/schemas/registry.d.ts +69 -34
- package/dist/schemas/sieve.d.ts +2 -2
- package/dist/security/pii-schemas.d.ts +1 -1
- package/dist/security/pii-schemas.js +45 -0
- package/dist/server-entry.d.ts +2 -2
- package/dist/server-entry.js +8 -1
- package/dist/server.d.ts +36 -1
- package/dist/server.js +183 -1
- package/dist/styles.css +412 -80
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +1 -0
- package/dist/tokens/themes/default-light.js +1 -0
- package/dist/tokens/themes/required.d.ts +1 -1
- package/dist/tokens/themes/required.js +1 -0
- package/dist/tokens/tokens.css +15 -0
- package/dist/ui/components/Button.d.ts +10 -1
- package/dist/ui/components/Button.js +25 -3
- package/dist/ui/components/Chart.d.ts +63 -0
- package/dist/ui/components/Chart.js +169 -0
- package/dist/ui/components/Chart.style.css +214 -0
- package/dist/ui/components/Disclaimer.d.ts +19 -0
- package/dist/ui/components/Disclaimer.js +83 -0
- package/dist/ui/components/OverflowRow.js +54 -2
- package/dist/ui/components/OverflowRow.style.css +38 -0
- package/dist/ui/components/RichTextEditor.js +99 -8
- package/dist/ui/components/chart-spec.d.ts +68 -0
- package/dist/ui/components/chart-spec.js +140 -0
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/components/surface-tokens.d.ts +1 -1
- package/dist/ui/components/surface-tokens.js +9 -0
- package/dist/ui/components/tabs-overflow.js +64 -11
- package/dist/ui/components/toolbar-collapse.d.ts +13 -0
- package/dist/ui/components/toolbar-collapse.js +10 -1
- package/dist/ui/index.d.ts +8 -0
- package/dist/ui/index.js +9 -0
- package/dist/ui/rich-text/RichText.d.ts +10 -1
- package/dist/ui/rich-text/RichText.js +33 -2
- package/dist/ui/rich-text/RichText.style.css +83 -79
- package/dist/ui/rich-text/RichTextRenderer.d.ts +30 -1
- package/dist/ui/rich-text/RichTextRenderer.js +34 -2
- package/dist/ui/rich-text/chart-blocks.d.ts +62 -0
- package/dist/ui/rich-text/chart-blocks.js +87 -0
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +1834 -1822
|
@@ -129,6 +129,10 @@ export const ADMIN_ENDPOINTS = {
|
|
|
129
129
|
/** The action-index control plane (W7 / D7) — GET the whole index, PATCH one override. */
|
|
130
130
|
ACTION_INDEX: "/api/admin/action-index",
|
|
131
131
|
AD_BY_ID: (id) => `/api/admin/ads/${id}`,
|
|
132
|
+
/** D56 — the self-serve creative moderation queue. */
|
|
133
|
+
AD_BOOKINGS: "/api/admin/ads/bookings",
|
|
134
|
+
/** D56 — approve or reject one creative. A rejection REQUIRES a note. */
|
|
135
|
+
AD_BOOKING_MODERATE: (id) => `/api/admin/ads/bookings/${id}/moderate`,
|
|
132
136
|
PAYMENTS_SETTINGS: "/api/admin/payments/settings",
|
|
133
137
|
PRODUCTS: "/api/admin/products",
|
|
134
138
|
PRODUCT_BY_ID: (id) => `/api/admin/products/${id}`,
|
|
@@ -141,6 +145,12 @@ export const ADMIN_ENDPOINTS = {
|
|
|
141
145
|
ORDER_PAYMENT_VERIFY: (id) => `/api/admin/orders/${id}/payment-verify`,
|
|
142
146
|
ORDER_PAYMENT_REUPLOAD: (id) => `/api/admin/orders/${id}/payment-reupload`,
|
|
143
147
|
ORDER_PAYMENT_REJECT_FRAUD: (id) => `/api/admin/orders/${id}/payment-reject-fraud`,
|
|
148
|
+
/*
|
|
149
|
+
* D55 — approve or reject a pre-order BALANCE proof. Separate from the
|
|
150
|
+
* three `ORDER_PAYMENT_*` routes above, which review the DEPOSIT: the two
|
|
151
|
+
* payments are months apart and each carries its own proof, status and note.
|
|
152
|
+
*/
|
|
153
|
+
ORDER_BALANCE_REVIEW: (id) => `/api/admin/orders/${id}/balance-review`,
|
|
144
154
|
USERS: "/api/admin/users",
|
|
145
155
|
USERS_BULK: "/api/admin/users/bulk",
|
|
146
156
|
USER_BY_ID: (uid) => `/api/admin/users/${uid}`,
|
|
@@ -187,6 +197,14 @@ export const ADMIN_ENDPOINTS = {
|
|
|
187
197
|
PAYOUTS_EXPORT: "/api/admin/payouts/export",
|
|
188
198
|
AUDIT_LOG: "/api/admin/audit-log",
|
|
189
199
|
AUDIT_LOG_BY_ID: (id) => `/api/admin/audit-log/${id}`,
|
|
200
|
+
/**
|
|
201
|
+
* Phase 7 — the GSTR-1 DRAFT export. Takes `?from=&to=` as YYYY-MM-DD and
|
|
202
|
+
* returns a CSV.
|
|
203
|
+
*
|
|
204
|
+
* 🛑 "draft" is in the filename for a reason: nothing in this codebase talks
|
|
205
|
+
* to the GST portal, and the file is the input to a human filing.
|
|
206
|
+
*/
|
|
207
|
+
INVOICING_GSTR1: "/api/admin/invoicing/gstr1",
|
|
190
208
|
/*
|
|
191
209
|
* Payment protection. `payment-cases` is NOT under `maintenance/` — see the
|
|
192
210
|
* route-map entry for why: maintenance means "something broke, look when you
|
|
@@ -325,6 +343,19 @@ export const CART_ENDPOINTS = {
|
|
|
325
343
|
SELECTION: "/api/cart/selection",
|
|
326
344
|
/** Per-store paid add-on selections — the source of truth for what's charged. */
|
|
327
345
|
ADDONS: "/api/cart/addons",
|
|
346
|
+
/**
|
|
347
|
+
* Pay with points, on or off (D46/D47). A boolean and nothing else — the
|
|
348
|
+
* AMOUNT is derived server-side from the live balance and the 50% cap, which
|
|
349
|
+
* is why there is no `/api/cart/points/amount`.
|
|
350
|
+
*/
|
|
351
|
+
POINTS: "/api/cart/points",
|
|
352
|
+
/**
|
|
353
|
+
* The instalment plan — a TENURE and nothing else. It lives on the cart,
|
|
354
|
+
* not in a checkout body, because the online path needs the same answer in
|
|
355
|
+
* two requests (`/api/payment/create-order` captures, `/api/payment/verify`
|
|
356
|
+
* writes the order). Same reasoning as `POINTS` and `ADDONS` above.
|
|
357
|
+
*/
|
|
358
|
+
EMI: "/api/cart/emi",
|
|
328
359
|
COUPON: "/api/cart/coupon",
|
|
329
360
|
/**
|
|
330
361
|
* Add a buyer-assembled group selection as ONE line. Separate from `GET`'s
|
|
@@ -575,6 +606,13 @@ export const ORDER_ENDPOINTS = {
|
|
|
575
606
|
BY_ID: (id) => `/api/orders/${id}`,
|
|
576
607
|
TRACK: (trackingId) => `/api/orders/track/${trackingId}`,
|
|
577
608
|
PAYMENT_PROOF: (id) => `/api/orders/${id}/payment-proof`,
|
|
609
|
+
/*
|
|
610
|
+
* D55 — proof of paying a pre-order BALANCE. Deliberately a separate
|
|
611
|
+
* endpoint from `PAYMENT_PROOF`, which is the DEPOSIT's: a pre-order has
|
|
612
|
+
* two payments months apart, and writing the second over the first would
|
|
613
|
+
* destroy the evidence for the payment that created the order.
|
|
614
|
+
*/
|
|
615
|
+
BALANCE_PROOF: (id) => `/api/orders/${id}/balance-proof`,
|
|
578
616
|
DISPUTE: (id) => `/api/orders/${id}/dispute`,
|
|
579
617
|
};
|
|
580
618
|
// ---------------------------------------------------------------------------
|
|
@@ -643,6 +681,23 @@ export const SELLER_ENDPOINTS = {
|
|
|
643
681
|
PRODUCTS: "/api/store/products",
|
|
644
682
|
ORDERS: "/api/store/orders",
|
|
645
683
|
ORDERS_BY_ID: (orderId) => `/api/store/orders/${orderId}`,
|
|
684
|
+
/**
|
|
685
|
+
* Dispatch — BOTH branches of `shipOrderSchema`'s discriminated union.
|
|
686
|
+
*
|
|
687
|
+
* `method: "custom"` records a carrier the seller posted themselves;
|
|
688
|
+
* `method: "platform"` enqueues a booking through our own account. One
|
|
689
|
+
* route, because they are one decision — a second endpoint for the
|
|
690
|
+
* platform branch would be the same handler behind two ceilings, which is
|
|
691
|
+
* Root Cause #85.
|
|
692
|
+
*/
|
|
693
|
+
ORDER_SHIP: (orderId) => `/api/store/orders/${orderId}/ship`,
|
|
694
|
+
/*
|
|
695
|
+
* D55 — "the goods have landed, the balance is now payable". An EVENT, not
|
|
696
|
+
* a derived state: a pre-order's premise is that the item does not exist
|
|
697
|
+
* yet, so the balance becomes collectable when the seller says stock
|
|
698
|
+
* arrived, and the buyer's 7-day window runs from that moment.
|
|
699
|
+
*/
|
|
700
|
+
ORDER_OPEN_BALANCE: (orderId) => `/api/store/orders/${orderId}/open-balance`,
|
|
646
701
|
AUCTIONS: "/api/store/products",
|
|
647
702
|
COUPONS: "/api/store/coupons",
|
|
648
703
|
COUPON_BY_ID: (id) => `/api/store/coupons/${id}`,
|
|
@@ -230,6 +230,17 @@ export declare const ORDER_FIELDS: {
|
|
|
230
230
|
readonly TOTAL_AMOUNT: "totalAmount";
|
|
231
231
|
readonly BUYER_ID: "buyerId";
|
|
232
232
|
readonly BUNDLE_ID: "bundleId";
|
|
233
|
+
/**
|
|
234
|
+
* Which checkout LANE produced this order (`standard` / `auction` / `offer`
|
|
235
|
+
* / `preorder` / `prize-draw`) — see § "Checkout Lanes".
|
|
236
|
+
*
|
|
237
|
+
* 🛑 Never filter `orderType == "standard"` in a query. Orders written
|
|
238
|
+
* before the field existed carry no value at all, and a Firestore equality
|
|
239
|
+
* cannot match an absent field, so that filter silently drops every legacy
|
|
240
|
+
* order. `UserOrdersView` filters the standard lane in memory for exactly
|
|
241
|
+
* this reason; the other four values are safe as equalities.
|
|
242
|
+
*/
|
|
243
|
+
readonly ORDER_TYPE: "orderType";
|
|
233
244
|
readonly CREATED_AT: "createdAt";
|
|
234
245
|
readonly UPDATED_AT: "updatedAt";
|
|
235
246
|
readonly PAYMENT_DEADLINE: "paymentDeadline";
|
|
@@ -835,6 +846,7 @@ export declare const COUPON_FIELDS: {
|
|
|
835
846
|
readonly FIXED: "fixed";
|
|
836
847
|
readonly FREE_SHIPPING: "free_shipping";
|
|
837
848
|
readonly BUY_X_GET_Y: "buy_x_get_y";
|
|
849
|
+
readonly POINTS_EARN: "points_earn";
|
|
838
850
|
};
|
|
839
851
|
readonly SCOPE_VALUES: {
|
|
840
852
|
readonly ADMIN: "admin";
|
|
@@ -999,6 +1011,36 @@ export declare const REFUND_CLAIM_FIELDS: {
|
|
|
999
1011
|
export declare const PRICE_OBSERVATION_FIELDS: {
|
|
1000
1012
|
readonly CATEGORY_ID: "categoryId";
|
|
1001
1013
|
};
|
|
1014
|
+
/**
|
|
1015
|
+
* A TTL-bounded hold on units of a product. See
|
|
1016
|
+
* `features/inventory/schemas/stock-reservation.ts` for why a reservation is
|
|
1017
|
+
* its own document rather than a counter on the product: the row and the
|
|
1018
|
+
* counter move in ONE transaction, so a crash between them is impossible.
|
|
1019
|
+
*/
|
|
1020
|
+
export declare const STOCK_RESERVATION_FIELDS: {
|
|
1021
|
+
readonly PRODUCT_ID: "productId";
|
|
1022
|
+
readonly QUANTITY: "quantity";
|
|
1023
|
+
readonly HOLDER_KIND: "holderKind";
|
|
1024
|
+
readonly HOLDER_ID: "holderId";
|
|
1025
|
+
readonly CREATED_BY: "createdBy";
|
|
1026
|
+
readonly STATUS: "status";
|
|
1027
|
+
readonly EXPIRES_AT: "expiresAt";
|
|
1028
|
+
readonly ENDED_AT: "endedAt";
|
|
1029
|
+
readonly ENDED_REASON: "endedReason";
|
|
1030
|
+
};
|
|
1031
|
+
/**
|
|
1032
|
+
* One advertiser's booking of one placement for one period. The document id
|
|
1033
|
+
* IS the lock (`adBookingId`), so there is deliberately no `period`+`placementId`
|
|
1034
|
+
* uniqueness query to write — see `features/ads/schemas/firestore.ts`.
|
|
1035
|
+
*/
|
|
1036
|
+
export declare const AD_BOOKING_FIELDS: {
|
|
1037
|
+
readonly PLACEMENT_ID: "placementId";
|
|
1038
|
+
readonly PERIOD: "period";
|
|
1039
|
+
readonly ADVERTISER_UID: "advertiserUid";
|
|
1040
|
+
readonly PAYMENT_STATE: "paymentState";
|
|
1041
|
+
readonly CANCELLED_AT: "cancelledAt";
|
|
1042
|
+
readonly CREATED_AT: "createdAt";
|
|
1043
|
+
};
|
|
1002
1044
|
export declare const OAUTH_STATE_VALUES: {
|
|
1003
1045
|
readonly PENDING: "pending";
|
|
1004
1046
|
readonly USED: "used";
|
|
@@ -258,6 +258,17 @@ export const ORDER_FIELDS = {
|
|
|
258
258
|
TOTAL_AMOUNT: "totalAmount",
|
|
259
259
|
BUYER_ID: "buyerId",
|
|
260
260
|
BUNDLE_ID: "bundleId",
|
|
261
|
+
/**
|
|
262
|
+
* Which checkout LANE produced this order (`standard` / `auction` / `offer`
|
|
263
|
+
* / `preorder` / `prize-draw`) — see § "Checkout Lanes".
|
|
264
|
+
*
|
|
265
|
+
* 🛑 Never filter `orderType == "standard"` in a query. Orders written
|
|
266
|
+
* before the field existed carry no value at all, and a Firestore equality
|
|
267
|
+
* cannot match an absent field, so that filter silently drops every legacy
|
|
268
|
+
* order. `UserOrdersView` filters the standard lane in memory for exactly
|
|
269
|
+
* this reason; the other four values are safe as equalities.
|
|
270
|
+
*/
|
|
271
|
+
ORDER_TYPE: "orderType",
|
|
261
272
|
CREATED_AT: "createdAt",
|
|
262
273
|
UPDATED_AT: "updatedAt",
|
|
263
274
|
PAYMENT_DEADLINE: "paymentDeadline",
|
|
@@ -1003,6 +1014,11 @@ export const COUPON_FIELDS = {
|
|
|
1003
1014
|
FIXED: "fixed",
|
|
1004
1015
|
FREE_SHIPPING: "free_shipping",
|
|
1005
1016
|
BUY_X_GET_Y: "buy_x_get_y",
|
|
1017
|
+
// D51. 🛑 This file calls itself canonical and has been stale twice
|
|
1018
|
+
// (EVENT_FIELDS invented a "published" status, SCAMMER_FIELDS lost
|
|
1019
|
+
// "removed") — Root Cause #34. The authority is `CouponType` in
|
|
1020
|
+
// features/promotions/types; this mirror has to follow it.
|
|
1021
|
+
POINTS_EARN: "points_earn",
|
|
1006
1022
|
},
|
|
1007
1023
|
SCOPE_VALUES: {
|
|
1008
1024
|
ADMIN: "admin",
|
|
@@ -1198,6 +1214,42 @@ export const PRICE_OBSERVATION_FIELDS = {
|
|
|
1198
1214
|
CATEGORY_ID: "categoryId",
|
|
1199
1215
|
};
|
|
1200
1216
|
// ============================================================================
|
|
1217
|
+
// STOCK RESERVATIONS
|
|
1218
|
+
// ============================================================================
|
|
1219
|
+
/**
|
|
1220
|
+
* A TTL-bounded hold on units of a product. See
|
|
1221
|
+
* `features/inventory/schemas/stock-reservation.ts` for why a reservation is
|
|
1222
|
+
* its own document rather than a counter on the product: the row and the
|
|
1223
|
+
* counter move in ONE transaction, so a crash between them is impossible.
|
|
1224
|
+
*/
|
|
1225
|
+
export const STOCK_RESERVATION_FIELDS = {
|
|
1226
|
+
PRODUCT_ID: "productId",
|
|
1227
|
+
QUANTITY: "quantity",
|
|
1228
|
+
HOLDER_KIND: "holderKind",
|
|
1229
|
+
HOLDER_ID: "holderId",
|
|
1230
|
+
CREATED_BY: "createdBy",
|
|
1231
|
+
STATUS: "status",
|
|
1232
|
+
EXPIRES_AT: "expiresAt",
|
|
1233
|
+
ENDED_AT: "endedAt",
|
|
1234
|
+
ENDED_REASON: "endedReason",
|
|
1235
|
+
};
|
|
1236
|
+
// ============================================================================
|
|
1237
|
+
// AD BOOKINGS
|
|
1238
|
+
// ============================================================================
|
|
1239
|
+
/**
|
|
1240
|
+
* One advertiser's booking of one placement for one period. The document id
|
|
1241
|
+
* IS the lock (`adBookingId`), so there is deliberately no `period`+`placementId`
|
|
1242
|
+
* uniqueness query to write — see `features/ads/schemas/firestore.ts`.
|
|
1243
|
+
*/
|
|
1244
|
+
export const AD_BOOKING_FIELDS = {
|
|
1245
|
+
PLACEMENT_ID: "placementId",
|
|
1246
|
+
PERIOD: "period",
|
|
1247
|
+
ADVERTISER_UID: "advertiserUid",
|
|
1248
|
+
PAYMENT_STATE: "paymentState",
|
|
1249
|
+
CANCELLED_AT: "cancelledAt",
|
|
1250
|
+
CREATED_AT: "createdAt",
|
|
1251
|
+
};
|
|
1252
|
+
// ============================================================================
|
|
1201
1253
|
// OAUTH STATE VALUES
|
|
1202
1254
|
// ============================================================================
|
|
1203
1255
|
export const OAUTH_STATE_VALUES = {
|
|
@@ -4,7 +4,7 @@ export type { EmailAttachment, EmailOptions, EmailResult, IEmailProvider, } from
|
|
|
4
4
|
export type { UploadOptions, StorageFile, IStorageProvider } from "./storage";
|
|
5
5
|
export type { PaymentOrder, PaymentCapture, Refund, Dispute, GatewayPaymentRecord, } from "./payment";
|
|
6
6
|
export { IPaymentProvider } from "./payment";
|
|
7
|
-
export type { ShippingAddress, CreateShipmentInput, Shipment, TrackingEvent, TrackingInfo, ServiceabilityResult, } from "./shipping";
|
|
7
|
+
export type { ShippingAddress, CreateShipmentInput, Shipment, TrackingEvent, TrackingInfo, ServiceabilityResult, WalletBalance, } from "./shipping";
|
|
8
8
|
export { IShippingProvider } from "./shipping";
|
|
9
9
|
export type { SearchOptions, SearchHit, SearchResult, SuggestOptions, ISearchProvider, } from "./search";
|
|
10
10
|
export type { ICacheProvider, QueueJob, IQueueProvider, EventHandler, IEventBus, } from "./infra";
|
|
@@ -50,6 +50,38 @@ export interface ServiceabilityResult {
|
|
|
50
50
|
rate: number;
|
|
51
51
|
}>;
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* A courier provider's prepaid balance.
|
|
55
|
+
*
|
|
56
|
+
* 🛑 THREE states, not two, and collapsing them is the whole hazard:
|
|
57
|
+
*
|
|
58
|
+
* - `{ known: false, supported: false }` — this provider has no wallet at all
|
|
59
|
+
* (manual shipping). Nothing to check, ever.
|
|
60
|
+
* - `{ known: false, supported: true }` — it HAS one and we could not read it
|
|
61
|
+
* right now (network, malformed payload, auth). **Treat as "attempt the
|
|
62
|
+
* booking"**: the attempt's own failure is the authority, and refusing on an
|
|
63
|
+
* unreadable balance would degrade every order on a transient blip.
|
|
64
|
+
* - `{ known: true, amount }` — a real figure.
|
|
65
|
+
*
|
|
66
|
+
* A balance of `0` is the LAST of those, and is a decision to skip. "I could
|
|
67
|
+
* not read it" is not "there is no money".
|
|
68
|
+
*
|
|
69
|
+
* 🛑 There is deliberately NO `creditLimit` field. Measured against the live
|
|
70
|
+
* Shiprocket API 2026-10-22: `GET /account/details/wallet-balance` returns
|
|
71
|
+
* `{ data: { balance_amount: string } }` and nothing else, and
|
|
72
|
+
* `/account/details` is a 404. So postpaid credit is not readable, and a field
|
|
73
|
+
* with no producer is the speculative-infra pattern this codebase refuses.
|
|
74
|
+
* When postpaid is granted, re-probe and add it then.
|
|
75
|
+
*/
|
|
76
|
+
export type WalletBalance = {
|
|
77
|
+
known: true;
|
|
78
|
+
amount: number;
|
|
79
|
+
currency?: string;
|
|
80
|
+
} | {
|
|
81
|
+
known: false;
|
|
82
|
+
supported: boolean;
|
|
83
|
+
reason?: string;
|
|
84
|
+
};
|
|
53
85
|
/**
|
|
54
86
|
* Shipping carrier adapter contract. An abstract base class rather than a
|
|
55
87
|
* plain interface so every provider (manual, and any future carrier
|
|
@@ -66,4 +98,17 @@ export declare abstract class IShippingProvider {
|
|
|
66
98
|
abstract cancelShipment(shipmentId: string): Promise<void>;
|
|
67
99
|
abstract checkServiceability(pincode: string, weight: number): Promise<ServiceabilityResult>;
|
|
68
100
|
abstract generateLabel(shipmentId: string): Promise<ArrayBuffer>;
|
|
101
|
+
/**
|
|
102
|
+
* The provider's prepaid balance, when it HAS one.
|
|
103
|
+
*
|
|
104
|
+
* 🛑 Deliberately NOT abstract. Manual shipping has no wallet — a seller
|
|
105
|
+
* posts the parcel and claims the cost back — so an abstract member would
|
|
106
|
+
* force every implementation to invent an answer. A non-abstract default is
|
|
107
|
+
* the established shape here for a capability a provider lacks (the dispute
|
|
108
|
+
* contract's `listDisputes() => []` is the precedent).
|
|
109
|
+
*
|
|
110
|
+
* The default says "I do not have one", which is TRUE for manual and is not
|
|
111
|
+
* the same statement as "I have one and it is empty".
|
|
112
|
+
*/
|
|
113
|
+
getWalletBalance(): Promise<WalletBalance>;
|
|
69
114
|
}
|
|
@@ -9,4 +9,19 @@
|
|
|
9
9
|
* Implemented by the manual provider (default) and its mock.
|
|
10
10
|
*/
|
|
11
11
|
export class IShippingProvider {
|
|
12
|
+
/**
|
|
13
|
+
* The provider's prepaid balance, when it HAS one.
|
|
14
|
+
*
|
|
15
|
+
* 🛑 Deliberately NOT abstract. Manual shipping has no wallet — a seller
|
|
16
|
+
* posts the parcel and claims the cost back — so an abstract member would
|
|
17
|
+
* force every implementation to invent an answer. A non-abstract default is
|
|
18
|
+
* the established shape here for a capability a provider lacks (the dispute
|
|
19
|
+
* contract's `listDisputes() => []` is the precedent).
|
|
20
|
+
*
|
|
21
|
+
* The default says "I do not have one", which is TRUE for manual and is not
|
|
22
|
+
* the same statement as "I have one and it is empty".
|
|
23
|
+
*/
|
|
24
|
+
async getWalletBalance() {
|
|
25
|
+
return { known: false, supported: false };
|
|
26
|
+
}
|
|
12
27
|
}
|
|
@@ -2,5 +2,5 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Anchor, Avatar, Badge, Card, Div, Heading, Row, Section, Span, Stack, Text, TextLink } from "../../../ui/index.js";
|
|
3
3
|
import { ROUTES } from "../../../constants/index.js";
|
|
4
4
|
export function AboutView({ labels = {}, howItems = [], valueItems = [], milestones = [], teamMembers = [], ctaBannerClass = "", renderCtaButtons, }) {
|
|
5
|
-
return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "y-4xl", children: _jsxs(Div, { paddingX: "x-page", className: "max-w-4xl mx-auto text-center", children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-6", mdSize: "5xl", size: "4xl", weight: "bold", children: labels.title }), _jsx(Text, { color: "inverse-muted", variant: "none", className: "max-w-2xl mx-auto", size: "xl", children: labels.subtitle })] }) }), _jsxs(
|
|
5
|
+
return (_jsxs(Div, { className: "-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10", children: [_jsx(Section, { color: "inverse", tone: "accent-banner", padding: "y-4xl", children: _jsxs(Div, { paddingX: "x-page", className: "max-w-4xl mx-auto text-center", children: [_jsx(Heading, { color: "inverse", level: 1, variant: "none", className: "mb-6", mdSize: "5xl", size: "4xl", weight: "bold", children: labels.title }), _jsx(Text, { color: "inverse-muted", variant: "none", className: "max-w-2xl mx-auto", size: "xl", children: labels.subtitle })] }) }), _jsxs(Stack, { gap: "section", paddingX: "x-page", className: "max-w-5xl mx-auto", padding: "y-4xl", children: [_jsxs(Section, { className: "text-center max-w-3xl mx-auto", children: [_jsx(Heading, { level: 2, className: "mb-4", children: labels.missionTitle }), _jsx(Text, { size: "lg", variant: "secondary", className: "leading-relaxed", children: labels.missionText })] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-12", align: "center", children: labels.howItWorksTitle }), _jsx(Div, { className: "grid md:grid-cols-3", gap: "6", children: howItems.map(({ title, text, icon, tone }) => (_jsxs(Card, { variant: `gradient-${tone ?? "indigo"}`, padding: "md", spacing: "sm", children: [_jsx(Div, { children: _jsx(Span, { size: "4xl", children: icon }) }), _jsx(Heading, { level: 3, color: "inverse", variant: "none", children: title }), _jsx(Text, { size: "sm", color: "inverse-muted", variant: "none", className: "leading-relaxed", children: text })] }, title))) })] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: labels.valuesSubtitle ? "mb-3" : "mb-12", align: "center", children: labels.valuesTitle }), labels.valuesSubtitle && (_jsx(Text, { size: "base", variant: "secondary", align: "center", className: "mb-12 max-w-2xl mx-auto leading-relaxed", children: labels.valuesSubtitle })), _jsx(Div, { className: "grid md:grid-cols-3", gap: "5", children: valueItems.map(({ title, text, icon, detail }) => (_jsxs(Stack, { gap: "3", surface: "default", padding: "lg", rounded: "xl", border: "default", children: [_jsx(Div, { children: _jsx(Span, { size: "3xl", children: icon }) }), _jsx(Heading, { level: 3, children: title }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: text }), detail && (_jsx(Text, { size: "sm", color: "muted", className: "leading-relaxed", children: detail }))] }, title))) }), labels.valuesLinkLabel && (_jsx(Div, { className: "mt-8 text-center", children: _jsx(TextLink, { href: String(ROUTES.PUBLIC.ETHICS), size: "sm", children: labels.valuesLinkLabel }) }))] }), _jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-10", align: "center", children: labels.milestonesTitle }), _jsx(Stack, { className: "relative border-l-2 border-primary/30 max-w-2xl mx-auto pl-[2rem]", gap: "xl", children: milestones.map(({ year, text }) => (_jsxs(Div, { className: "relative", children: [_jsx(Div, { className: "absolute -left-10 top-1 w-4 h-4 bg-primary border-2 border-white", rounded: "full" }), _jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: year }), _jsx(Text, { className: "mt-1", children: text })] }, year))) })] }), teamMembers.length > 0 && (_jsxs(Section, { children: [_jsx(Heading, { level: 2, className: "mb-2", align: "center", children: labels.teamTitle }), labels.teamSubtitle && (_jsx(Text, { size: "lg", variant: "secondary", align: "center", className: "mb-12 max-w-2xl mx-auto", children: labels.teamSubtitle })), _jsx(Div, { className: "grid md:grid-cols-3", gap: "6", children: teamMembers.map((member) => (_jsxs(Stack, { gap: "3", surface: "default", padding: "lg", rounded: "xl", border: "default", align: "center", className: "text-center", children: [_jsx(Avatar, { src: member.photoUrl, name: member.name, alt: member.name, size: "lg" }), _jsx(Heading, { level: 3, children: member.name }), _jsxs(Row, { gap: "xs", wrap: true, justify: "center", children: [_jsx(Span, { size: "xs", weight: "bold", className: "text-primary tracking-wide", transform: "uppercase", children: member.role }), member.isFounder && _jsx(Badge, { variant: "primary", size: "xs", children: "Founder" }), member.isDeveloper && _jsx(Badge, { variant: "secondary", size: "xs", children: "Developer" })] }), _jsx(Text, { size: "sm", variant: "secondary", className: "leading-relaxed", children: member.bio }), member.githubUrl && (_jsx(Anchor, { href: member.githubUrl, tone: "muted", size: "sm", underline: "hover", children: "GitHub \u2197" }))] }, member.name))) })] })), _jsxs(Section, { color: "inverse", tone: "accent-banner", className: `text-center ${ctaBannerClass}`, padding: "xl", rounded: "2xl", children: [_jsx(Heading, { color: "inverse", level: 2, variant: "none", className: "mb-8", size: "3xl", weight: "bold", children: labels.ctaTitle }), renderCtaButtons ? (renderCtaButtons()) : (_jsx(Row, { justify: "center", gap: "3", wrap: true, children: _jsxs(Span, { color: "inverse-muted", size: "sm", children: [labels.ctaSell, " \u00B7 ", labels.ctaShop] }) }))] })] })] }));
|
|
6
6
|
}
|
|
@@ -2,6 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { Gavel, TrendingUp, Trophy, AlertTriangle, Package, XCircle, ShieldCheck } from "lucide-react";
|
|
3
3
|
import { Alert, Div, Heading, Li, Row, Section, Span, Stack, Text, Ul } from "../../../ui/index.js";
|
|
4
4
|
import { GC } from "../../_guide-cls.js";
|
|
5
|
+
import { resolvePublishedValues } from "../../../_internal/shared/content/published-values.js";
|
|
6
|
+
/* Phase 9 — one definition of the refund timeline. See the 🛑 at the call site. */
|
|
7
|
+
const { refundBusinessDaysMin: REFUND_DAYS_MIN, refundBusinessDaysMax: REFUND_DAYS_MAX } = resolvePublishedValues();
|
|
5
8
|
const SECTIONS = [
|
|
6
9
|
{
|
|
7
10
|
Icon: Gavel, title: "How Auctions Work",
|
|
@@ -25,7 +28,7 @@ const SECTIONS = [
|
|
|
25
28
|
},
|
|
26
29
|
{
|
|
27
30
|
Icon: XCircle, iconCls: "w-5 h-5 text-rose-500", title: "Pre-order Cancellations",
|
|
28
|
-
content: (_jsxs(_Fragment, { children: [_jsxs(Text, { className: `${GC.textMuted} mb-3`, children: ["To cancel a pre-order before the item is shipped, open a support ticket with category ", _jsx(Span, { weight: "bold", children: "Billing & Payment" }), " or ", _jsx(Span, { weight: "bold", children: "Order Issue" }), " and reference your order ID."] }),
|
|
31
|
+
content: (_jsxs(_Fragment, { children: [_jsxs(Text, { className: `${GC.textMuted} mb-3`, children: ["To cancel a pre-order before the item is shipped, open a support ticket with category ", _jsx(Span, { weight: "bold", children: "Billing & Payment" }), " or ", _jsx(Span, { weight: "bold", children: "Order Issue" }), " and reference your order ID."] }), _jsxs(Text, { className: GC.textMuted, children: ["After cancellation is accepted, refunds follow the standard timeline:", " ", REFUND_DAYS_MIN, "\u2013", REFUND_DAYS_MAX, " business days to your original payment method."] })] })),
|
|
29
32
|
},
|
|
30
33
|
{
|
|
31
34
|
Icon: ShieldCheck, iconCls: "w-5 h-5 text-emerald-500", title: "Bidding Safety Tips",
|
|
@@ -9,6 +9,7 @@ import { PaginatedSelect } from "../../../ui/components/PaginatedSelect.js";
|
|
|
9
9
|
import { DataListingView } from "../../admin/components/DataListingView.js";
|
|
10
10
|
import { OrderCard } from "../../orders/components/OrdersList.js";
|
|
11
11
|
import { useOrderScope } from "../../orders/components/OrderScopeTabs.js";
|
|
12
|
+
import { ORDER_LANE_TABS } from "../../orders/constants/order-lane-tabs.js";
|
|
12
13
|
import { useSearchParams } from "next/navigation.js";
|
|
13
14
|
const CANCELLABLE_STATUSES = new Set(["pending", "confirmed", "processing"]);
|
|
14
15
|
/*
|
|
@@ -34,40 +35,20 @@ const SORT_OPTIONS = [
|
|
|
34
35
|
{ value: sortBy("totalPrice", "DESC"), label: "Highest total" },
|
|
35
36
|
{ value: sortBy("totalPrice", "ASC"), label: "Lowest total" },
|
|
36
37
|
];
|
|
37
|
-
|
|
38
|
-
* Lane tabs
|
|
39
|
-
*
|
|
40
|
-
* `OrderDocument.orderType` value (or "" for All): a tab id that doesn't
|
|
41
|
-
* match a real stored value returns zero rows forever with no error anywhere
|
|
42
|
-
* (CLAUDE.md Root Cause #33).
|
|
38
|
+
/*
|
|
39
|
+
* Lane tabs now come from `features/orders/constants/order-lane-tabs`, shared
|
|
40
|
+
* with the seller's order list.
|
|
43
41
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
42
|
+
* They were defined here as a local array literal, which meant the seller's
|
|
43
|
+
* list could not have them without a tenth hand-written copy of one union
|
|
44
|
+
* (Root Cause #61). The shared version derives from a
|
|
45
|
+
* `Record<OrderType, string>`, so a sixth lane is a compile error rather than
|
|
46
|
+
* a tab that silently never appears — which is the bug this array already had
|
|
47
|
+
* once, shipping four tabs for five lanes.
|
|
48
|
+
*
|
|
49
|
+
* Every id-correctness note that lived here (byte-exact stored values, the
|
|
50
|
+
* unhyphenated `preorder`, and the in-memory `standard` filter) moved with it.
|
|
47
51
|
*/
|
|
48
|
-
const ORDER_LANE_TABS = [
|
|
49
|
-
{ id: "", label: "All" },
|
|
50
|
-
{ id: "standard", label: "Normal" },
|
|
51
|
-
{ id: "auction", label: "Auction wins" },
|
|
52
|
-
{ id: "offer", label: "Offer wins" },
|
|
53
|
-
/*
|
|
54
|
-
* 🛑 `"preorder"` WITHOUT A HYPHEN, and this is not a typo to tidy up.
|
|
55
|
-
*
|
|
56
|
-
* `OrderType` (`orders/utils/order-splitter.ts`) spells it `"preorder"`,
|
|
57
|
-
* while `ListingType` spells the same concept `"pre-order"` WITH a hyphen.
|
|
58
|
-
* Two unions, two spellings, and the tab must match the one actually stored
|
|
59
|
-
* on `OrderDocument.orderType` — a tab id matching no stored value returns
|
|
60
|
-
* zero rows forever with no error anywhere (Root Cause #33), which is
|
|
61
|
-
* exactly the failure this file's own comment above warns about.
|
|
62
|
-
*
|
|
63
|
-
* These two lanes existed in the union and had no tab, so pre-order and
|
|
64
|
-
* prize-draw orders were reachable only by landing on "All" and scrolling.
|
|
65
|
-
* Five lanes, four tabs — the eighth instance this session of a
|
|
66
|
-
* hand-written enumeration drifting from the union it filters.
|
|
67
|
-
*/
|
|
68
|
-
{ id: "preorder", label: "Pre-orders" },
|
|
69
|
-
{ id: "prize-draw", label: "Prize draws" },
|
|
70
|
-
];
|
|
71
52
|
/**
|
|
72
53
|
* Payment-method tabs — a THIRD axis, independent of the lane tabs above and
|
|
73
54
|
* the lifecycle scope beside them.
|
|
@@ -83,9 +64,25 @@ const ORDER_LANE_TABS = [
|
|
|
83
64
|
* clause is silently dropped and the chip returns the ENTIRE order list while
|
|
84
65
|
* looking like a filter (Root Cause #62).
|
|
85
66
|
*/
|
|
67
|
+
/*
|
|
68
|
+
* 🛑 MEASURED 2026-10-22 — this chip group was INERT, and the comment above it
|
|
69
|
+
* explained why it should not have been while describing the wrong half.
|
|
70
|
+
*
|
|
71
|
+
* `buildFilters` emits `paymentMethod==emi` inside `filters`, and
|
|
72
|
+
* `/api/user/orders` regex-extracts only `status==` and `orderType==` from
|
|
73
|
+
* that string. Every other clause is silently dropped — so all three chips
|
|
74
|
+
* returned the buyer's ENTIRE order list while looking exactly like a working
|
|
75
|
+
* filter. The note above was careful about the SIEVE allowlist (Root Cause
|
|
76
|
+
* #62) and the route's own parser was the break, one layer earlier.
|
|
77
|
+
*
|
|
78
|
+
* 🛑 And "EMI plans" could not be a `paymentMethod` value any more regardless:
|
|
79
|
+
* since 0f an instalment order's tender is `online` / `upi_manual` / `cash`,
|
|
80
|
+
* so the id is now `emiEnabled`, refined in memory by the route alongside the
|
|
81
|
+
* other two. `cod` and `online` stay real stored `paymentMethod` values.
|
|
82
|
+
*/
|
|
86
83
|
const PAYMENT_METHOD_TABS = [
|
|
87
84
|
{ id: "", label: "Any" },
|
|
88
|
-
{ id: "
|
|
85
|
+
{ id: "emiEnabled", label: "EMI plans" },
|
|
89
86
|
{ id: "cod", label: "Cash on delivery" },
|
|
90
87
|
{ id: "online", label: "Paid online" },
|
|
91
88
|
];
|
|
@@ -153,7 +150,17 @@ export function UserOrdersView({ onOrderClick }) {
|
|
|
153
150
|
buildFilters: (state) => [
|
|
154
151
|
state.status ? sieveFilter("status", SIEVE_OP.EQ, state.status) : null,
|
|
155
152
|
state.orderType ? sieveFilter("orderType", SIEVE_OP.EQ, state.orderType) : null,
|
|
156
|
-
|
|
153
|
+
/*
|
|
154
|
+
* 🛑 `emiEnabled` is NOT a `paymentMethod`, so it gets its own clause
|
|
155
|
+
* key — the route refines both in memory (see its note), and emitting
|
|
156
|
+
* `paymentMethod==emiEnabled` would be a filter for a value no order
|
|
157
|
+
* can hold.
|
|
158
|
+
*/
|
|
159
|
+
state.paymentMethod
|
|
160
|
+
? state.paymentMethod === "emiEnabled"
|
|
161
|
+
? sieveFilter("emiEnabled", SIEVE_OP.EQ, "true")
|
|
162
|
+
: sieveFilter("paymentMethod", SIEVE_OP.EQ, state.paymentMethod)
|
|
163
|
+
: null,
|
|
157
164
|
]
|
|
158
165
|
.filter(Boolean)
|
|
159
166
|
.join(",") || undefined,
|
|
@@ -162,7 +169,12 @@ export function UserOrdersView({ onOrderClick }) {
|
|
|
162
169
|
// in flight" without those two questions fighting over one control.
|
|
163
170
|
buildExtraParams: () => orderScope.extraParams,
|
|
164
171
|
renderAboveContent: orderScope.renderAboveContent,
|
|
165
|
-
renderFilterPanel: ({ pendingFilters, setPendingFilters }) => (_jsxs(Stack, { gap: "md", children: [_jsx(FilterChipGroup, { label: "Type",
|
|
172
|
+
renderFilterPanel: ({ pendingFilters, setPendingFilters }) => (_jsxs(Stack, { gap: "md", children: [_jsx(FilterChipGroup, { label: "Type",
|
|
173
|
+
// No cast: `FilterChipGroup.tabs` is `readonly FilterChipGroupTab[]`,
|
|
174
|
+
// which the shared constant already satisfies. The `as unknown as`
|
|
175
|
+
// here was working around the local `as const` literal, not a real
|
|
176
|
+
// mismatch.
|
|
177
|
+
tabs: ORDER_LANE_TABS, value: pendingFilters.orderType ?? "", onChange: (id) => setPendingFilters((prev) => ({ ...prev, orderType: id })) }), _jsx(FilterChipGroup, { label: "Payment", tabs: PAYMENT_METHOD_TABS, value: pendingFilters.paymentMethod ?? "", onChange: (id) => setPendingFilters((prev) => ({ ...prev, paymentMethod: id })) }), _jsx(Div, { children: _jsx(PaginatedSelect, { value: pendingFilters.status || null, onChange: (v) => setPendingFilters((p) => ({ ...p, status: v ?? "" })), options: STATUS_OPTIONS, placeholder: "All statuses", ariaLabel: "Filter by order status" }) })] })),
|
|
166
178
|
renderCards: (rows, _view, _selection, isLoading) => {
|
|
167
179
|
if (isLoading) {
|
|
168
180
|
return (_jsx(Stack, { gap: "md", children: Array.from({ length: 3 }).map((_, i) => (_jsx(Div, { className: "h-24 animate-pulse border border-[var(--appkit-color-border)]", rounded: "xl" }, i))) }));
|
|
@@ -22,11 +22,28 @@ const __P = {
|
|
|
22
22
|
const __O = {
|
|
23
23
|
yAuto: "overflow-y-auto",
|
|
24
24
|
};
|
|
25
|
+
/*
|
|
26
|
+
* 🛑 Not derived from `COUPON_TYPE_LABELS` on purpose, and the reason is the
|
|
27
|
+
* opposite of what the duplication framework usually says.
|
|
28
|
+
*
|
|
29
|
+
* `points_earn` is OFFERED here, so an admin can create a points offer — but
|
|
30
|
+
* the editor's discount fields (`discount.value`, `maxDiscount`,
|
|
31
|
+
* `minPurchase`) are meaningless for it, and it carries `pointsPercent`
|
|
32
|
+
* instead. Deriving the list would silently add the option the moment the
|
|
33
|
+
* union grew, which is how `AdminEventsView` ended up offering `contest`,
|
|
34
|
+
* `giveaway` and `flash-sale` — three values `EventType` never had, each
|
|
35
|
+
* matching zero rows forever (Root Cause #72).
|
|
36
|
+
*
|
|
37
|
+
* So the list is explicit and the entry is deliberate.
|
|
38
|
+
* `audit-filter-tab-enums` covers the chip row, which is the surface where
|
|
39
|
+
* coverage actually matters.
|
|
40
|
+
*/
|
|
25
41
|
const TYPE_OPTIONS = [
|
|
26
42
|
{ label: "Percentage Discount", value: "percentage" },
|
|
27
43
|
{ label: "Fixed Amount Discount", value: "fixed" },
|
|
28
44
|
{ label: "Free Shipping", value: "free_shipping" },
|
|
29
45
|
{ label: "Buy X Get Y", value: "buy_x_get_y" },
|
|
46
|
+
{ label: "Points Back (awards points, no discount)", value: "points_earn" },
|
|
30
47
|
];
|
|
31
48
|
// --- Helpers -----------------------------------------------------------------
|
|
32
49
|
function toCouponCode(str) {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type IntegrationPatch } from "../../../_internal/shared/features/admin/integrations";
|
|
3
|
+
import type { SiteSettingsDocument } from "../schemas/firestore";
|
|
4
|
+
/**
|
|
5
|
+
* Admin → Site → Integrations. The four switches that decide whether we take
|
|
6
|
+
* money online, send customer email, book couriers, and offer buyers a support
|
|
7
|
+
* surface.
|
|
8
|
+
*
|
|
9
|
+
* ## Why this page exists rather than a Site Settings tab
|
|
10
|
+
*
|
|
11
|
+
* A kill switch for payments has to be findable without hunting a tab strip.
|
|
12
|
+
* It is also the one surface where the four switches are visible TOGETHER,
|
|
13
|
+
* which matters because their off-states are not comparable: three of them
|
|
14
|
+
* stop something and one of them selects a working alternative.
|
|
15
|
+
*
|
|
16
|
+
* ## 🛑 The model is the authority; this file renders it
|
|
17
|
+
*
|
|
18
|
+
* Every label, summary, consequence, severity and settings path comes from
|
|
19
|
+
* `INTEGRATIONS`, and the current state comes from `readIntegrationStates` —
|
|
20
|
+
* **the same expression the route guards resolve through**. That is the whole
|
|
21
|
+
* point: `withOnlinePaymentEnabled` used to hand-write the payments half, and
|
|
22
|
+
* the first draft of the model reproduced it WRONG (it read `razorpayEnabled`
|
|
23
|
+
* alone against a guard that is an OR across both gateways), so with PhonePe
|
|
24
|
+
* on and Razorpay off a page would have reported "payments OFF" while all six
|
|
25
|
+
* `/api/payment` routes were open and taking money.
|
|
26
|
+
*
|
|
27
|
+
* So this view must never derive a state, a consequence or a field name of its
|
|
28
|
+
* own. If a row needs a new fact, it goes on the descriptor.
|
|
29
|
+
*
|
|
30
|
+
* ## 🛑 `offConsequence` IS the confirmation body
|
|
31
|
+
*
|
|
32
|
+
* The registry's `disable-integration` ActionDef deliberately ships an empty
|
|
33
|
+
* `body`, because the consequence differs per integration and copying each
|
|
34
|
+
* string into the registry would be a second place for it to drift from. The
|
|
35
|
+
* dialog is composed here, from the descriptor, at render time.
|
|
36
|
+
*/
|
|
37
|
+
export interface AdminIntegrationsViewProps {
|
|
38
|
+
/**
|
|
39
|
+
* The settings document, server-fetched.
|
|
40
|
+
*
|
|
41
|
+
* 🛑 `Partial` because this page must render against an older document that
|
|
42
|
+
* predates `support.enabled`. `readIntegrationStates` chooses a per-field
|
|
43
|
+
* default for exactly that case — and they are NOT a uniform `?? false`:
|
|
44
|
+
* email and support default ON, because a missing field must not read as
|
|
45
|
+
* "we stopped talking to customers".
|
|
46
|
+
*/
|
|
47
|
+
settings: Partial<SiteSettingsDocument> | null;
|
|
48
|
+
/**
|
|
49
|
+
* Persist a settings patch. Supplied by the consumer page so this component
|
|
50
|
+
* carries no endpoint and no fetch — `PUT /api/admin/site`, which already
|
|
51
|
+
* records one `recordAdminAction` per write.
|
|
52
|
+
*/
|
|
53
|
+
onSave: (patch: IntegrationPatch) => Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
export declare function AdminIntegrationsView({ settings, onSave }: AdminIntegrationsViewProps): React.JSX.Element;
|