@mohasinac/appkit 3.8.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/client/features/live/LiveItemDetailView.js +2 -2
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +4 -4
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +8 -8
- package/dist/_internal/client/features/lottery/LotteryAdminSlotView.d.ts +1 -1
- package/dist/_internal/client/features/lottery/LotteryAdminSlotView.js +2 -2
- package/dist/_internal/server/features/bundles/actions.js +2 -2
- package/dist/_internal/server/features/bundles/og.d.ts +1 -1
- package/dist/_internal/server/features/bundles/og.js +4 -5
- package/dist/_internal/server/features/checkout/actions.js +57 -21
- package/dist/_internal/server/features/checkout/stock-restore.d.ts +19 -0
- package/dist/_internal/server/features/checkout/stock-restore.js +80 -0
- package/dist/_internal/server/features/checkout/upi-resolution.d.ts +11 -0
- package/dist/_internal/server/features/checkout/upi-resolution.js +28 -0
- package/dist/_internal/server/features/classified/og.js +1 -1
- package/dist/_internal/server/features/digital-code/og.js +1 -1
- package/dist/_internal/server/features/item-requests/og.d.ts +2 -2
- package/dist/_internal/server/features/item-requests/og.js +4 -5
- package/dist/_internal/server/features/live/og.js +1 -1
- package/dist/_internal/server/features/lottery/adapters.d.ts +2 -2
- package/dist/_internal/server/features/lottery/adapters.js +1 -1
- package/dist/_internal/server/features/orders/actions.d.ts +28 -0
- package/dist/_internal/server/features/orders/actions.js +239 -4
- package/dist/_internal/server/features/orders/adapters.js +3 -0
- package/dist/_internal/server/features/payments/data.js +3 -2
- package/dist/_internal/server/features/payouts/actions.d.ts +2 -2
- package/dist/_internal/server/features/payouts/actions.js +4 -3
- package/dist/_internal/server/features/pre-orders/service.d.ts +1 -1
- package/dist/_internal/server/features/pre-orders/service.js +3 -2
- package/dist/_internal/server/features/prize-draws/og.js +5 -5
- package/dist/_internal/server/features/products/og.js +1 -1
- package/dist/_internal/server/features/promotions/service.js +3 -1
- package/dist/_internal/server/features/refunds/actions.d.ts +2 -2
- package/dist/_internal/server/features/refunds/actions.js +7 -6
- package/dist/_internal/server/functions/firestore.js +1 -1
- package/dist/_internal/server/functions/scheduled.d.ts +4 -1
- package/dist/_internal/server/functions/scheduled.js +26 -2
- package/dist/_internal/server/jobs/core/emiInstallmentReminder.js +1 -1
- package/dist/_internal/server/jobs/core/hardBanCascade.d.ts +4 -0
- package/dist/_internal/server/jobs/core/hardBanCascade.js +15 -4
- package/dist/_internal/server/jobs/core/hardBanReinstatement.d.ts +16 -0
- package/dist/_internal/server/jobs/core/hardBanReinstatement.js +63 -0
- package/dist/_internal/server/jobs/core/jobRunners.js +3 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +1 -1
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +10 -0
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +60 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.d.ts +15 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +59 -0
- package/dist/_internal/server/jobs/core/pendingOrderTimeout.d.ts +7 -0
- package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +32 -6
- package/dist/_internal/server/jobs/handlers/hardBanReinstatement.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/hardBanReinstatement.js +2 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +3 -0
- package/dist/_internal/server/jobs/handlers/index.js +3 -0
- package/dist/_internal/server/jobs/handlers/messages.d.ts +4 -0
- package/dist/_internal/server/jobs/handlers/messages.js +4 -0
- package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.d.ts +3 -3
- package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +12 -12
- package/dist/_internal/server/jobs/handlers/onShipmentItemWrite.d.ts +1 -1
- package/dist/_internal/server/jobs/handlers/onShipmentItemWrite.js +5 -5
- package/dist/_internal/server/jobs/handlers/paymentReviewAutoApprove.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/paymentReviewAutoApprove.js +2 -0
- package/dist/_internal/server/jobs/handlers/paymentWindowTimeout.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/paymentWindowTimeout.js +2 -0
- package/dist/_internal/shared/actions/action-registry.js +27 -0
- package/dist/_internal/shared/checkout/order-math.js +3 -2
- package/dist/_internal/shared/checkout/rules/_defaults.js +1 -0
- package/dist/_internal/shared/checkout/rules/preorder.rule.js +7 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +7 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +11 -0
- package/dist/_internal/shared/features/auctions/errors.js +1 -1
- package/dist/_internal/shared/features/categories/bundle-copy.d.ts +0 -1
- package/dist/_internal/shared/features/categories/bundle-copy.js +0 -1
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +6 -6
- package/dist/_internal/shared/features/categories/bundle-schemas.js +2 -2
- package/dist/_internal/shared/features/checkout/config.d.ts +3 -3
- package/dist/_internal/shared/features/checkout/config.js +3 -3
- package/dist/_internal/shared/features/emi/schedule.d.ts +6 -6
- package/dist/_internal/shared/features/emi/schedule.js +10 -9
- package/dist/_internal/shared/features/promotions/errors.js +1 -1
- package/dist/_internal/shared/fees/calculator.d.ts +5 -5
- package/dist/_internal/shared/fees/calculator.js +19 -19
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/constants/api-endpoints.d.ts +9 -0
- package/dist/constants/api-endpoints.js +3 -0
- package/dist/constants/field-names.d.ts +4 -0
- package/dist/constants/field-names.js +4 -0
- package/dist/features/admin/components/AdminArtView.js +2 -2
- package/dist/features/admin/components/AdminBidsView.js +2 -2
- package/dist/features/admin/components/AdminBundleEditorView.d.ts +1 -1
- package/dist/features/admin/components/AdminBundleEditorView.js +8 -8
- package/dist/features/admin/components/AdminBundlesView.js +6 -6
- package/dist/features/admin/components/AdminClassifiedView.js +2 -2
- package/dist/features/admin/components/AdminDigitalCodesView.js +2 -2
- package/dist/features/admin/components/AdminLiveView.js +2 -2
- package/dist/features/admin/components/AdminOrderEditorView.d.ts +6 -1
- package/dist/features/admin/components/AdminOrderEditorView.js +45 -5
- package/dist/features/admin/components/AdminOrdersView.js +8 -3
- package/dist/features/admin/components/AdminPayoutsView.js +2 -2
- package/dist/features/admin/components/AdminPrizeDrawsView.js +2 -2
- package/dist/features/admin/components/AdminReturnRequestsView.js +2 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +11 -11
- package/dist/features/admin/components/AdminStickersView.js +2 -2
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
- package/dist/features/admin/hooks/useAdminListingData.d.ts +1 -1
- package/dist/features/admin/hooks/useAdminListingData.js +3 -2
- package/dist/features/admin/schemas/firestore.d.ts +9 -7
- package/dist/features/admin/schemas/firestore.js +4 -3
- package/dist/features/auctions/components/AuctionBidsTable.js +3 -3
- package/dist/features/auth/checkout-value-otp.d.ts +46 -0
- package/dist/features/auth/checkout-value-otp.js +73 -0
- package/dist/features/auth/repository/user.repository.d.ts +6 -0
- package/dist/features/auth/repository/user.repository.js +19 -0
- package/dist/features/auth/schemas/firestore.d.ts +10 -0
- package/dist/features/auth/schemas/firestore.js +2 -0
- package/dist/features/cart/actions/cart-actions.d.ts +1 -1
- package/dist/features/cart/actions/cart-actions.js +4 -4
- package/dist/features/cart/components/CartView.d.ts +2 -2
- package/dist/features/cart/components/ShippingPicker.d.ts +4 -4
- package/dist/features/cart/components/ShippingPicker.js +11 -11
- package/dist/features/cart/repository/cart.repository.d.ts +1 -1
- package/dist/features/cart/repository/cart.repository.js +2 -2
- package/dist/features/cart/schemas/firestore.d.ts +2 -2
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +3 -3
- package/dist/features/catalogue/components/PublicCatalogueView.js +2 -2
- package/dist/features/catalogue/schemas/validation.js +1 -1
- package/dist/features/categories/components/BundleCollage.js +2 -2
- package/dist/features/categories/components/BundleDetailView.js +2 -2
- package/dist/features/categories/components/BundleItemsPicker.d.ts +1 -1
- package/dist/features/categories/components/BundleItemsPicker.js +2 -2
- package/dist/features/categories/components/CategoryBundlesListing.js +2 -2
- package/dist/features/categories/schemas/firestore.d.ts +1 -1
- package/dist/features/categories/schemas/index.d.ts +3 -3
- package/dist/features/categories/schemas/index.js +2 -2
- package/dist/features/checkout/actions/checkout-value-otp-actions.d.ts +16 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +83 -0
- package/dist/features/checkout/actions/index.d.ts +1 -0
- package/dist/features/checkout/actions/index.js +1 -0
- package/dist/features/checkout/schemas/firestore.d.ts +1 -1
- package/dist/features/classified/components/index.d.ts +0 -4
- package/dist/features/classified/components/index.js +0 -2
- package/dist/features/digital-codes/components/index.d.ts +0 -4
- package/dist/features/digital-codes/components/index.js +0 -2
- package/dist/features/events/schemas/index.d.ts +1 -1
- package/dist/features/events/schemas/index.js +1 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +2 -2
- package/dist/features/live/components/index.d.ts +0 -4
- package/dist/features/live/components/index.js +0 -2
- package/dist/features/lottery/types/index.d.ts +3 -3
- package/dist/features/lottery/types/index.js +5 -5
- package/dist/features/orders/components/OrderPaymentSummary.js +2 -2
- package/dist/features/orders/components/OrderSiblingPayments.js +1 -1
- package/dist/features/orders/components/RefundHistoryTable.js +1 -1
- package/dist/features/orders/components/RefundRequestView.js +1 -1
- package/dist/features/orders/constants/payment-window.d.ts +10 -0
- package/dist/features/orders/constants/payment-window.js +10 -0
- package/dist/features/orders/repository/orders.repository.d.ts +25 -0
- package/dist/features/orders/repository/orders.repository.js +50 -1
- package/dist/features/orders/schemas/firestore.d.ts +50 -2
- package/dist/features/orders/schemas/index.d.ts +24 -24
- package/dist/features/orders/schemas/index.js +20 -20
- package/dist/features/orders/types/index.d.ts +4 -0
- package/dist/features/orders/utils/bundle-grouping.d.ts +1 -1
- package/dist/features/orders/utils/bundle-grouping.js +1 -1
- package/dist/features/payments/schemas/index.d.ts +10 -10
- package/dist/features/payments/schemas/index.js +9 -9
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +2 -2
- package/dist/features/products/components/ArtStickersListView.d.ts +7 -0
- package/dist/features/products/components/ArtStickersListView.js +57 -0
- package/dist/features/products/components/GroupSettingsPanel.js +1 -1
- package/dist/features/products/components/MakeOfferButton.js +3 -3
- package/dist/features/products/components/MarketplaceBundleCard.d.ts +1 -1
- package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
- package/dist/features/products/components/PrizeDrawCollage.js +2 -2
- package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
- package/dist/features/products/components/PrizeRevealModal.js +1 -1
- package/dist/features/products/components/ProductDetailPageView.js +2 -9
- package/dist/features/products/components/ProductForm.js +2 -2
- package/dist/features/products/components/ProductGrid.js +2 -2
- package/dist/features/products/components/ProductsIndexListing.d.ts +13 -1
- package/dist/features/products/components/ProductsIndexListing.js +7 -5
- package/dist/features/products/components/ProductsIndexPageView.js +6 -1
- package/dist/features/products/constants/listing-tabs.d.ts +42 -17
- package/dist/features/products/constants/listing-tabs.js +25 -6
- package/dist/features/products/schemas/catalog-product.d.ts +5 -5
- package/dist/features/products/schemas/catalog-product.js +1 -1
- package/dist/features/products/schemas/firestore.d.ts +5 -5
- package/dist/features/products/schemas/firestore.js +2 -2
- package/dist/features/products/types/index.d.ts +5 -2
- package/dist/features/promotions/components/CouponCard.js +2 -2
- package/dist/features/promotions/schemas/firestore.d.ts +2 -0
- package/dist/features/promotions/schemas/firestore.js +1 -0
- package/dist/features/promotions/schemas/index.d.ts +14 -14
- package/dist/features/promotions/schemas/index.js +6 -6
- package/dist/features/scams/components/ScamProfileView.js +3 -7
- package/dist/features/scams/components/ScamRegistryView.js +2 -6
- package/dist/features/scams/schemas/firestore.d.ts +1 -1
- package/dist/features/search/components/Search.d.ts +1 -1
- package/dist/features/seller/actions/offer-actions.js +1 -1
- package/dist/features/seller/components/PrintCenterView.js +2 -2
- package/dist/features/seller/components/QuickProductForm.js +5 -5
- package/dist/features/seller/components/SellerArtView.js +2 -2
- package/dist/features/seller/components/SellerAuctionsView.js +2 -2
- package/dist/features/seller/components/SellerBidsView.js +2 -2
- package/dist/features/seller/components/SellerBundlesView.js +6 -6
- package/dist/features/seller/components/SellerClassifiedView.js +2 -2
- package/dist/features/seller/components/SellerDigitalCodesView.js +2 -2
- package/dist/features/seller/components/SellerLiveView.js +2 -2
- package/dist/features/seller/components/SellerOffersView.js +2 -2
- package/dist/features/seller/components/SellerOrdersView.js +3 -3
- package/dist/features/seller/components/SellerPayoutRequestView.js +2 -2
- package/dist/features/seller/components/SellerPayoutSettingsView.js +2 -2
- package/dist/features/seller/components/SellerPayoutsView.js +2 -2
- package/dist/features/seller/components/SellerPreOrdersView.js +2 -2
- package/dist/features/seller/components/SellerPrizeDrawsView.js +2 -2
- package/dist/features/seller/components/SellerProductShell.js +8 -8
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +6 -6
- package/dist/features/seller/components/SellerStickersView.js +2 -2
- package/dist/features/seller/hooks/useSellerListingData.d.ts +1 -1
- package/dist/features/seller/hooks/useSellerListingData.js +3 -2
- package/dist/features/shipments/components/AdminShipmentEditorView.js +10 -10
- package/dist/features/shipments/components/AdminShipmentLotItemsView.js +4 -4
- package/dist/features/shipments/components/AdminShipmentProjectionsView.js +5 -5
- package/dist/features/shipments/components/AdminShipmentsView.js +4 -4
- package/dist/features/shipments/repository/shipment-lots.repository.d.ts +2 -2
- package/dist/features/shipments/repository/shipment-lots.repository.js +8 -8
- package/dist/features/shipments/schemas/firestore.d.ts +21 -21
- package/dist/features/shipments/schemas/firestore.js +9 -9
- package/dist/features/shipments/schemas/validation.d.ts +30 -30
- package/dist/features/shipments/schemas/validation.js +6 -6
- package/dist/features/shipments/utils/cost-allocation.d.ts +5 -5
- package/dist/features/shipments/utils/cost-allocation.js +39 -38
- package/dist/features/store-extensions/schemas/firestore.d.ts +5 -5
- package/dist/features/stores/components/StoreDetailLayoutView.js +9 -13
- package/dist/features/stores/schemas/firestore.d.ts +7 -7
- package/dist/features/stores/schemas/index.d.ts +84 -84
- package/dist/features/stores/schemas/index.js +5 -5
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +1 -1
- package/dist/features/tester/seed-data/products-tester-seed-data.js +6 -6
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +9 -2
- package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +8 -1
- package/dist/features/whatsapp-bot/helpers/whatsapp.js +13 -2
- package/dist/features/whatsapp-bot/types/index.d.ts +9 -1
- package/dist/index.d.ts +4 -7
- package/dist/index.js +9 -5
- package/dist/next/routing/route-map.d.ts +2 -0
- package/dist/next/routing/route-map.js +6 -0
- package/dist/schemas/firestore-helpers.d.ts +2 -2
- package/dist/schemas/firestore-helpers.js +2 -2
- package/dist/schemas/registry.d.ts +73 -73
- package/dist/security/index.d.ts +2 -1
- package/dist/security/index.js +5 -1
- package/dist/security/pii-encrypt.d.ts +2 -53
- package/dist/security/pii-encrypt.js +19 -100
- package/dist/security/pii-mask.d.ts +67 -0
- package/dist/security/pii-mask.js +100 -0
- package/dist/seed/bids-seed-data.js +6 -6
- package/dist/seed/blog-posts-seed-data.js +1 -0
- package/dist/seed/cart-seed-data.js +13 -13
- package/dist/seed/catalogue-seed-data.js +6 -6
- package/dist/seed/categories-seed-data.js +5 -5
- package/dist/seed/claimed-coupons-seed-data.js +3 -3
- package/dist/seed/coupons-seed-data.js +20 -20
- package/dist/seed/events-seed-data.js +27 -27
- package/dist/seed/factories/bid.factory.js +1 -1
- package/dist/seed/faq-seed-data.js +20 -1
- package/dist/seed/grouped-listings-seed-data.d.ts +2 -2
- package/dist/seed/grouped-listings-seed-data.js +3 -3
- package/dist/seed/offers-seed-data.js +19 -19
- package/dist/seed/orders-seed-data.js +29 -29
- package/dist/seed/payouts-seed-data.js +7 -7
- package/dist/seed/products-auctions-seed-data.js +6 -6
- package/dist/seed/products-preorders-seed-data.d.ts +2 -2
- package/dist/seed/products-preorders-seed-data.js +1 -1
- package/dist/seed/products-standard-seed-data.js +8 -8
- package/dist/seed/scammers-seed-data.js +2 -2
- package/dist/seed/shipments-seed-data.js +29 -29
- package/dist/seed/site-settings-seed-data.js +3 -2
- package/dist/seed/store-extensions-seed-data.js +8 -8
- package/dist/seed/stores-seed-data.js +37 -8
- package/dist/seed/users-seed-data.js +38 -1
- package/dist/server-entry.d.ts +1 -3
- package/dist/server-entry.js +1 -3
- package/dist/server.d.ts +2 -1
- package/dist/server.js +3 -1
- package/dist/ui/components/PriceDisplay.js +3 -12
- package/dist/utils/number.formatter.d.ts +2 -7
- package/dist/utils/number.formatter.js +3 -8
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +17 -3
- package/dist/_internal/client/scaffolds/DashboardScaffold.d.ts +0 -34
- package/dist/_internal/client/scaffolds/DashboardScaffold.js +0 -26
- package/dist/_internal/client/theme/__tests__/ThemeProvider.test.d.ts +0 -1
- package/dist/_internal/client/theme/__tests__/ThemeProvider.test.js +0 -109
- package/dist/_internal/server/features/auctions/__tests__/service.test.d.ts +0 -1
- package/dist/_internal/server/features/auctions/__tests__/service.test.js +0 -140
- package/dist/_internal/server/features/checkout/__tests__/actions.test.d.ts +0 -1
- package/dist/_internal/server/features/checkout/__tests__/actions.test.js +0 -600
- package/dist/_internal/server/features/refunds/__tests__/actions.test.d.ts +0 -1
- package/dist/_internal/server/features/refunds/__tests__/actions.test.js +0 -263
- package/dist/_internal/server/jobs/core/__tests__/auctionSettlement.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/auctionSettlement.test.js +0 -249
- package/dist/_internal/server/jobs/core/__tests__/couponExpiry.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/couponExpiry.test.js +0 -65
- package/dist/_internal/server/jobs/core/__tests__/listingProcessor.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/listingProcessor.test.js +0 -163
- package/dist/_internal/server/jobs/core/__tests__/mediaTmpCleanup.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/mediaTmpCleanup.test.js +0 -115
- package/dist/_internal/server/jobs/core/__tests__/onBidPlaced.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/onBidPlaced.test.js +0 -201
- package/dist/_internal/server/jobs/core/__tests__/onOrderCreate.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/onOrderCreate.test.js +0 -169
- package/dist/_internal/server/jobs/core/__tests__/onOrderStatusChange.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/onOrderStatusChange.test.js +0 -148
- package/dist/_internal/server/jobs/core/__tests__/onProductStockChange.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/onProductStockChange.test.js +0 -210
- package/dist/_internal/server/jobs/core/__tests__/onReviewWrite.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/onReviewWrite.test.js +0 -190
- package/dist/_internal/server/jobs/core/__tests__/onUserBanChange.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/onUserBanChange.test.js +0 -161
- package/dist/_internal/server/jobs/core/__tests__/payoutBatch.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/payoutBatch.test.js +0 -302
- package/dist/_internal/server/jobs/core/__tests__/pendingOrderTimeout.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/pendingOrderTimeout.test.js +0 -96
- package/dist/_internal/server/jobs/core/__tests__/triggerEventRaffle.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/triggerEventRaffle.test.js +0 -252
- package/dist/_internal/server/jobs/core/__tests__/wrapJobHandler.test.d.ts +0 -1
- package/dist/_internal/server/jobs/core/__tests__/wrapJobHandler.test.js +0 -129
- package/dist/_internal/server/jobs/core/onCatalogueSubmittedForApproval.d.ts +0 -15
- package/dist/_internal/server/jobs/core/onCatalogueSubmittedForApproval.js +0 -38
- package/dist/_internal/server/providers/index.d.ts +0 -11
- package/dist/_internal/server/providers/index.js +0 -11
- package/dist/_internal/server/providers/payment/razorpay-mock.d.ts +0 -52
- package/dist/_internal/server/providers/payment/razorpay-mock.js +0 -118
- package/dist/_internal/server/providers/resolve.d.ts +0 -36
- package/dist/_internal/server/providers/resolve.js +0 -31
- package/dist/_internal/server/providers/shipping/shiprocket-mock.d.ts +0 -29
- package/dist/_internal/server/providers/shipping/shiprocket-mock.js +0 -152
- package/dist/_internal/shared/types/__tests__/action-result.test.d.ts +0 -1
- package/dist/_internal/shared/types/__tests__/action-result.test.js +0 -65
- package/dist/errors/__tests__/error-mapping.test.d.ts +0 -1
- package/dist/errors/__tests__/error-mapping.test.js +0 -122
- package/dist/errors/__tests__/safe-read.test.d.ts +0 -1
- package/dist/errors/__tests__/safe-read.test.js +0 -39
- package/dist/features/addresses/repository/__tests__/addresses.repository.test.d.ts +0 -1
- package/dist/features/addresses/repository/__tests__/addresses.repository.test.js +0 -386
- package/dist/features/admin/components/AdminListingScaffold.d.ts +0 -41
- package/dist/features/admin/components/AdminListingScaffold.js +0 -68
- package/dist/features/admin/components/QuickActionsPanel.d.ts +0 -15
- package/dist/features/admin/components/QuickActionsPanel.js +0 -5
- package/dist/features/admin/repository/__tests__/notification.repository.test.d.ts +0 -1
- package/dist/features/admin/repository/__tests__/notification.repository.test.js +0 -356
- package/dist/features/admin/repository/__tests__/site-settings.repository.test.d.ts +0 -1
- package/dist/features/admin/repository/__tests__/site-settings.repository.test.js +0 -298
- package/dist/features/auctions/repository/__tests__/bid.repository.test.d.ts +0 -1
- package/dist/features/auctions/repository/__tests__/bid.repository.test.js +0 -290
- package/dist/features/auctions/repository/auctions.repository.d.ts +0 -12
- package/dist/features/auctions/repository/auctions.repository.js +0 -42
- package/dist/features/auth/repository/__tests__/session.repository.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/session.repository.test.js +0 -310
- package/dist/features/auth/repository/__tests__/session.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/session.test.js +0 -146
- package/dist/features/auth/repository/__tests__/sms-counter.repository.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/sms-counter.repository.test.js +0 -171
- package/dist/features/auth/repository/__tests__/sms-counter.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/sms-counter.test.js +0 -88
- package/dist/features/auth/repository/__tests__/token.repository.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/token.repository.test.js +0 -260
- package/dist/features/auth/repository/__tests__/token.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/token.test.js +0 -140
- package/dist/features/auth/repository/__tests__/user.repository.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/user.repository.test.js +0 -352
- package/dist/features/auth/repository/__tests__/user.test.d.ts +0 -1
- package/dist/features/auth/repository/__tests__/user.test.js +0 -226
- package/dist/features/before-after/repository/before-after.repository.d.ts +0 -13
- package/dist/features/before-after/repository/before-after.repository.js +0 -36
- package/dist/features/before-after/server.d.ts +0 -6
- package/dist/features/before-after/server.js +0 -6
- package/dist/features/cart/repository/__tests__/cart.repository.test.d.ts +0 -1
- package/dist/features/cart/repository/__tests__/cart.repository.test.js +0 -371
- package/dist/features/categories/repository/__tests__/categories.repository.test.d.ts +0 -1
- package/dist/features/categories/repository/__tests__/categories.repository.test.js +0 -813
- package/dist/features/collections/repository/collections.repository.d.ts +0 -8
- package/dist/features/collections/repository/collections.repository.js +0 -16
- package/dist/features/collections/server.d.ts +0 -6
- package/dist/features/collections/server.js +0 -6
- package/dist/features/events/repository/__tests__/event.repository.test.d.ts +0 -1
- package/dist/features/events/repository/__tests__/event.repository.test.js +0 -299
- package/dist/features/faq/repository/__tests__/faqs.repository.test.d.ts +0 -1
- package/dist/features/faq/repository/__tests__/faqs.repository.test.js +0 -311
- package/dist/features/forms/Form.d.ts +0 -25
- package/dist/features/forms/Form.js +0 -37
- package/dist/features/history/repository/__tests__/user-history.repository.test.d.ts +0 -1
- package/dist/features/history/repository/__tests__/user-history.repository.test.js +0 -180
- package/dist/features/homepage/repository/__tests__/carousel.repository.test.d.ts +0 -1
- package/dist/features/homepage/repository/__tests__/carousel.repository.test.js +0 -182
- package/dist/features/homepage/repository/__tests__/homepage-sections.repository.test.d.ts +0 -1
- package/dist/features/homepage/repository/__tests__/homepage-sections.repository.test.js +0 -185
- package/dist/features/layout/ListingLayout.d.ts +0 -34
- package/dist/features/layout/ListingLayout.js +0 -103
- package/dist/features/messages/repository/__tests__/conversations.repository.test.d.ts +0 -1
- package/dist/features/messages/repository/__tests__/conversations.repository.test.js +0 -257
- package/dist/features/orders/repository/__tests__/orders.repository.test.d.ts +0 -1
- package/dist/features/orders/repository/__tests__/orders.repository.test.js +0 -211
- package/dist/features/payments/repository/__tests__/payout.repository.test.d.ts +0 -1
- package/dist/features/payments/repository/__tests__/payout.repository.test.js +0 -292
- package/dist/features/pre-orders/repository/preorders.repository.d.ts +0 -8
- package/dist/features/pre-orders/repository/preorders.repository.js +0 -25
- package/dist/features/products/repository/__tests__/product-features.repository.test.d.ts +0 -1
- package/dist/features/products/repository/__tests__/product-features.repository.test.js +0 -329
- package/dist/features/products/repository/__tests__/products.repository.test.d.ts +0 -1
- package/dist/features/products/repository/__tests__/products.repository.test.js +0 -607
- package/dist/features/promotions/repository/__tests__/claimed-coupons.repository.test.d.ts +0 -1
- package/dist/features/promotions/repository/__tests__/claimed-coupons.repository.test.js +0 -219
- package/dist/features/promotions/repository/__tests__/coupons.repository.test.d.ts +0 -1
- package/dist/features/promotions/repository/__tests__/coupons.repository.test.js +0 -480
- package/dist/features/promotions/repository/promotions.repository.d.ts +0 -14
- package/dist/features/promotions/repository/promotions.repository.js +0 -43
- package/dist/features/reviews/repository/__tests__/reviews.repository.test.d.ts +0 -1
- package/dist/features/reviews/repository/__tests__/reviews.repository.test.js +0 -327
- package/dist/features/scams/repository/__tests__/scammer.repository.test.d.ts +0 -1
- package/dist/features/scams/repository/__tests__/scammer.repository.test.js +0 -385
- package/dist/features/search/repository/__tests__/search.repository.test.d.ts +0 -1
- package/dist/features/search/repository/__tests__/search.repository.test.js +0 -369
- package/dist/features/seller/components/SellerStatCard.d.ts +0 -14
- package/dist/features/seller/components/SellerStatCard.js +0 -6
- package/dist/features/seller/components/seller-products-styles.d.ts +0 -7
- package/dist/features/seller/components/seller-products-styles.js +0 -14
- package/dist/features/seller/repository/__tests__/offer.repository.test.d.ts +0 -1
- package/dist/features/seller/repository/__tests__/offer.repository.test.js +0 -458
- package/dist/features/seller/repository/seller.repository.d.ts +0 -22
- package/dist/features/seller/repository/seller.repository.js +0 -72
- package/dist/features/site-settings/components/__tests__/ThemeManagerView.test.d.ts +0 -1
- package/dist/features/site-settings/components/__tests__/ThemeManagerView.test.js +0 -37
- package/dist/features/stores/repository/__tests__/store.repository.test.d.ts +0 -1
- package/dist/features/stores/repository/__tests__/store.repository.test.js +0 -261
- package/dist/features/stores/repository/stores.repository.d.ts +0 -11
- package/dist/features/stores/repository/stores.repository.js +0 -37
- package/dist/features/support/repository/__tests__/support.repository.test.d.ts +0 -1
- package/dist/features/support/repository/__tests__/support.repository.test.js +0 -312
- package/dist/features/wishlist/repository/__tests__/user-wishlist.repository.test.d.ts +0 -1
- package/dist/features/wishlist/repository/__tests__/user-wishlist.repository.test.js +0 -139
- package/dist/features/wishlist/repository/wishlist.repository.d.ts +0 -13
- package/dist/features/wishlist/repository/wishlist.repository.js +0 -31
- package/dist/providers/db-firebase/__tests__/filter-aliases.test.d.ts +0 -1
- package/dist/providers/db-firebase/__tests__/filter-aliases.test.js +0 -93
- package/dist/providers/shipping-shiprocket/index.d.ts +0 -297
- package/dist/providers/shipping-shiprocket/index.js +0 -194
- package/dist/providers/shipping-shiprocket/shiprocket-provider.d.ts +0 -45
- package/dist/providers/shipping-shiprocket/shiprocket-provider.js +0 -168
- package/dist/react/contexts/ThemeContext.d.ts +0 -13
- package/dist/react/contexts/ThemeContext.js +0 -64
- package/dist/schemas/webhooks/shiprocket.d.ts +0 -30
- package/dist/schemas/webhooks/shiprocket.js +0 -22
- package/dist/seed/actions/demo-seed-actions.d.ts +0 -42
- package/dist/seed/actions/demo-seed-actions.js +0 -36
- package/dist/seed/actions/index.d.ts +0 -1
- package/dist/seed/actions/index.js +0 -1
- package/dist/seed/sub-listings-seed-data.d.ts +0 -123
- package/dist/seed/sub-listings-seed-data.js +0 -447
- package/dist/seed/tester-checklist-seed-data.d.ts +0 -2
- package/dist/seed/tester-checklist-seed-data.js +0 -248
- package/dist/ui/components/DashboardStatsCard.d.ts +0 -15
- package/dist/ui/components/DashboardStatsCard.js +0 -27
- package/dist/ui/components/DashboardStatsCard.style.css +0 -68
- package/dist/ui/components/DynamicSelect.d.ts +0 -23
- package/dist/ui/components/DynamicSelect.js +0 -77
- package/dist/ui/components/DynamicSelect.style.css +0 -101
- package/dist/ui/components/InlineCreateSelect.d.ts +0 -48
- package/dist/ui/components/InlineCreateSelect.js +0 -75
- package/dist/ui/components/ListingViewShell.d.ts +0 -37
- package/dist/ui/components/ListingViewShell.js +0 -9
- package/dist/ui/components/PaginatedMultiSelect.d.ts +0 -28
- package/dist/ui/components/PaginatedMultiSelect.js +0 -141
- package/dist/ui/components/PaginatedMultiSelect.style.css +0 -272
- package/dist/ui/components/SectionTabs.d.ts +0 -19
- package/dist/ui/components/SectionTabs.js +0 -66
- package/dist/ui/components/SectionTabs.style.css +0 -164
- package/dist/ui/components/__tests__/BulkActionBar.test.d.ts +0 -1
- package/dist/ui/components/__tests__/BulkActionBar.test.js +0 -96
- package/dist/ui/components/__tests__/ListingToolbar.test.d.ts +0 -1
- package/dist/ui/components/__tests__/ListingToolbar.test.js +0 -125
- package/dist/ui/components/__tests__/new-primitives.test.d.ts +0 -1
- package/dist/ui/components/__tests__/new-primitives.test.js +0 -187
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `resolvePaymentProvider` — decide between the real adapter and the
|
|
3
|
-
* in-process mock based on site-settings feature flags.
|
|
4
|
-
*
|
|
5
|
-
* Resolution rule (single explicit boolean, no implicit fallback):
|
|
6
|
-
*
|
|
7
|
-
* 1. Read `siteSettings.featureFlags.useMockPayment`.
|
|
8
|
-
* 2. If the flag is `true` and `process.env.NODE_ENV !== "production"` →
|
|
9
|
-
* return the mock provider.
|
|
10
|
-
* 3. If the flag is `true` and `process.env.NODE_ENV === "production"` →
|
|
11
|
-
* THROW. Production must never run with a mock flag set. Loud failure
|
|
12
|
-
* is the contract.
|
|
13
|
-
* 4. Otherwise → return the real provider supplied by the caller.
|
|
14
|
-
*
|
|
15
|
-
* The resolver is intentionally provider-agnostic (it accepts factories so
|
|
16
|
-
* the consumer's `providers.config.ts` controls instantiation), keeping this
|
|
17
|
-
* file zero-dep on the Razorpay SDK chain.
|
|
18
|
-
*
|
|
19
|
-
* Shipping has no equivalent resolver: the manual shipping provider makes no
|
|
20
|
-
* external API calls, so there is nothing to mock — `providers.config.ts`
|
|
21
|
-
* registers `ManualShippingProvider` directly.
|
|
22
|
-
*/
|
|
23
|
-
import type { IPaymentProvider } from "../../../contracts";
|
|
24
|
-
export interface ProviderResolutionContext {
|
|
25
|
-
readonly nodeEnv: string;
|
|
26
|
-
readonly siteSettings: {
|
|
27
|
-
readonly featureFlags?: {
|
|
28
|
-
readonly useMockPayment?: boolean;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export interface PaymentResolutionFactories {
|
|
33
|
-
readonly real: () => Promise<IPaymentProvider> | IPaymentProvider;
|
|
34
|
-
readonly mock: () => Promise<IPaymentProvider> | IPaymentProvider;
|
|
35
|
-
}
|
|
36
|
-
export declare function resolvePaymentProvider(ctx: ProviderResolutionContext, factories: PaymentResolutionFactories): Promise<IPaymentProvider>;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `resolvePaymentProvider` — decide between the real adapter and the
|
|
3
|
-
* in-process mock based on site-settings feature flags.
|
|
4
|
-
*
|
|
5
|
-
* Resolution rule (single explicit boolean, no implicit fallback):
|
|
6
|
-
*
|
|
7
|
-
* 1. Read `siteSettings.featureFlags.useMockPayment`.
|
|
8
|
-
* 2. If the flag is `true` and `process.env.NODE_ENV !== "production"` →
|
|
9
|
-
* return the mock provider.
|
|
10
|
-
* 3. If the flag is `true` and `process.env.NODE_ENV === "production"` →
|
|
11
|
-
* THROW. Production must never run with a mock flag set. Loud failure
|
|
12
|
-
* is the contract.
|
|
13
|
-
* 4. Otherwise → return the real provider supplied by the caller.
|
|
14
|
-
*
|
|
15
|
-
* The resolver is intentionally provider-agnostic (it accepts factories so
|
|
16
|
-
* the consumer's `providers.config.ts` controls instantiation), keeping this
|
|
17
|
-
* file zero-dep on the Razorpay SDK chain.
|
|
18
|
-
*
|
|
19
|
-
* Shipping has no equivalent resolver: the manual shipping provider makes no
|
|
20
|
-
* external API calls, so there is nothing to mock — `providers.config.ts`
|
|
21
|
-
* registers `ManualShippingProvider` directly.
|
|
22
|
-
*/
|
|
23
|
-
export async function resolvePaymentProvider(ctx, factories) {
|
|
24
|
-
const want = ctx.siteSettings.featureFlags?.useMockPayment === true;
|
|
25
|
-
if (want && ctx.nodeEnv === "production") {
|
|
26
|
-
throw new Error("[providers] siteSettings.featureFlags.useMockPayment is TRUE in production. " +
|
|
27
|
-
"The mock payment provider must never run in production. Set the flag to false " +
|
|
28
|
-
"in Admin → Site Settings, or unset NODE_ENV=production for the deploy.");
|
|
29
|
-
}
|
|
30
|
-
return want ? await factories.mock() : await factories.real();
|
|
31
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `MockShiprocketProvider` — in-process mock implementing `IShippingProvider`.
|
|
3
|
-
*
|
|
4
|
-
* Replaces the orphaned `/api/dev/mock-shiprocket/**` HTTP routes (deleted
|
|
5
|
-
* in Track H). State is per-process; status progression is deterministic so
|
|
6
|
-
* tests can assert against a known sequence.
|
|
7
|
-
*/
|
|
8
|
-
import type { CreateShipmentInput, IShippingProvider, ServiceabilityResult, Shipment, TrackingInfo } from "../../../../contracts";
|
|
9
|
-
export type ShipmentEvent = "Pickup Scheduled" | "Pickup Completed" | "In Transit" | "Out for Delivery" | "Delivered" | "Cancelled";
|
|
10
|
-
export type ShipmentEventSink = (trackingId: string, event: ShipmentEvent, shipment: Shipment) => Promise<void> | void;
|
|
11
|
-
export declare class MockShiprocketProvider implements IShippingProvider {
|
|
12
|
-
readonly name: "shiprocket-mock";
|
|
13
|
-
private readonly shipments;
|
|
14
|
-
private eventSink;
|
|
15
|
-
setEventSink(sink: ShipmentEventSink | null): void;
|
|
16
|
-
createShipment(data: CreateShipmentInput): Promise<Shipment>;
|
|
17
|
-
trackShipment(trackingId: string): Promise<TrackingInfo>;
|
|
18
|
-
cancelShipment(shipmentId: string): Promise<void>;
|
|
19
|
-
private findShipmentById;
|
|
20
|
-
private notifyCancellation;
|
|
21
|
-
checkServiceability(pincode: string, weight: number): Promise<ServiceabilityResult>;
|
|
22
|
-
generateLabel(shipmentId: string): Promise<ArrayBuffer>;
|
|
23
|
-
/**
|
|
24
|
-
* Mocks-only — advance a shipment's tracking status and fire a tracking
|
|
25
|
-
* event through the consumer-registered sink. Used by
|
|
26
|
-
* `/api/admin/dev/emit-shipping-event` to drive end-to-end test flows.
|
|
27
|
-
*/
|
|
28
|
-
emitTrackingEvent(trackingId: string, event: ShipmentEvent): Promise<void>;
|
|
29
|
-
}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `MockShiprocketProvider` — in-process mock implementing `IShippingProvider`.
|
|
3
|
-
*
|
|
4
|
-
* Replaces the orphaned `/api/dev/mock-shiprocket/**` HTTP routes (deleted
|
|
5
|
-
* in Track H). State is per-process; status progression is deterministic so
|
|
6
|
-
* tests can assert against a known sequence.
|
|
7
|
-
*/
|
|
8
|
-
import { randomBytes } from "node:crypto";
|
|
9
|
-
const PICKUP_SCHEDULED = "Pickup Scheduled";
|
|
10
|
-
const TRACKING_PROGRESSION = [
|
|
11
|
-
PICKUP_SCHEDULED,
|
|
12
|
-
"Pickup Completed",
|
|
13
|
-
"In Transit",
|
|
14
|
-
"Out for Delivery",
|
|
15
|
-
"Delivered",
|
|
16
|
-
];
|
|
17
|
-
export class MockShiprocketProvider {
|
|
18
|
-
constructor() {
|
|
19
|
-
this.name = "shiprocket-mock";
|
|
20
|
-
this.shipments = new Map();
|
|
21
|
-
this.eventSink = null;
|
|
22
|
-
}
|
|
23
|
-
setEventSink(sink) {
|
|
24
|
-
this.eventSink = sink;
|
|
25
|
-
}
|
|
26
|
-
async createShipment(data) {
|
|
27
|
-
const trackingId = `MOCK${randomBytes(5).toString("hex").toUpperCase()}`;
|
|
28
|
-
const id = `shp_mock_${randomBytes(8).toString("hex")}`;
|
|
29
|
-
const courier = "MockExpress";
|
|
30
|
-
const initialEvent = {
|
|
31
|
-
status: PICKUP_SCHEDULED,
|
|
32
|
-
location: data.pickup.city,
|
|
33
|
-
timestamp: new Date().toISOString(),
|
|
34
|
-
description: "Pickup scheduled with carrier",
|
|
35
|
-
};
|
|
36
|
-
this.shipments.set(trackingId, {
|
|
37
|
-
id,
|
|
38
|
-
trackingId,
|
|
39
|
-
orderId: data.orderId,
|
|
40
|
-
courier,
|
|
41
|
-
createdAt: initialEvent.timestamp,
|
|
42
|
-
events: [initialEvent],
|
|
43
|
-
});
|
|
44
|
-
return {
|
|
45
|
-
id,
|
|
46
|
-
trackingId,
|
|
47
|
-
orderId: data.orderId,
|
|
48
|
-
status: initialEvent.status,
|
|
49
|
-
courier,
|
|
50
|
-
createdAt: initialEvent.timestamp,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
async trackShipment(trackingId) {
|
|
54
|
-
const shipment = this.shipments.get(trackingId);
|
|
55
|
-
if (!shipment) {
|
|
56
|
-
throw Object.assign(new Error(`Mock shipment not found: ${trackingId}`), {
|
|
57
|
-
httpStatus: 404,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
trackingId,
|
|
62
|
-
currentStatus: shipment.events[shipment.events.length - 1]?.status ?? "Unknown",
|
|
63
|
-
events: [...shipment.events],
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
async cancelShipment(shipmentId) {
|
|
67
|
-
const entry = this.findShipmentById(shipmentId);
|
|
68
|
-
if (!entry) {
|
|
69
|
-
throw Object.assign(new Error(`Mock shipment not found: ${shipmentId}`), {
|
|
70
|
-
httpStatus: 404,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
const [trackingId, ship] = entry;
|
|
74
|
-
ship.events.push({
|
|
75
|
-
status: "Cancelled",
|
|
76
|
-
location: ship.events[ship.events.length - 1]?.location ?? "Origin",
|
|
77
|
-
timestamp: new Date().toISOString(),
|
|
78
|
-
description: "Mock shipment cancelled",
|
|
79
|
-
});
|
|
80
|
-
await this.notifyCancellation(trackingId, ship);
|
|
81
|
-
}
|
|
82
|
-
findShipmentById(shipmentId) {
|
|
83
|
-
for (const entry of this.shipments) {
|
|
84
|
-
if (entry[1].id === shipmentId)
|
|
85
|
-
return entry;
|
|
86
|
-
}
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
async notifyCancellation(trackingId, ship) {
|
|
90
|
-
if (!this.eventSink)
|
|
91
|
-
return;
|
|
92
|
-
await this.eventSink(trackingId, "Cancelled", {
|
|
93
|
-
id: ship.id,
|
|
94
|
-
trackingId,
|
|
95
|
-
orderId: ship.orderId,
|
|
96
|
-
status: "Cancelled",
|
|
97
|
-
courier: ship.courier,
|
|
98
|
-
createdAt: ship.createdAt,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
async checkServiceability(pincode, weight) {
|
|
102
|
-
// Mock policy: every pincode is serviceable; rate scales with weight.
|
|
103
|
-
return {
|
|
104
|
-
isServiceable: true,
|
|
105
|
-
couriers: [
|
|
106
|
-
{ name: "MockExpress", estimatedDays: 3, rate: Math.round(60 + weight * 25) },
|
|
107
|
-
{ name: "MockEconomy", estimatedDays: 5, rate: Math.round(40 + weight * 18) },
|
|
108
|
-
],
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
async generateLabel(shipmentId) {
|
|
112
|
-
void shipmentId;
|
|
113
|
-
// Mock label: a tiny PDF-like blob. Production tests never read the
|
|
114
|
-
// bytes — they assert the API contract returns an ArrayBuffer.
|
|
115
|
-
const placeholder = new TextEncoder().encode(`%PDF-MOCK\n${shipmentId}\n`);
|
|
116
|
-
return placeholder.buffer.slice(placeholder.byteOffset, placeholder.byteOffset + placeholder.byteLength);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Mocks-only — advance a shipment's tracking status and fire a tracking
|
|
120
|
-
* event through the consumer-registered sink. Used by
|
|
121
|
-
* `/api/admin/dev/emit-shipping-event` to drive end-to-end test flows.
|
|
122
|
-
*/
|
|
123
|
-
async emitTrackingEvent(trackingId, event) {
|
|
124
|
-
const shipment = this.shipments.get(trackingId);
|
|
125
|
-
if (!shipment) {
|
|
126
|
-
throw new Error(`Mock shipment not found: ${trackingId}`);
|
|
127
|
-
}
|
|
128
|
-
if (!this.eventSink) {
|
|
129
|
-
throw new Error("MockShiprocketProvider.emitTrackingEvent called with no sink registered. " +
|
|
130
|
-
"Call provider.setEventSink(handler) at startup.");
|
|
131
|
-
}
|
|
132
|
-
if (event !== "Cancelled" && !TRACKING_PROGRESSION.includes(event)) {
|
|
133
|
-
throw new Error(`Unknown tracking event: ${event}`);
|
|
134
|
-
}
|
|
135
|
-
const last = shipment.events[shipment.events.length - 1];
|
|
136
|
-
const trackingEvent = {
|
|
137
|
-
status: event,
|
|
138
|
-
location: last?.location ?? "Origin",
|
|
139
|
-
timestamp: new Date().toISOString(),
|
|
140
|
-
description: `Mock event: ${event}`,
|
|
141
|
-
};
|
|
142
|
-
shipment.events.push(trackingEvent);
|
|
143
|
-
await this.eventSink(trackingId, event, {
|
|
144
|
-
id: shipment.id,
|
|
145
|
-
trackingId,
|
|
146
|
-
orderId: shipment.orderId,
|
|
147
|
-
status: event,
|
|
148
|
-
courier: shipment.courier,
|
|
149
|
-
createdAt: shipment.createdAt,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { wrapAction, isOk, unwrap } from "../action-result";
|
|
3
|
-
import { ValidationError } from "../../../../errors/validation-error";
|
|
4
|
-
import { NotFoundError } from "../../../../errors/not-found-error";
|
|
5
|
-
describe("wrapAction", () => {
|
|
6
|
-
it("returns ok envelope on success", async () => {
|
|
7
|
-
const r = await wrapAction(async () => 42);
|
|
8
|
-
expect(r.ok).toBe(true);
|
|
9
|
-
if (r.ok)
|
|
10
|
-
expect(r.data).toBe(42);
|
|
11
|
-
});
|
|
12
|
-
it("returns error envelope on thrown ValidationError → VALIDATION_FAILED", async () => {
|
|
13
|
-
const r = await wrapAction(async () => {
|
|
14
|
-
throw new ValidationError("bad");
|
|
15
|
-
});
|
|
16
|
-
expect(r.ok).toBe(false);
|
|
17
|
-
if (!r.ok) {
|
|
18
|
-
expect(r.code).toBe("VALIDATION_FAILED");
|
|
19
|
-
expect(r.error).toBe("bad");
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
it("returns error envelope on thrown NotFoundError → NOT_FOUND", async () => {
|
|
23
|
-
const r = await wrapAction(async () => {
|
|
24
|
-
throw new NotFoundError("user-1");
|
|
25
|
-
});
|
|
26
|
-
expect(r.ok).toBe(false);
|
|
27
|
-
if (!r.ok)
|
|
28
|
-
expect(r.code).toBe("NOT_FOUND");
|
|
29
|
-
});
|
|
30
|
-
it("returns error envelope on unknown Error → INTERNAL", async () => {
|
|
31
|
-
const r = await wrapAction(async () => {
|
|
32
|
-
throw new Error("oops");
|
|
33
|
-
});
|
|
34
|
-
expect(r.ok).toBe(false);
|
|
35
|
-
if (!r.ok)
|
|
36
|
-
expect(r.code).toBe("INTERNAL");
|
|
37
|
-
});
|
|
38
|
-
it("never throws — string throws also produce an envelope", async () => {
|
|
39
|
-
const r = await wrapAction(async () => {
|
|
40
|
-
throw "raw string";
|
|
41
|
-
});
|
|
42
|
-
expect(r.ok).toBe(false);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe("isOk", () => {
|
|
46
|
-
it("narrows ok arm", async () => {
|
|
47
|
-
const r = await wrapAction(async () => "x");
|
|
48
|
-
if (isOk(r)) {
|
|
49
|
-
// type narrowed — `data` accessible
|
|
50
|
-
expect(r.data).toBe("x");
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
describe("unwrap", () => {
|
|
55
|
-
it("returns data on ok", async () => {
|
|
56
|
-
const r = await wrapAction(async () => 7);
|
|
57
|
-
expect(unwrap(r)).toBe(7);
|
|
58
|
-
});
|
|
59
|
-
it("throws on error", async () => {
|
|
60
|
-
const r = await wrapAction(async () => {
|
|
61
|
-
throw new ValidationError("bad");
|
|
62
|
-
});
|
|
63
|
-
expect(() => unwrap(r)).toThrow("bad");
|
|
64
|
-
});
|
|
65
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { mapToHttpError, HTTP_ERROR_CODES } from "../error-mapping";
|
|
3
|
-
import { ApiError } from "../api-error";
|
|
4
|
-
import { ValidationError } from "../validation-error";
|
|
5
|
-
import { AuthenticationError } from "../authentication-error";
|
|
6
|
-
import { AuthorizationError } from "../authorization-error";
|
|
7
|
-
import { NotFoundError } from "../not-found-error";
|
|
8
|
-
import { DatabaseError } from "../database-error";
|
|
9
|
-
import { RazorpayUnreachableError } from "../razorpay-unreachable";
|
|
10
|
-
describe("mapToHttpError", () => {
|
|
11
|
-
describe("AppError subclasses", () => {
|
|
12
|
-
it("maps ValidationError → 400 VALIDATION_FAILED", () => {
|
|
13
|
-
const r = mapToHttpError(new ValidationError("bad email"));
|
|
14
|
-
expect(r.status).toBe(400);
|
|
15
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.VALIDATION_FAILED);
|
|
16
|
-
expect(r.message).toBe("bad email");
|
|
17
|
-
});
|
|
18
|
-
it("maps AuthenticationError → 401 UNAUTHENTICATED", () => {
|
|
19
|
-
const r = mapToHttpError(new AuthenticationError("nope"));
|
|
20
|
-
expect(r.status).toBe(401);
|
|
21
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.UNAUTHENTICATED);
|
|
22
|
-
});
|
|
23
|
-
it("maps AuthorizationError → 403 FORBIDDEN", () => {
|
|
24
|
-
const r = mapToHttpError(new AuthorizationError("denied"));
|
|
25
|
-
expect(r.status).toBe(403);
|
|
26
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.FORBIDDEN);
|
|
27
|
-
});
|
|
28
|
-
it("maps NotFoundError → 404 NOT_FOUND", () => {
|
|
29
|
-
const r = mapToHttpError(new NotFoundError("missing"));
|
|
30
|
-
expect(r.status).toBe(404);
|
|
31
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.NOT_FOUND);
|
|
32
|
-
});
|
|
33
|
-
it("maps RazorpayUnreachableError → 503 UPSTREAM_UNAVAILABLE", () => {
|
|
34
|
-
const r = mapToHttpError(new RazorpayUnreachableError("network"));
|
|
35
|
-
expect(r.status).toBe(503);
|
|
36
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.UPSTREAM_UNAVAILABLE);
|
|
37
|
-
});
|
|
38
|
-
it("maps ApiError → its declared status + code", () => {
|
|
39
|
-
const r = mapToHttpError(new ApiError(418, "teapot"));
|
|
40
|
-
expect(r.status).toBe(418);
|
|
41
|
-
expect(r.code).toBe("API_ERROR");
|
|
42
|
-
expect(r.message).toBe("teapot");
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe("DatabaseError wrapping FirestoreError", () => {
|
|
46
|
-
it("unwraps numeric FirestoreError 5 → 404 NOT_FOUND", () => {
|
|
47
|
-
const dbErr = new DatabaseError("doc missing", { code: 5, message: "not-found" });
|
|
48
|
-
const r = mapToHttpError(dbErr);
|
|
49
|
-
expect(r.status).toBe(404);
|
|
50
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.NOT_FOUND);
|
|
51
|
-
});
|
|
52
|
-
it("unwraps numeric FirestoreError 7 → 403 PERMISSION_DENIED", () => {
|
|
53
|
-
const r = mapToHttpError(new DatabaseError("denied", { code: 7 }));
|
|
54
|
-
expect(r.status).toBe(403);
|
|
55
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.PERMISSION_DENIED);
|
|
56
|
-
});
|
|
57
|
-
it("unwraps numeric FirestoreError 10 → 409 CONCURRENT_MODIFICATION", () => {
|
|
58
|
-
const r = mapToHttpError(new DatabaseError("aborted", { code: 10 }));
|
|
59
|
-
expect(r.status).toBe(409);
|
|
60
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.CONCURRENT_MODIFICATION);
|
|
61
|
-
});
|
|
62
|
-
it("falls back to 500 DATABASE_ERROR when inner cause is not FirestoreError", () => {
|
|
63
|
-
const r = mapToHttpError(new DatabaseError("disk full", undefined));
|
|
64
|
-
expect(r.status).toBe(500);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
describe("bare FirestoreError-shaped objects", () => {
|
|
68
|
-
it("maps numeric code 7 → 403 PERMISSION_DENIED", () => {
|
|
69
|
-
const r = mapToHttpError({ code: 7, message: "permission-denied" });
|
|
70
|
-
expect(r.status).toBe(403);
|
|
71
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.PERMISSION_DENIED);
|
|
72
|
-
});
|
|
73
|
-
it("maps string code permission-denied → 403", () => {
|
|
74
|
-
const r = mapToHttpError({ code: "permission-denied", message: "no" });
|
|
75
|
-
expect(r.status).toBe(403);
|
|
76
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.PERMISSION_DENIED);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe("Zod-shaped errors", () => {
|
|
80
|
-
it("maps Zod-like { issues } → 400 VALIDATION_FAILED with issues", () => {
|
|
81
|
-
const r = mapToHttpError({ issues: [{ path: ["email"], message: "bad" }] });
|
|
82
|
-
expect(r.status).toBe(400);
|
|
83
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.VALIDATION_FAILED);
|
|
84
|
-
expect(r.issues).toHaveLength(1);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe("Unknown errors", () => {
|
|
88
|
-
it("scrubs in production mode", () => {
|
|
89
|
-
const r = mapToHttpError(new Error("DB password=secret"), {
|
|
90
|
-
isProduction: true,
|
|
91
|
-
});
|
|
92
|
-
expect(r.status).toBe(500);
|
|
93
|
-
expect(r.message).toBe("An internal error occurred");
|
|
94
|
-
});
|
|
95
|
-
it("preserves message in dev mode", () => {
|
|
96
|
-
const r = mapToHttpError(new Error("specific dev message"));
|
|
97
|
-
expect(r.status).toBe(500);
|
|
98
|
-
expect(r.message).toBe("specific dev message");
|
|
99
|
-
});
|
|
100
|
-
it("handles string throws", () => {
|
|
101
|
-
const r = mapToHttpError("oops");
|
|
102
|
-
expect(r.status).toBe(500);
|
|
103
|
-
expect(r.message).toBe("oops");
|
|
104
|
-
});
|
|
105
|
-
it("handles undefined throws", () => {
|
|
106
|
-
const r = mapToHttpError(undefined);
|
|
107
|
-
expect(r.status).toBe(500);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
describe("Legacy { status } objects", () => {
|
|
111
|
-
it("maps { status: 401 } → 401 UNAUTHENTICATED", () => {
|
|
112
|
-
const r = mapToHttpError({ status: 401, message: "auth" });
|
|
113
|
-
expect(r.status).toBe(401);
|
|
114
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.UNAUTHENTICATED);
|
|
115
|
-
});
|
|
116
|
-
it("maps { statusCode: 404 } → 404 NOT_FOUND", () => {
|
|
117
|
-
const r = mapToHttpError({ statusCode: 404, message: "gone" });
|
|
118
|
-
expect(r.status).toBe(404);
|
|
119
|
-
expect(r.code).toBe(HTTP_ERROR_CODES.NOT_FOUND);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { safeRead, installDegradedReadReporter } from "../safe-read";
|
|
3
|
-
describe("safeRead", () => {
|
|
4
|
-
it("returns the data on success without invoking the reporter", async () => {
|
|
5
|
-
const reporter = vi.fn();
|
|
6
|
-
installDegradedReadReporter(reporter);
|
|
7
|
-
const result = await safeRead(async () => 42, {
|
|
8
|
-
route: "/test",
|
|
9
|
-
key: "k",
|
|
10
|
-
fallback: -1,
|
|
11
|
-
});
|
|
12
|
-
expect(result).toBe(42);
|
|
13
|
-
expect(reporter).not.toHaveBeenCalled();
|
|
14
|
-
});
|
|
15
|
-
it("returns the fallback and reports on failure", async () => {
|
|
16
|
-
const reporter = vi.fn();
|
|
17
|
-
installDegradedReadReporter(reporter);
|
|
18
|
-
const fallback = ["empty"];
|
|
19
|
-
const result = await safeRead(async () => {
|
|
20
|
-
throw new Error("boom");
|
|
21
|
-
}, { route: "/test", key: "k2", fallback });
|
|
22
|
-
expect(result).toBe(fallback);
|
|
23
|
-
expect(reporter).toHaveBeenCalledTimes(1);
|
|
24
|
-
const call = reporter.mock.calls[0][0];
|
|
25
|
-
expect(call.route).toBe("/test");
|
|
26
|
-
expect(call.key).toBe("k2");
|
|
27
|
-
expect(call.code).toBe("DEGRADED_READ");
|
|
28
|
-
expect(call.message).toBe("boom");
|
|
29
|
-
});
|
|
30
|
-
it("never throws when the reporter itself throws", async () => {
|
|
31
|
-
installDegradedReadReporter(() => {
|
|
32
|
-
throw new Error("reporter broken");
|
|
33
|
-
});
|
|
34
|
-
const result = await safeRead(async () => {
|
|
35
|
-
throw new Error("inner");
|
|
36
|
-
}, { route: "/x", key: "y", fallback: null });
|
|
37
|
-
expect(result).toBeNull();
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|