@mohasinac/appkit 2.3.2 → 2.4.1
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/client.d.ts +48 -12
- package/dist/client.js +25 -6
- package/dist/constants/api-endpoints.d.ts +380 -22
- package/dist/constants/api-endpoints.js +66 -13
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/core/hooks/useSyncManager.d.ts +1 -0
- package/dist/core/hooks/useSyncManager.js +83 -0
- package/dist/core/integration-keys.d.ts +4 -0
- package/dist/core/integration-keys.js +8 -0
- package/dist/features/about/components/FAQPageView.js +9 -11
- package/dist/features/about/components/PolicyPageView.js +32 -11
- package/dist/features/about/components/PublicProfileView.js +77 -11
- package/dist/features/account/components/AddressesIndexListing.js +63 -38
- package/dist/features/account/components/UserOffersPanel.d.ts +8 -0
- package/dist/features/account/components/UserOffersPanel.js +81 -0
- package/dist/features/account/components/UserSettingsView.d.ts +2 -1
- package/dist/features/account/components/UserSettingsView.js +2 -1
- package/dist/features/account/components/UserSidebar.d.ts +6 -1
- package/dist/features/account/components/UserSidebar.js +48 -42
- package/dist/features/account/components/index.d.ts +2 -0
- package/dist/features/account/components/index.js +1 -0
- package/dist/features/admin/actions/admin-actions.d.ts +1 -1
- package/dist/features/admin/actions/admin-actions.js +13 -3
- package/dist/features/admin/components/AdminAdEditorView.js +6 -7
- package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +4 -0
- package/dist/features/admin/components/AdminAllEventEntriesView.js +102 -0
- package/dist/features/admin/components/AdminBidsView.js +94 -8
- package/dist/features/admin/components/AdminBlogEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminBlogEditorView.js +162 -0
- package/dist/features/admin/components/AdminBlogView.d.ts +4 -1
- package/dist/features/admin/components/AdminBlogView.js +61 -31
- package/dist/features/admin/components/AdminBrandEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminBrandEditorView.js +104 -0
- package/dist/features/admin/components/AdminBrandsView.d.ts +4 -0
- package/dist/features/admin/components/AdminBrandsView.js +76 -0
- package/dist/features/admin/components/AdminCarouselEditorView.d.ts +8 -0
- package/dist/features/admin/components/AdminCarouselEditorView.js +204 -0
- package/dist/features/admin/components/AdminCarouselView.js +153 -34
- package/dist/features/admin/components/AdminCartsView.d.ts +4 -0
- package/dist/features/admin/components/AdminCartsView.js +82 -0
- package/dist/features/admin/components/AdminCategoriesView.d.ts +4 -1
- package/dist/features/admin/components/AdminCategoriesView.js +66 -48
- package/dist/features/admin/components/AdminCategoryEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminCategoryEditorView.js +115 -0
- package/dist/features/admin/components/AdminContactEditorView.d.ts +11 -0
- package/dist/features/admin/components/AdminContactEditorView.js +32 -0
- package/dist/features/admin/components/AdminContactView.js +111 -20
- package/dist/features/admin/components/AdminCouponEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminCouponEditorView.js +179 -0
- package/dist/features/admin/components/AdminCouponsView.d.ts +4 -1
- package/dist/features/admin/components/AdminCouponsView.js +57 -9
- package/dist/features/admin/components/AdminDashboardView.js +3 -0
- package/dist/features/admin/components/AdminFaqEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminFaqEditorView.js +128 -0
- package/dist/features/admin/components/AdminFaqsView.d.ts +4 -1
- package/dist/features/admin/components/AdminFaqsView.js +55 -23
- package/dist/features/admin/components/AdminFeatureFlagsView.js +33 -24
- package/dist/features/admin/components/AdminListingScaffold.d.ts +7 -1
- package/dist/features/admin/components/AdminListingScaffold.js +2 -2
- package/dist/features/admin/components/AdminMediaView.js +18 -8
- package/dist/features/admin/components/AdminNavEditorView.d.ts +20 -0
- package/dist/features/admin/components/AdminNavEditorView.js +84 -0
- package/dist/features/admin/components/AdminNavigationView.d.ts +1 -7
- package/dist/features/admin/components/AdminNavigationView.js +84 -72
- package/dist/features/admin/components/AdminNewsletterView.js +102 -20
- package/dist/features/admin/components/AdminNotificationsView.d.ts +4 -0
- package/dist/features/admin/components/AdminNotificationsView.js +119 -0
- package/dist/features/admin/components/AdminOrderEditorView.d.ts +8 -0
- package/dist/features/admin/components/AdminOrderEditorView.js +74 -0
- package/dist/features/admin/components/AdminOrdersView.js +64 -8
- package/dist/features/admin/components/AdminPayoutsView.js +122 -13
- package/dist/features/admin/components/AdminProductEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminProductEditorView.js +143 -0
- package/dist/features/admin/components/AdminProductsView.d.ts +4 -1
- package/dist/features/admin/components/AdminProductsView.js +119 -30
- package/dist/features/admin/components/AdminReturnRequestsView.d.ts +5 -0
- package/dist/features/admin/components/AdminReturnRequestsView.js +101 -0
- package/dist/features/admin/components/AdminReviewsView.js +138 -28
- package/dist/features/admin/components/AdminSectionsView.js +361 -472
- package/dist/features/admin/components/AdminSessionsView.d.ts +4 -0
- package/dist/features/admin/components/AdminSessionsView.js +119 -0
- package/dist/features/admin/components/AdminSidebar.d.ts +18 -3
- package/dist/features/admin/components/AdminSidebar.js +51 -4
- package/dist/features/admin/components/AdminSiteSettingsView.d.ts +7 -0
- package/dist/features/admin/components/AdminSiteSettingsView.js +319 -0
- package/dist/features/admin/components/AdminStoreAddressesView.d.ts +5 -0
- package/dist/features/admin/components/AdminStoreAddressesView.js +52 -0
- package/dist/features/admin/components/AdminStoreEditorView.d.ts +9 -0
- package/dist/features/admin/components/AdminStoreEditorView.js +55 -0
- package/dist/features/admin/components/AdminStoresView.js +62 -20
- package/dist/features/admin/components/AdminUserEditorView.d.ts +10 -0
- package/dist/features/admin/components/AdminUserEditorView.js +72 -0
- package/dist/features/admin/components/AdminUsersView.js +70 -36
- package/dist/features/admin/components/AdminWishlistsView.d.ts +4 -0
- package/dist/features/admin/components/AdminWishlistsView.js +53 -0
- package/dist/features/admin/components/BrandQuickCreateForm.d.ts +5 -0
- package/dist/features/admin/components/BrandQuickCreateForm.js +36 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +5 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.js +35 -0
- package/dist/features/admin/components/DataTable.d.ts +4 -2
- package/dist/features/admin/components/DataTable.js +26 -6
- package/dist/features/admin/components/index.d.ts +47 -1
- package/dist/features/admin/components/index.js +23 -0
- package/dist/features/admin/components/sections/adminSectionsBuildParse.d.ts +48 -0
- package/dist/features/admin/components/sections/adminSectionsBuildParse.js +653 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +298 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +278 -0
- package/dist/features/admin/schemas/firestore.d.ts +26 -0
- package/dist/features/admin/schemas/firestore.js +1 -0
- package/dist/features/admin/types/product.types.d.ts +2 -3
- package/dist/features/auctions/actions/bid-actions.js +6 -2
- package/dist/features/auctions/components/AuctionDetailPageView.d.ts +3 -1
- package/dist/features/auctions/components/AuctionDetailPageView.js +38 -12
- package/dist/features/auctions/components/AuctionFilters.d.ts +3 -1
- package/dist/features/auctions/components/AuctionFilters.js +6 -2
- package/dist/features/auctions/components/CollapsibleBidHistory.d.ts +7 -0
- package/dist/features/auctions/components/CollapsibleBidHistory.js +8 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +4 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +43 -9
- package/dist/features/auctions/components/MarketplaceAuctionGrid.js +1 -0
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +18 -0
- package/dist/features/auctions/components/PlaceBidFormClient.js +33 -0
- package/dist/features/auctions/hooks/useAuctions.d.ts +1 -0
- package/dist/features/auctions/hooks/useAuctions.js +1 -0
- package/dist/features/auctions/schemas/index.d.ts +22 -12
- package/dist/features/auth/actions/profile-actions.d.ts +5 -3
- package/dist/features/auth/actions/profile-actions.js +30 -11
- package/dist/features/auth/auth-helpers.js +1 -0
- package/dist/features/auth/components/LoginForm.js +2 -1
- package/dist/features/auth/hooks/useAuth.js +16 -4
- package/dist/features/auth/permissions/constants.d.ts +63 -0
- package/dist/features/auth/permissions/constants.js +323 -0
- package/dist/features/auth/schemas/firestore.d.ts +20 -0
- package/dist/features/auth/schemas/index.d.ts +4 -4
- package/dist/features/auth/schemas/index.js +3 -2
- package/dist/features/auth/types/index.d.ts +1 -1
- package/dist/features/before-after/schemas/index.d.ts +2 -2
- package/dist/features/blog/actions/blog-actions.d.ts +15 -15
- package/dist/features/blog/components/BlogFilters.js +1 -1
- package/dist/features/blog/components/BlogIndexListing.js +57 -5
- package/dist/features/blog/components/BlogIndexPageView.js +14 -2
- package/dist/features/blog/components/BlogPostForm.js +6 -2
- package/dist/features/blog/components/BlogPostView.js +2 -1
- package/dist/features/blog/hooks/useBlog.d.ts +2 -0
- package/dist/features/blog/hooks/useBlog.js +2 -0
- package/dist/features/blog/schemas/index.d.ts +46 -12
- package/dist/features/brands/actions/brand-actions.d.ts +2 -0
- package/dist/features/brands/actions/brand-actions.js +5 -0
- package/dist/features/brands/index.d.ts +3 -0
- package/dist/features/brands/index.js +3 -0
- package/dist/features/brands/repository/brands.repository.d.ts +13 -0
- package/dist/features/brands/repository/brands.repository.js +60 -0
- package/dist/features/brands/schemas/index.d.ts +33 -0
- package/dist/features/brands/schemas/index.js +15 -0
- package/dist/features/brands/server.d.ts +7 -0
- package/dist/features/brands/server.js +7 -0
- package/dist/features/cart/actions/cart-actions.js +2 -2
- package/dist/features/cart/components/CartDrawer.d.ts +5 -1
- package/dist/features/cart/components/CartDrawer.js +3 -3
- package/dist/features/cart/hooks/useCartCount.d.ts +3 -2
- package/dist/features/cart/hooks/useCartCount.js +4 -2
- package/dist/features/cart/hooks/useGuestCartMerge.js +1 -1
- package/dist/features/cart/index.d.ts +1 -0
- package/dist/features/cart/index.js +1 -0
- package/dist/features/cart/repository/cart.repository.d.ts +5 -1
- package/dist/features/cart/repository/cart.repository.js +36 -5
- package/dist/features/cart/schemas/firestore.d.ts +25 -6
- package/dist/features/cart/schemas/firestore.js +2 -2
- package/dist/features/cart/schemas/index.d.ts +9 -9
- package/dist/features/cart/schemas/index.js +1 -1
- package/dist/features/cart/types/index.d.ts +1 -1
- package/dist/features/cart/utils/pending-ops.d.ts +33 -0
- package/dist/features/cart/utils/pending-ops.js +102 -0
- package/dist/features/categories/components/BrandDetailPageView.d.ts +4 -0
- package/dist/features/categories/components/BrandDetailPageView.js +54 -0
- package/dist/features/categories/components/BrandDetailTabs.d.ts +10 -0
- package/dist/features/categories/components/BrandDetailTabs.js +22 -0
- package/dist/features/categories/components/CategoriesIndexListing.d.ts +3 -1
- package/dist/features/categories/components/CategoriesIndexListing.js +83 -7
- package/dist/features/categories/components/CategoryDetailPageView.js +42 -21
- package/dist/features/categories/components/CategoryDetailTabs.d.ts +7 -1
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -7
- package/dist/features/categories/components/CategoryFilters.js +1 -1
- package/dist/features/categories/components/CategoryForm.js +10 -4
- package/dist/features/categories/components/CategoryProductsListing.d.ts +4 -1
- package/dist/features/categories/components/CategoryProductsListing.js +34 -5
- package/dist/features/categories/components/ConcernCard.js +1 -1
- package/dist/features/categories/hooks/useCategories.js +2 -0
- package/dist/features/categories/repository/categories.repository.js +2 -3
- package/dist/features/categories/schemas/firestore.d.ts +23 -2
- package/dist/features/categories/schemas/firestore.js +8 -0
- package/dist/features/categories/schemas/index.d.ts +8 -8
- package/dist/features/categories/types/index.d.ts +1 -0
- package/dist/features/collections/schemas/index.d.ts +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +2 -2
- package/dist/features/events/components/AdminEventsView.d.ts +4 -1
- package/dist/features/events/components/AdminEventsView.js +64 -38
- package/dist/features/events/components/EventCard.js +1 -1
- package/dist/features/events/components/EventFilters.js +1 -1
- package/dist/features/events/components/EventPollWidget.d.ts +12 -0
- package/dist/features/events/components/EventPollWidget.js +62 -0
- package/dist/features/events/components/EventsIndexListing.js +57 -5
- package/dist/features/events/components/EventsListPageView.js +1 -1
- package/dist/features/events/components/index.d.ts +2 -0
- package/dist/features/events/components/index.js +1 -0
- package/dist/features/events/hooks/useEvents.d.ts +1 -0
- package/dist/features/events/hooks/useEvents.js +1 -0
- package/dist/features/events/repository/events.repository.js +3 -0
- package/dist/features/events/schemas/firestore.d.ts +1 -0
- package/dist/features/events/schemas/index.d.ts +44 -0
- package/dist/features/events/types/index.d.ts +2 -0
- package/dist/features/faq/actions/faq-actions.d.ts +16 -16
- package/dist/features/faq/hooks/useFaqList.js +1 -1
- package/dist/features/faq/schemas/firestore.d.ts +2 -2
- package/dist/features/faq/schemas/firestore.js +2 -1
- package/dist/features/faq/schemas/index.d.ts +4 -4
- package/dist/features/filters/FilterFacetSection.d.ts +1 -0
- package/dist/features/filters/FilterFacetSection.js +13 -1
- package/dist/features/filters/SwitchFilter.js +1 -1
- package/dist/features/grouped/schemas/firestore.d.ts +32 -0
- package/dist/features/grouped/schemas/firestore.js +19 -0
- package/dist/features/homepage/components/AdSlot.d.ts +1 -3
- package/dist/features/homepage/components/AdSlot.js +15 -14
- package/dist/features/homepage/components/BlogArticlesSection.d.ts +3 -1
- package/dist/features/homepage/components/BlogArticlesSection.js +2 -2
- package/dist/features/homepage/components/BrandsSection.d.ts +3 -1
- package/dist/features/homepage/components/BrandsSection.js +4 -3
- package/dist/features/homepage/components/CustomCardsSection.d.ts +3 -0
- package/dist/features/homepage/components/CustomCardsSection.js +76 -0
- package/dist/features/homepage/components/EventsSection.d.ts +3 -1
- package/dist/features/homepage/components/EventsSection.js +2 -2
- package/dist/features/homepage/components/FeaturedAuctionsSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedAuctionsSection.js +2 -2
- package/dist/features/homepage/components/FeaturedPreOrdersSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedPreOrdersSection.js +2 -2
- package/dist/features/homepage/components/FeaturedProductsSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedProductsSection.js +8 -3
- package/dist/features/homepage/components/FeaturedStoresSection.d.ts +3 -1
- package/dist/features/homepage/components/FeaturedStoresSection.js +2 -2
- package/dist/features/homepage/components/GoogleReviewsSection.d.ts +3 -0
- package/dist/features/homepage/components/GoogleReviewsSection.js +65 -0
- package/dist/features/homepage/components/HeroCarousel.js +128 -84
- package/dist/features/homepage/components/MarketplaceHomepageView.d.ts +2 -20
- package/dist/features/homepage/components/MarketplaceHomepageView.js +73 -230
- package/dist/features/homepage/components/SectionCarousel.d.ts +1 -1
- package/dist/features/homepage/components/SectionCarousel.js +2 -0
- package/dist/features/homepage/components/ShopByCategorySection.d.ts +3 -1
- package/dist/features/homepage/components/ShopByCategorySection.js +8 -4
- package/dist/features/homepage/components/SocialFeedSection.d.ts +3 -0
- package/dist/features/homepage/components/SocialFeedSection.js +86 -0
- package/dist/features/homepage/components/SocialPostCard.d.ts +7 -0
- package/dist/features/homepage/components/SocialPostCard.js +39 -0
- package/dist/features/homepage/components/StatsCounterSection.js +1 -1
- package/dist/features/homepage/components/WelcomeSection.js +1 -1
- package/dist/features/homepage/components/WhatsAppCommunitySection.js +1 -1
- package/dist/features/homepage/hooks/useActiveAd.d.ts +23 -0
- package/dist/features/homepage/hooks/useActiveAd.js +20 -0
- package/dist/features/homepage/hooks/useBlogArticles.d.ts +1 -0
- package/dist/features/homepage/hooks/useBlogArticles.js +10 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +4 -1
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +8 -4
- package/dist/features/homepage/hooks/useFeaturedPreOrders.d.ts +4 -1
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +8 -4
- package/dist/features/homepage/hooks/useFeaturedProducts.d.ts +1 -0
- package/dist/features/homepage/hooks/useFeaturedProducts.js +6 -3
- package/dist/features/homepage/hooks/useFeaturedStores.d.ts +3 -1
- package/dist/features/homepage/hooks/useFeaturedStores.js +2 -1
- package/dist/features/homepage/hooks/useHomepageEvents.d.ts +3 -1
- package/dist/features/homepage/hooks/useHomepageEvents.js +2 -1
- package/dist/features/homepage/hooks/useTopBrands.d.ts +3 -1
- package/dist/features/homepage/hooks/useTopBrands.js +2 -1
- package/dist/features/homepage/index.d.ts +2 -0
- package/dist/features/homepage/index.js +1 -0
- package/dist/features/homepage/lib/google-reviews-fetcher.d.ts +14 -0
- package/dist/features/homepage/lib/google-reviews-fetcher.js +27 -0
- package/dist/features/homepage/lib/live-stats.d.ts +14 -0
- package/dist/features/homepage/lib/live-stats.js +62 -0
- package/dist/features/homepage/lib/section-defaults.d.ts +11 -0
- package/dist/features/homepage/lib/section-defaults.js +45 -0
- package/dist/features/homepage/lib/section-helpers.d.ts +5 -0
- package/dist/features/homepage/lib/section-helpers.js +25 -0
- package/dist/features/homepage/lib/section-renderer.d.ts +33 -0
- package/dist/features/homepage/lib/section-renderer.js +164 -0
- package/dist/features/homepage/lib/social-feed-fetcher.d.ts +5 -0
- package/dist/features/homepage/lib/social-feed-fetcher.js +193 -0
- package/dist/features/homepage/schemas/firestore.d.ts +180 -29
- package/dist/features/homepage/schemas/firestore.js +5 -0
- package/dist/features/homepage/types/index.d.ts +48 -19
- package/dist/features/layout/AppLayoutShell.d.ts +6 -1
- package/dist/features/layout/AppLayoutShell.js +25 -9
- package/dist/features/layout/BottomActions.js +1 -1
- package/dist/features/layout/BottomNavbar.d.ts +15 -1
- package/dist/features/layout/BottomNavbar.js +8 -2
- package/dist/features/layout/FooterLayout.d.ts +7 -1
- package/dist/features/layout/FooterLayout.js +3 -3
- package/dist/features/layout/ListingLayout.js +2 -2
- package/dist/features/layout/MainNavbar.d.ts +6 -14
- package/dist/features/layout/MainNavbar.js +4 -16
- package/dist/features/layout/NavItem.js +1 -1
- package/dist/features/layout/NavbarLayout.d.ts +3 -1
- package/dist/features/layout/NavbarLayout.js +5 -5
- package/dist/features/layout/TitleBar.d.ts +4 -2
- package/dist/features/layout/TitleBar.js +5 -3
- package/dist/features/layout/TitleBarLayout.d.ts +3 -1
- package/dist/features/layout/TitleBarLayout.js +2 -2
- package/dist/features/layout/index.d.ts +1 -1
- package/dist/features/media/MediaPickerModal.d.ts +30 -0
- package/dist/features/media/MediaPickerModal.js +72 -0
- package/dist/features/media/index.d.ts +3 -1
- package/dist/features/media/index.js +1 -0
- package/dist/features/media/types/index.d.ts +12 -0
- package/dist/features/media/types/index.js +4 -2
- package/dist/features/media/upload/MediaUploadField.d.ts +5 -1
- package/dist/features/media/upload/MediaUploadField.js +56 -3
- package/dist/features/messages/schemas/firestore.d.ts +36 -0
- package/dist/features/messages/schemas/firestore.js +16 -0
- package/dist/features/orders/repository/orders.repository.d.ts +2 -2
- package/dist/features/orders/repository/orders.repository.js +2 -2
- package/dist/features/orders/schemas/firestore.d.ts +17 -4
- package/dist/features/orders/schemas/firestore.js +2 -2
- package/dist/features/orders/schemas/index.d.ts +18 -18
- package/dist/features/orders/schemas/index.js +3 -3
- package/dist/features/orders/types/index.d.ts +1 -1
- package/dist/features/orders/utils/order-splitter.d.ts +1 -1
- package/dist/features/orders/utils/order-splitter.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +4 -4
- package/dist/features/payments/repository/payout.repository.js +7 -7
- package/dist/features/payments/schemas/firestore.d.ts +6 -6
- package/dist/features/payments/schemas/firestore.js +6 -6
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +11 -10
- package/dist/features/pre-orders/components/PreOrderActionsClient.d.ts +11 -0
- package/dist/features/pre-orders/components/PreOrderActionsClient.js +28 -0
- package/dist/features/pre-orders/components/PreOrderDetailPageView.d.ts +2 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +27 -9
- package/dist/features/pre-orders/components/PreOrderFilters.d.ts +3 -1
- package/dist/features/pre-orders/components/PreOrderFilters.js +9 -6
- package/dist/features/pre-orders/components/PreOrdersIndexListing.d.ts +3 -1
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +132 -36
- package/dist/features/pre-orders/components/PreOrdersListView.js +3 -3
- package/dist/features/pre-orders/components/PreorderCard.js +1 -1
- package/dist/features/pre-orders/schemas/index.d.ts +10 -0
- package/dist/features/products/actions/product-actions.d.ts +2 -2
- package/dist/features/products/actions/product-actions.js +5 -5
- package/dist/features/products/api/[id]/route.js +5 -2
- package/dist/features/products/api/route.js +10 -14
- package/dist/features/products/columns/productTableColumns.js +2 -2
- package/dist/features/products/components/AuctionDetailView.d.ts +2 -1
- package/dist/features/products/components/AuctionDetailView.js +2 -2
- package/dist/features/products/components/AuctionsIndexListing.d.ts +3 -1
- package/dist/features/products/components/AuctionsIndexListing.js +93 -31
- package/dist/features/products/components/BidHistory.d.ts +2 -1
- package/dist/features/products/components/BidHistory.js +18 -2
- package/dist/features/products/components/MakeOfferButton.d.ts +10 -0
- package/dist/features/products/components/MakeOfferButton.js +68 -0
- package/dist/features/products/components/ProductDetailPageView.d.ts +11 -1
- package/dist/features/products/components/ProductDetailPageView.js +27 -8
- package/dist/features/products/components/ProductFilters.d.ts +7 -1
- package/dist/features/products/components/ProductFilters.js +4 -2
- package/dist/features/products/components/ProductForm.d.ts +19 -1
- package/dist/features/products/components/ProductForm.js +24 -6
- package/dist/features/products/components/ProductGrid.d.ts +10 -2
- package/dist/features/products/components/ProductGrid.js +76 -29
- package/dist/features/products/components/ProductsIndexListing.js +131 -45
- package/dist/features/products/components/RelatedProductsCarousel.js +1 -1
- package/dist/features/products/components/ShareButton.d.ts +7 -0
- package/dist/features/products/components/ShareButton.js +22 -0
- package/dist/features/products/components/index.d.ts +2 -0
- package/dist/features/products/components/index.js +1 -0
- package/dist/features/products/hooks/useProducts.d.ts +7 -0
- package/dist/features/products/hooks/useProducts.js +6 -4
- package/dist/features/products/repository/products.repository.d.ts +4 -8
- package/dist/features/products/repository/products.repository.js +17 -50
- package/dist/features/products/schemas/firestore.d.ts +11 -9
- package/dist/features/products/schemas/firestore.js +11 -3
- package/dist/features/products/schemas/index.d.ts +51 -50
- package/dist/features/products/schemas/index.js +2 -5
- package/dist/features/products/types/index.d.ts +13 -5
- package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
- package/dist/features/promotions/actions/coupon-actions.js +1 -1
- package/dist/features/promotions/actions/seller-coupon-actions.js +11 -6
- package/dist/features/promotions/api/route.js +3 -3
- package/dist/features/promotions/components/CouponCard.js +16 -7
- package/dist/features/promotions/components/CouponsIndexListing.js +3 -9
- package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
- package/dist/features/promotions/hooks/usePromotions.js +2 -2
- package/dist/features/promotions/repository/coupons.repository.d.ts +21 -15
- package/dist/features/promotions/repository/coupons.repository.js +97 -125
- package/dist/features/promotions/schemas/firestore.d.ts +31 -2
- package/dist/features/promotions/schemas/firestore.js +29 -0
- package/dist/features/promotions/schemas/index.d.ts +9 -12
- package/dist/features/promotions/schemas/index.js +1 -2
- package/dist/features/promotions/types/index.d.ts +1 -2
- package/dist/features/reviews/actions/review-actions.js +3 -2
- package/dist/features/reviews/components/ReviewDetailPageView.js +5 -9
- package/dist/features/reviews/components/ReviewFilters.js +1 -1
- package/dist/features/reviews/components/ReviewsIndexListing.js +58 -7
- package/dist/features/reviews/components/ReviewsList.js +2 -2
- package/dist/features/reviews/hooks/useReviews.d.ts +1 -0
- package/dist/features/reviews/hooks/useReviews.js +2 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +9 -4
- package/dist/features/reviews/repository/reviews.repository.js +18 -7
- package/dist/features/reviews/schemas/firestore.d.ts +5 -2
- package/dist/features/reviews/schemas/firestore.js +1 -0
- package/dist/features/reviews/schemas/index.d.ts +19 -16
- package/dist/features/reviews/schemas/index.js +3 -2
- package/dist/features/reviews/types/index.d.ts +3 -2
- package/dist/features/scams/actions/scam-actions.d.ts +29 -0
- package/dist/features/scams/actions/scam-actions.js +62 -0
- package/dist/features/scams/components/ScamProfileView.d.ts +10 -0
- package/dist/features/scams/components/ScamProfileView.js +51 -0
- package/dist/features/scams/components/ScamRegistryView.d.ts +6 -0
- package/dist/features/scams/components/ScamRegistryView.js +41 -0
- package/dist/features/scams/components/index.d.ts +4 -0
- package/dist/features/scams/components/index.js +2 -0
- package/dist/features/scams/constants/scam-types.d.ts +38 -0
- package/dist/features/scams/constants/scam-types.js +443 -0
- package/dist/features/scams/repository/scammer.repository.d.ts +67 -0
- package/dist/features/scams/repository/scammer.repository.js +160 -0
- package/dist/features/scams/schemas/firestore.d.ts +362 -0
- package/dist/features/scams/schemas/firestore.js +233 -0
- package/dist/features/search/components/Search.d.ts +12 -2
- package/dist/features/search/components/Search.js +26 -7
- package/dist/features/search/components/index.d.ts +1 -1
- package/dist/features/search/hooks/useNavSuggestions.d.ts +1 -1
- package/dist/features/search/hooks/useNavSuggestions.js +2 -2
- package/dist/features/search/schemas/index.d.ts +7 -7
- package/dist/features/seller/actions/offer-actions.js +52 -36
- package/dist/features/seller/actions/seller-actions.js +19 -13
- package/dist/features/seller/api/products/route.js +9 -4
- package/dist/features/seller/components/SellerAddressesView.d.ts +3 -12
- package/dist/features/seller/components/SellerAddressesView.js +144 -4
- package/dist/features/seller/components/SellerAuctionsView.js +58 -5
- package/dist/features/seller/components/SellerBidsView.d.ts +4 -0
- package/dist/features/seller/components/SellerBidsView.js +131 -0
- package/dist/features/seller/components/SellerCouponEditorView.d.ts +19 -0
- package/dist/features/seller/components/SellerCouponEditorView.js +67 -0
- package/dist/features/seller/components/SellerCouponsView.d.ts +5 -3
- package/dist/features/seller/components/SellerCouponsView.js +135 -13
- package/dist/features/seller/components/SellerCreateProductView.d.ts +4 -10
- package/dist/features/seller/components/SellerCreateProductView.js +4 -3
- package/dist/features/seller/components/SellerEditProductView.d.ts +4 -10
- package/dist/features/seller/components/SellerEditProductView.js +4 -3
- package/dist/features/seller/components/SellerOffersPanel.d.ts +20 -0
- package/dist/features/seller/components/SellerOffersPanel.js +138 -0
- package/dist/features/seller/components/SellerOffersView.js +56 -5
- package/dist/features/seller/components/SellerOrdersView.d.ts +2 -1
- package/dist/features/seller/components/SellerOrdersView.js +185 -16
- package/dist/features/seller/components/SellerPayoutRequestView.d.ts +7 -0
- package/dist/features/seller/components/SellerPayoutRequestView.js +63 -0
- package/dist/features/seller/components/SellerPayoutSettingsView.d.ts +3 -10
- package/dist/features/seller/components/SellerPayoutSettingsView.js +89 -3
- package/dist/features/seller/components/SellerPayoutsView.js +56 -5
- package/dist/features/seller/components/SellerProductShell.d.ts +68 -0
- package/dist/features/seller/components/SellerProductShell.js +179 -0
- package/dist/features/seller/components/SellerProductsView.d.ts +2 -3
- package/dist/features/seller/components/SellerProductsView.js +194 -18
- package/dist/features/seller/components/SellerReviewsView.d.ts +5 -0
- package/dist/features/seller/components/SellerReviewsView.js +100 -0
- package/dist/features/seller/components/SellerShippingView.d.ts +3 -11
- package/dist/features/seller/components/SellerShippingView.js +87 -3
- package/dist/features/seller/components/SellerSidebar.d.ts +11 -3
- package/dist/features/seller/components/SellerSidebar.js +52 -8
- package/dist/features/seller/components/SellerStorefrontView.d.ts +26 -11
- package/dist/features/seller/components/SellerStorefrontView.js +45 -7
- package/dist/features/seller/components/index.d.ts +16 -2
- package/dist/features/seller/components/index.js +7 -0
- package/dist/features/seller/hooks/useSellerListingData.d.ts +3 -1
- package/dist/features/seller/hooks/useSellerListingData.js +6 -4
- package/dist/features/seller/repository/offer.repository.d.ts +3 -3
- package/dist/features/seller/repository/offer.repository.js +6 -6
- package/dist/features/seller/schemas/firestore.d.ts +7 -7
- package/dist/features/seller/schemas/firestore.js +4 -4
- package/dist/features/seller/schemas/index.d.ts +16 -16
- package/dist/features/shell/FormShell.d.ts +29 -0
- package/dist/features/shell/FormShell.js +103 -0
- package/dist/features/shell/QuickFormDrawer.d.ts +29 -0
- package/dist/features/shell/QuickFormDrawer.js +117 -0
- package/dist/features/shell/StepForm.d.ts +44 -0
- package/dist/features/shell/StepForm.js +81 -0
- package/dist/features/shell/index.d.ts +6 -0
- package/dist/features/shell/index.js +3 -0
- package/dist/features/stores/actions/store-query-actions.js +3 -3
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/products/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/components/InteractiveStoreCard.d.ts +2 -2
- package/dist/features/stores/components/InteractiveStoreCard.js +21 -7
- package/dist/features/stores/components/StoreAboutView.js +1 -1
- package/dist/features/stores/components/StoreAuctionsListing.d.ts +5 -2
- package/dist/features/stores/components/StoreAuctionsListing.js +81 -8
- package/dist/features/stores/components/StoreAuctionsPageView.js +8 -7
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -0
- package/dist/features/stores/components/StoreDetailLayoutView.js +29 -5
- package/dist/features/stores/components/StoreHeader.js +2 -1
- package/dist/features/stores/components/StorePreOrdersListing.d.ts +4 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +59 -7
- package/dist/features/stores/components/StorePreOrdersPageView.js +8 -7
- package/dist/features/stores/components/StoreProductsListing.d.ts +5 -2
- package/dist/features/stores/components/StoreProductsListing.js +97 -8
- package/dist/features/stores/components/StoreProductsPageView.js +8 -7
- package/dist/features/stores/components/StoreReviewsListing.js +2 -2
- package/dist/features/stores/components/StoresIndexListing.js +74 -11
- package/dist/features/stores/components/StoresListView.js +1 -1
- package/dist/features/stores/hooks/useStores.d.ts +1 -0
- package/dist/features/stores/hooks/useStores.js +1 -0
- package/dist/features/stores/schemas/firestore.d.ts +34 -0
- package/dist/features/stores/schemas/index.d.ts +8 -8
- package/dist/features/sublisting/schemas/firestore.d.ts +30 -0
- package/dist/features/sublisting/schemas/firestore.js +19 -0
- package/dist/features/support/schemas/firestore.d.ts +113 -0
- package/dist/features/support/schemas/firestore.js +95 -0
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.d.ts +5 -0
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +143 -0
- package/dist/features/whatsapp-bot/components/index.d.ts +2 -0
- package/dist/features/whatsapp-bot/components/index.js +1 -0
- package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +23 -1
- package/dist/features/whatsapp-bot/helpers/whatsapp.js +104 -0
- package/dist/features/whatsapp-bot/server.d.ts +1 -0
- package/dist/features/whatsapp-bot/server.js +1 -0
- package/dist/features/whatsapp-bot/types/index.d.ts +49 -0
- package/dist/features/wishlist/components/WishlistView.d.ts +0 -10
- package/dist/features/wishlist/components/WishlistView.js +13 -6
- package/dist/features/wishlist/hooks/useWishlist.js +2 -0
- package/dist/features/wishlist/hooks/useWishlistCount.d.ts +11 -3
- package/dist/features/wishlist/hooks/useWishlistCount.js +89 -25
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/features/wishlist/schemas/index.d.ts +2 -2
- package/dist/features/wishlist/types/index.d.ts +16 -0
- package/dist/http/api-handler.js +8 -1
- package/dist/index.d.ts +114 -16
- package/dist/index.js +136 -28
- package/dist/monitoring/server-logger.js +9 -3
- package/dist/next/routing/route-map.d.ts +120 -6
- package/dist/next/routing/route-map.js +53 -2
- package/dist/providers/db-firebase/realtime.d.ts +1 -1
- package/dist/react/contexts/SessionContext.js +17 -26
- package/dist/react/hooks/useBulkSelection.d.ts +7 -24
- package/dist/react/hooks/useBulkSelection.js +27 -34
- package/dist/react/hooks/useLongPress.d.ts +3 -16
- package/dist/react/hooks/useLongPress.js +6 -25
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +2 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.js +2 -0
- package/dist/seed/actions/demo-seed-actions.d.ts +2 -2
- package/dist/seed/actions/demo-seed-actions.js +1 -1
- package/dist/seed/anime-figures-seed-data.d.ts +8 -0
- package/dist/seed/anime-figures-seed-data.js +1033 -0
- package/dist/seed/beyblade-seed-data.js +206 -24
- package/dist/seed/bids-seed-data.d.ts +4 -10
- package/dist/seed/bids-seed-data.js +365 -238
- package/dist/seed/blog-posts-seed-data.d.ts +3 -2
- package/dist/seed/blog-posts-seed-data.js +250 -511
- package/dist/seed/brands-seed-data.d.ts +7 -0
- package/dist/seed/brands-seed-data.js +410 -0
- package/dist/seed/carousel-slides-seed-data.d.ts +3 -2
- package/dist/seed/carousel-slides-seed-data.js +177 -216
- package/dist/seed/cart-seed-data.d.ts +9 -9
- package/dist/seed/cart-seed-data.js +73 -73
- package/dist/seed/categories-seed-data.d.ts +4 -2
- package/dist/seed/categories-seed-data.js +720 -879
- package/dist/seed/conversations-seed-data.d.ts +8 -0
- package/dist/seed/conversations-seed-data.js +388 -0
- package/dist/seed/cosplay-accessories-seed-data.d.ts +8 -0
- package/dist/seed/cosplay-accessories-seed-data.js +647 -0
- package/dist/seed/coupon-usage-seed-data.d.ts +25 -0
- package/dist/seed/coupon-usage-seed-data.js +69 -0
- package/dist/seed/coupons-seed-data.d.ts +6 -3
- package/dist/seed/coupons-seed-data.js +375 -3
- package/dist/seed/events-seed-data.d.ts +4 -2
- package/dist/seed/events-seed-data.js +128 -430
- package/dist/seed/factories/cart.factory.d.ts +0 -1
- package/dist/seed/factories/cart.factory.js +2 -2
- package/dist/seed/faq-seed-data.d.ts +11 -18
- package/dist/seed/faq-seed-data.js +786 -1817
- package/dist/seed/grouped-listings-seed-data.d.ts +8 -0
- package/dist/seed/grouped-listings-seed-data.js +201 -0
- package/dist/seed/homepage-sections-seed-data.d.ts +3 -13
- package/dist/seed/homepage-sections-seed-data.js +228 -252
- package/dist/seed/hot-wheels-seed-data.js +285 -38
- package/dist/seed/index.d.ts +12 -11
- package/dist/seed/index.js +10 -12
- package/dist/seed/letitrip-official-seed-data.d.ts +8 -0
- package/dist/seed/letitrip-official-seed-data.js +399 -0
- package/dist/seed/manifest.d.ts +15 -0
- package/dist/seed/manifest.js +140 -0
- package/dist/seed/notifications-seed-data.d.ts +4 -2
- package/dist/seed/notifications-seed-data.js +117 -440
- package/dist/seed/orders-seed-data.d.ts +4 -2
- package/dist/seed/orders-seed-data.js +1090 -521
- package/dist/seed/payouts-seed-data.d.ts +4 -2
- package/dist/seed/payouts-seed-data.js +522 -145
- package/dist/seed/pokemon-carousel-slides-seed-data.js +6 -1
- package/dist/seed/pokemon-categories-seed-data.js +81 -81
- package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +1 -1
- package/dist/seed/pokemon-homepage-sections-seed-data.js +116 -23
- package/dist/seed/pokemon-products-seed-data.d.ts +1 -1
- package/dist/seed/pokemon-products-seed-data.js +83 -73
- package/dist/seed/pokemon-seed-bundle.d.ts +5 -1
- package/dist/seed/pokemon-seed-bundle.js +21 -2
- package/dist/seed/pokemon-stores-seed-data.js +85 -9
- package/dist/seed/pokemon-users-seed-data.js +107 -8
- package/dist/seed/products-auctions-seed-data.d.ts +10 -0
- package/dist/seed/products-auctions-seed-data.js +689 -0
- package/dist/seed/products-preorders-seed-data.d.ts +9 -0
- package/dist/seed/products-preorders-seed-data.js +483 -0
- package/dist/seed/products-seed-data.js +34 -13
- package/dist/seed/products-standard-seed-data.d.ts +8 -0
- package/dist/seed/products-standard-seed-data.js +4179 -0
- package/dist/seed/retro-gaming-seed-data.d.ts +8 -0
- package/dist/seed/retro-gaming-seed-data.js +801 -0
- package/dist/seed/reviews-seed-data.d.ts +4 -17
- package/dist/seed/reviews-seed-data.js +1043 -515
- package/dist/seed/scammers-seed-data.d.ts +17 -0
- package/dist/seed/scammers-seed-data.js +118 -0
- package/dist/seed/site-settings-seed-data.js +25 -2
- package/dist/seed/store-addresses-seed-data.js +188 -84
- package/dist/seed/stores-seed-data.d.ts +3 -9
- package/dist/seed/stores-seed-data.js +212 -102
- package/dist/seed/sublisting-categories-seed-data.d.ts +7 -0
- package/dist/seed/sublisting-categories-seed-data.js +315 -0
- package/dist/seed/transformers-seed-data.js +34 -14
- package/dist/seed/users-seed-data.d.ts +3 -2
- package/dist/seed/users-seed-data.js +531 -440
- package/dist/seed/wishlists-seed-data.js +13 -13
- package/dist/server.d.ts +9 -2
- package/dist/server.js +12 -4
- package/dist/tokens/tokens.css +76 -31
- package/dist/ui/components/Avatar.style.css +10 -12
- package/dist/ui/components/BaseListingCard.d.ts +8 -3
- package/dist/ui/components/BaseListingCard.js +17 -6
- package/dist/ui/components/BaseListingCard.style.css +3 -1
- package/dist/ui/components/BulkActionsBar.d.ts +16 -0
- package/dist/ui/components/BulkActionsBar.js +22 -0
- package/dist/ui/components/Button.style.css +23 -23
- package/dist/ui/components/Card.style.css +60 -62
- package/dist/ui/components/Checkbox.style.css +19 -21
- package/dist/ui/components/DashboardStatsCard.style.css +12 -14
- package/dist/ui/components/Drawer.style.css +18 -14
- package/dist/ui/components/Dropdown.style.css +25 -27
- package/dist/ui/components/EmptyState.style.css +2 -4
- package/dist/ui/components/HorizontalScroller.d.ts +3 -1
- package/dist/ui/components/HorizontalScroller.js +116 -21
- package/dist/ui/components/HorizontalScroller.style.css +2 -2
- package/dist/ui/components/ImageLightbox.d.ts +0 -9
- package/dist/ui/components/ImageLightbox.js +43 -9
- package/dist/ui/components/InlineCreateSelect.d.ts +38 -0
- package/dist/ui/components/InlineCreateSelect.js +70 -0
- package/dist/ui/components/ListingLayout.style.css +41 -77
- package/dist/ui/components/ListingToolbar.d.ts +54 -0
- package/dist/ui/components/ListingToolbar.js +34 -0
- package/dist/ui/components/Modal.style.css +14 -10
- package/dist/ui/components/PageLoader.d.ts +11 -0
- package/dist/ui/components/PageLoader.js +21 -0
- package/dist/ui/components/Radio.style.css +34 -36
- package/dist/ui/components/RichTextEditor.js +1 -1
- package/dist/ui/components/RowActionMenu.d.ts +1 -0
- package/dist/ui/components/RowActionMenu.js +4 -2
- package/dist/ui/components/SectionTabs.js +1 -1
- package/dist/ui/components/SectionTabs.style.css +1 -0
- package/dist/ui/components/SideModal.style.css +4 -8
- package/dist/ui/components/Slider.style.css +2 -4
- package/dist/ui/components/Tabs.style.css +8 -10
- package/dist/ui/components/Toast.style.css +22 -24
- package/dist/ui/components/Toggle.style.css +11 -13
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/rich-text/RichText.js +2 -1
- package/dist/ui/rich-text/RichText.style.css +292 -5
- package/dist/ui/rich-text/RichTextRenderer.d.ts +15 -0
- package/dist/ui/rich-text/RichTextRenderer.js +15 -0
- package/dist/utils/id-generators.d.ts +10 -0
- package/dist/utils/id-generators.js +12 -0
- package/dist/validation/schemas.d.ts +9 -9
- package/package.json +5 -1
- package/README.md +0 -116
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scam Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* 27 documented scam patterns across 6 categories, specific to India's
|
|
5
|
+
* collectibles aftermarket (Pokémon TCG, Hot Wheels, Beyblades, action figures,
|
|
6
|
+
* graded cards, vintage toys).
|
|
7
|
+
*
|
|
8
|
+
* Each entry includes: howItHappens (what the scammer does) and
|
|
9
|
+
* howToAvoid[] (actionable advice). Used on public scam-type pages,
|
|
10
|
+
* registration acknowledgement modal, and structured SEO data.
|
|
11
|
+
*/
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// CATEGORY DEFINITIONS
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export const SCAM_CATEGORIES = [
|
|
16
|
+
{
|
|
17
|
+
id: "price_manipulation",
|
|
18
|
+
label: "Price Manipulation",
|
|
19
|
+
description: "Scammer tricks you into selling too cheap or buying at an inflated price by misrepresenting value, condition, or market rates.",
|
|
20
|
+
icon: "IndianRupee",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: "social_engineering",
|
|
24
|
+
label: "Social Engineering",
|
|
25
|
+
description: "Scammer exploits your emotions — sympathy, trust, or urgency — to bypass your better judgement and agree to unfair terms.",
|
|
26
|
+
icon: "UserX",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "payment_fraud",
|
|
30
|
+
label: "Payment Fraud",
|
|
31
|
+
description: "Scammer manipulates the payment process so you lose money: fake screenshots, advance payment with no delivery, chargebacks after receipt.",
|
|
32
|
+
icon: "CreditCard",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "preorder_delivery_fraud",
|
|
36
|
+
label: "Pre-order & Delivery Fraud",
|
|
37
|
+
description: "Scammer collects advance money for future items they never intend to deliver, hiding behind vague 'delays' until pressure forces a refund.",
|
|
38
|
+
icon: "Package",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "identity_impersonation",
|
|
42
|
+
label: "Identity & Impersonation",
|
|
43
|
+
description: "Scammer pretends to be a reputable seller, LetItRip support, or a trusted community member to steal your money or credentials.",
|
|
44
|
+
icon: "UserCheck",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "item_authenticity_fraud",
|
|
48
|
+
label: "Item Authenticity Fraud",
|
|
49
|
+
description: "Scammer sells counterfeit, tampered, or misrepresented collectibles — fake Pokémon cards, cracked PSA slabs, repacked booster boxes.",
|
|
50
|
+
icon: "ShieldAlert",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "logistics_fraud",
|
|
54
|
+
label: "Logistics & Shipping Fraud",
|
|
55
|
+
description: "Scammer manipulates the shipment process — empty boxes, fake tracking, or return swaps — to claim delivery without handing over the real item.",
|
|
56
|
+
icon: "Truck",
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// SCAM TYPE DEFINITIONS
|
|
61
|
+
// ============================================================================
|
|
62
|
+
export const SCAM_TYPES = [
|
|
63
|
+
// ── Price Manipulation ──────────────────────────────────────────────────────
|
|
64
|
+
{
|
|
65
|
+
id: "undervaluation",
|
|
66
|
+
category: "price_manipulation",
|
|
67
|
+
label: "Undervaluation (Lowball Trick)",
|
|
68
|
+
shortDescription: "Scammer convinces seller the item is worth far less than market value to buy cheap and resell at profit.",
|
|
69
|
+
howItHappens: "A buyer approaches — often someone who appears knowledgeable — and insists your item is common, damaged, or worth only a fraction of the real price. They may say 'I saw this for ₹300 online' or 'this series is not popular anymore'. Once you sell at a deep discount, they immediately resell at true market value. This is especially common with vintage items whose original owners don't actively follow current pricing.",
|
|
70
|
+
howToAvoid: [
|
|
71
|
+
"Check current sold listings on LetItRip, eBay, and local Facebook groups before agreeing to any price.",
|
|
72
|
+
"Never accept a buyer's stated 'market price' at face value — do your own 5-minute research first.",
|
|
73
|
+
"If someone seems unusually eager to buy at a specific low price, that is a red flag.",
|
|
74
|
+
"PSA-graded and sealed vintage items especially hold hidden value — get independent opinions.",
|
|
75
|
+
"The more knowledge a buyer shows about your item's rarity, the more likely they know it is worth more than they claim.",
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: "fake_price_reference",
|
|
80
|
+
category: "price_manipulation",
|
|
81
|
+
label: "Fake Price Reference",
|
|
82
|
+
shortDescription: "Scammer shows fabricated or cherry-picked price screenshots to justify an absurdly low offer.",
|
|
83
|
+
howItHappens: "The buyer pastes a link or screenshot showing 'identical' item sold for much less on another platform. The reference is either photoshopped, from a completely different edition/condition, or an outlier damaged sale. Seller, not wanting to appear greedy, accepts the distorted pricing.",
|
|
84
|
+
howToAvoid: [
|
|
85
|
+
"Cross-reference any price screenshot yourself — open the actual platform and search.",
|
|
86
|
+
"Verify: same edition, same condition (sealed vs. opened vs. graded), same region.",
|
|
87
|
+
"A single outlier sale does not set market value — look at the median of 5–10 recent sales.",
|
|
88
|
+
"Reputable buyers do not need to justify an offer with screenshots — they simply make a fair offer.",
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: "bait_and_switch",
|
|
93
|
+
category: "price_manipulation",
|
|
94
|
+
label: "Bait and Switch",
|
|
95
|
+
shortDescription: "Item listed at attractive price; after buyer is engaged, the terms or item change.",
|
|
96
|
+
howItHappens: "Listing shows a low price or a desirable item. Once the buyer expresses serious interest or pays, the seller claims 'that item just sold' and offers a substitute at higher price, or the item delivered is a different (cheaper) variant than advertised.",
|
|
97
|
+
howToAvoid: [
|
|
98
|
+
"Confirm all item specifics (set number, condition, edition) in writing before payment.",
|
|
99
|
+
"Request detailed photos of the actual item being sold — not stock images.",
|
|
100
|
+
"Use LetItRip's on-platform messaging so all communications are recorded.",
|
|
101
|
+
"Report listings that change their item description after you express interest.",
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "condition_misrepresentation",
|
|
106
|
+
category: "price_manipulation",
|
|
107
|
+
label: "Condition Misrepresentation",
|
|
108
|
+
shortDescription: "Item listed as mint/sealed/graded; delivered item is damaged, opened, or counterfeit.",
|
|
109
|
+
howItHappens: "Listing uses words like 'mint', 'PSA 10', 'factory sealed', or 'first edition' but the actual item has visible damage, has been opened, or is a reprint. Photos are taken from flattering angles or are stock images, not of the actual item.",
|
|
110
|
+
howToAvoid: [
|
|
111
|
+
"Always ask for photos from multiple angles, including the corners, back, and any seal/hologram.",
|
|
112
|
+
"Ask for proof of grading: PSA/BGS certificate number you can verify on their website.",
|
|
113
|
+
"For sealed products, ask for a photo of the original shrink wrap and any LetItRip hologram sticker.",
|
|
114
|
+
"Video unboxing on delivery is your strongest evidence for dispute claims.",
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
// ── Social Engineering ───────────────────────────────────────────────────────
|
|
118
|
+
{
|
|
119
|
+
id: "sympathy_play",
|
|
120
|
+
category: "social_engineering",
|
|
121
|
+
label: "Sympathy Play",
|
|
122
|
+
shortDescription: "Scammer exploits your empathy to get a deep discount or deferred payment you would not normally give.",
|
|
123
|
+
howItHappens: "Buyer presents a convincing sad story: a sick parent, a lost job, a dead collection that must be rebuilt cheaply. They appeal to your sense of community — 'we collectors should help each other'. Once sympathy is established, they ask for a huge discount, free shipping, or pay-later agreement. After getting the item, they either ghost or resell it immediately.",
|
|
124
|
+
howToAvoid: [
|
|
125
|
+
"Charity and commerce are separate — it is perfectly reasonable to maintain your price regardless of someone's circumstances.",
|
|
126
|
+
"Pay-later agreements have near-zero enforceability for individuals — never ship before receiving full payment.",
|
|
127
|
+
"A story that seems designed to trigger pity should be treated as a warning sign.",
|
|
128
|
+
"If you want to help a genuine collector, consider donating to a community fund, not discounting at a personal loss.",
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "trust_building_fraud",
|
|
133
|
+
category: "social_engineering",
|
|
134
|
+
label: "Trust Building Fraud",
|
|
135
|
+
shortDescription: "Scammer builds long-term rapport through small legitimate transactions, then executes one large fraud.",
|
|
136
|
+
howItHappens: "The scammer interacts with you over weeks or months — small helpful messages, a few low-value successful trades, positive reviews on each other's listings. Once significant trust is built, they propose a large transaction: a rare card, a valuable lot, or an advance payment. After receiving money or item, they disappear.",
|
|
137
|
+
howToAvoid: [
|
|
138
|
+
"Scale of trust should match the scale of risk — a history of ₹500 trades does not justify a ₹50,000 advance.",
|
|
139
|
+
"Use escrow or COD for high-value first-time large transactions even with known contacts.",
|
|
140
|
+
"Do not let existing rapport override basic verification steps.",
|
|
141
|
+
"Report immediately if a long-known contact suddenly ghosts after a large transaction.",
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "urgency_pressure",
|
|
146
|
+
category: "social_engineering",
|
|
147
|
+
label: "Urgency Pressure",
|
|
148
|
+
shortDescription: "Scammer creates artificial time pressure to force a hasty decision without proper verification.",
|
|
149
|
+
howItHappens: "'I'm leaving the city in 2 hours', 'courier picks up in 30 minutes', 'another buyer is waiting — decide now'. The deadline is fabricated. Its purpose is to prevent you from researching the item's value, verifying payment, or consulting others. Rushed decisions skip safeguards.",
|
|
150
|
+
howToAvoid: [
|
|
151
|
+
"Legitimate buyers accept reasonable time for verification — anyone refusing basic checks is a red flag.",
|
|
152
|
+
"No deal is so time-sensitive it cannot wait for you to verify payment has actually cleared.",
|
|
153
|
+
"If someone creates excessive pressure, decline and offer to transact when you are comfortable.",
|
|
154
|
+
"Urgency that benefits only the scammer's timeline, not yours, is manufactured.",
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: "student_impersonation",
|
|
159
|
+
category: "social_engineering",
|
|
160
|
+
label: "Student/Kid Impersonation",
|
|
161
|
+
shortDescription: "Scammer pretends to be a student or child with limited means to guilt-trip seller into a giveaway-price deal.",
|
|
162
|
+
howItHappens: "Profile photos show a young face or a school uniform. Messages are written in broken language to appear young and naive. Story: 'I'm 15 and I've always wanted this card, I've been saving up'. Seller, moved by nostalgia or generosity, sells at cost or gives deferred payment. The 'student' resells for profit.",
|
|
163
|
+
howToAvoid: [
|
|
164
|
+
"Age and circumstances do not obligate you to sell below market rate.",
|
|
165
|
+
"Verified payments only — never ship on a promise from an unverified stranger.",
|
|
166
|
+
"Collector communities have proper channels for discounted items (giveaways, community sales) — do not conduct them through private deals with strangers.",
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
// ── Payment Fraud ────────────────────────────────────────────────────────────
|
|
170
|
+
{
|
|
171
|
+
id: "advance_payment_ghost",
|
|
172
|
+
category: "payment_fraud",
|
|
173
|
+
label: "Advance Payment Ghost",
|
|
174
|
+
shortDescription: "Seller takes advance payment, ships nothing, and ghosts the buyer.",
|
|
175
|
+
howItHappens: "Buyer sends money upfront via UPI, bank transfer, or wallet before receiving the item. Seller then stops responding: messages go unread, calls unanswered, account disappears or blocks the buyer. The money is gone and there is no enforceable recourse without platform protection.",
|
|
176
|
+
howToAvoid: [
|
|
177
|
+
"Never send full advance payment to an unverified individual seller outside a trusted platform.",
|
|
178
|
+
"Use LetItRip's order flow — payment is held by the platform until delivery is confirmed.",
|
|
179
|
+
"For off-platform trades, insist on COD (cash on delivery) or use a mutually trusted physical middleman.",
|
|
180
|
+
"Partial advance (≤20%) for legitimate preorders is more reasonable — never 100% upfront to an unknown.",
|
|
181
|
+
"If a seller insists on full advance before sharing shipping details, do not proceed.",
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
id: "fake_payment_screenshot",
|
|
186
|
+
category: "payment_fraud",
|
|
187
|
+
label: "Fake Payment Screenshot",
|
|
188
|
+
shortDescription: "Scammer sends a photoshopped UPI/PayTM success screenshot to claim payment was made.",
|
|
189
|
+
howItHappens: "After agreeing on a deal, the scammer sends what looks like a successful UPI or PayTM payment screenshot. The screenshot is edited — the amount, recipient name, and transaction ID are fabricated. Seller ships the item trusting the screenshot, but payment never arrives in their account.",
|
|
190
|
+
howToAvoid: [
|
|
191
|
+
"Never ship based on a screenshot — check your bank or UPI app for the actual credit.",
|
|
192
|
+
"Wait for the payment to appear in your account balance, not just as a notification that can be faked.",
|
|
193
|
+
"UPI transactions show within seconds — insist on seeing real-time confirmation.",
|
|
194
|
+
"Ask the sender to share the UTR (Unique Transaction Reference) number and verify it on your bank portal.",
|
|
195
|
+
],
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: "partial_payment_ghost",
|
|
199
|
+
category: "payment_fraud",
|
|
200
|
+
label: "Partial Payment Ghost",
|
|
201
|
+
shortDescription: "Scammer pays a small earnest deposit, takes delivery, then ghosts for the remaining balance.",
|
|
202
|
+
howItHappens: "Buyer proposes paying a small portion now ('to show intent') and the rest on delivery or within a few days. After receiving the item, they stop responding to requests for the balance. The partial payment was enough to seem legitimate but not enough to cover loss.",
|
|
203
|
+
howToAvoid: [
|
|
204
|
+
"Do not agree to partial payment schemes with strangers — full payment before dispatch only.",
|
|
205
|
+
"An earnest deposit has no legal enforceability in casual individual trades.",
|
|
206
|
+
"Legitimate buyers who cannot pay immediately will wait until they can — not collect now and pay 'later'.",
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: "chargeback_fraud",
|
|
211
|
+
category: "payment_fraud",
|
|
212
|
+
label: "Chargeback Fraud",
|
|
213
|
+
shortDescription: "Buyer pays via credit card or Razorpay, receives the item, then disputes the payment with their bank.",
|
|
214
|
+
howItHappens: "Buyer pays through a credit card gateway. After receiving the item, they file a chargeback with their bank claiming 'unauthorized transaction' or 'item not received'. The bank reverses the payment. Seller loses both the item and the money. This is common for high-value collectibles.",
|
|
215
|
+
howToAvoid: [
|
|
216
|
+
"Photograph and video the item before packing, and the packed parcel with tracking label visible.",
|
|
217
|
+
"Use tracked shipping with proof of delivery signatures for high-value orders.",
|
|
218
|
+
"Collect buyer's full address, phone, and LetItRip account before shipping.",
|
|
219
|
+
"On LetItRip's platform, all transactions are logged — dispute resolution can use platform records.",
|
|
220
|
+
"Be cautious of buyers who insist on credit card payment specifically for peer-to-peer deals.",
|
|
221
|
+
],
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
id: "overpayment_scam",
|
|
225
|
+
category: "payment_fraud",
|
|
226
|
+
label: "Overpayment Scam",
|
|
227
|
+
shortDescription: "Scammer 'accidentally' overpays, asks for a refund of the excess — their original payment then bounces.",
|
|
228
|
+
howItHappens: "Scammer sends ₹5,000 for a ₹500 item. They apologise for the 'mistake' and urgently ask you to refund ₹4,500. You refund from your own pocket. Their original ₹5,000 payment was via a bouncing cheque, cancelled transaction, or reversible payment method — so it never actually settles. You lose ₹4,500.",
|
|
229
|
+
howToAvoid: [
|
|
230
|
+
"Wait for any payment to fully clear (not just appear as pending) before acting on it.",
|
|
231
|
+
"Legitimate buyers do not overpay by large amounts — this is always a setup.",
|
|
232
|
+
"Do not refund any 'excess' until the original payment is fully irreversible and settled.",
|
|
233
|
+
"Prefer UPI instant transfers where settlement is real-time — avoid cheques or partial payment methods.",
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
// ── Pre-order & Delivery Fraud ──────────────────────────────────────────────
|
|
237
|
+
{
|
|
238
|
+
id: "preorder_hold",
|
|
239
|
+
category: "preorder_delivery_fraud",
|
|
240
|
+
label: "Pre-order Float Scam",
|
|
241
|
+
shortDescription: "Seller collects deposits from many buyers for months, uses the float, then refunds after public pressure — never having had a supplier.",
|
|
242
|
+
howItHappens: "Seller announces preorders for a popular item: limited Pokémon ETB, exclusive Funko Pop, or imported toy. Hundreds of buyers pay 50–100% deposits. The seller strings everyone along with monthly 'shipping delay' updates. When complaints go public on Twitter/WhatsApp, they quietly refund everyone without delivering. They profited from interest on the collected deposits with no real business risk.",
|
|
243
|
+
howToAvoid: [
|
|
244
|
+
"Only preorder from sellers with a documented history of successful preorder delivery.",
|
|
245
|
+
"Ask for proof of supplier relationship: purchase order, supplier invoice, or import record.",
|
|
246
|
+
"Be suspicious of preorders with no clear shipping date or supplier name.",
|
|
247
|
+
"A seller who cannot provide any evidence of an actual supplier order likely doesn't have one.",
|
|
248
|
+
"LetItRip preorders require store verification — prefer platform transactions over off-platform deals.",
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
id: "fake_preorder_listing",
|
|
253
|
+
category: "preorder_delivery_fraud",
|
|
254
|
+
label: "Fake Pre-order Listing",
|
|
255
|
+
shortDescription: "Seller lists high-demand limited items for preorder with zero supplier relationship, collects deposits, disappears.",
|
|
256
|
+
howItHappens: "Scammer identifies a sold-out or unreleased product generating demand (e.g., a new Pokémon TCG set, limited Gundam model). They create a listing offering preorders at slightly below expected retail. After collecting enough deposits, the account disappears or is suspended.",
|
|
257
|
+
howToAvoid: [
|
|
258
|
+
"Verify that the seller has previously delivered similar preorders — check their store history.",
|
|
259
|
+
"For brand-new unreleased items, prefer official distributors or LetItRip-verified stores.",
|
|
260
|
+
"If the deal is significantly below expected retail for a sold-out item, it is very likely fraudulent.",
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
id: "endless_delay_scam",
|
|
265
|
+
category: "preorder_delivery_fraud",
|
|
266
|
+
label: "Endless Delay Scam",
|
|
267
|
+
shortDescription: "Seller provides periodic vague updates to keep buyers waiting past dispute/refund windows without ever shipping.",
|
|
268
|
+
howItHappens: "After taking payment, seller provides just enough communication ('customs delay', 'supplier issue', 'shipping next week') to keep buyers from escalating. Updates come strategically — just before people get angry. By the time the refund window closes, buyers have no recourse. Eventually the seller goes silent.",
|
|
269
|
+
howToAvoid: [
|
|
270
|
+
"Set a personal deadline when placing any order with advance payment — if not shipped by date X, dispute immediately.",
|
|
271
|
+
"Vague updates without tracking numbers or evidence of actual shipment are a warning sign.",
|
|
272
|
+
"File a payment dispute with your UPI bank before the dispute window closes, even if the seller is still communicating.",
|
|
273
|
+
"On LetItRip, orders past their expected date can be escalated to admin — do not wait.",
|
|
274
|
+
],
|
|
275
|
+
},
|
|
276
|
+
// ── Identity & Impersonation ─────────────────────────────────────────────────
|
|
277
|
+
{
|
|
278
|
+
id: "seller_impersonation",
|
|
279
|
+
category: "identity_impersonation",
|
|
280
|
+
label: "Seller Impersonation",
|
|
281
|
+
shortDescription: "Scammer steals product photos from a reputable seller's listings and creates identical listings to collect payment for nothing.",
|
|
282
|
+
howItHappens: "Scammer finds a legitimate seller's high-quality listing photos (from LetItRip, OLX, Instagram, or YouTube). They create a near-identical listing — same photos, similar description, slightly lower price. Buyers who search the seller's name or item find the fake listing first. After payment, nothing is shipped.",
|
|
283
|
+
howToAvoid: [
|
|
284
|
+
"Verify the seller profile carefully — check their store on LetItRip, their review history, and how long they've been active.",
|
|
285
|
+
"Do a reverse image search on any listing photos to see if they appear elsewhere.",
|
|
286
|
+
"If a price is significantly lower than the original seller's known price, it may be an impersonation.",
|
|
287
|
+
"Transact only through LetItRip's order flow — off-platform payments have no protection.",
|
|
288
|
+
],
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
id: "platform_impersonation",
|
|
292
|
+
category: "identity_impersonation",
|
|
293
|
+
label: "Platform Impersonation (Fake Support)",
|
|
294
|
+
shortDescription: "Scammer pretends to be LetItRip support via WhatsApp/DM and requests OTP, bank details, or login credentials.",
|
|
295
|
+
howItHappens: "You receive a message from 'LetItRip Support' on WhatsApp, Telegram, or Instagram DMs. The message claims there's a 'KYC issue', 'payment hold', or 'account verification'. They ask for your OTP, password, bank account number, or ask you to send a 'refund' to their UPI to receive a 'blocked payout'.",
|
|
296
|
+
howToAvoid: [
|
|
297
|
+
"LetItRip support will NEVER ask for your password, OTP, or bank account details via WhatsApp.",
|
|
298
|
+
"Official LetItRip communication comes only from @letitrip.in email addresses.",
|
|
299
|
+
"If you receive a suspicious support message, verify by logging into your account and checking the official support section.",
|
|
300
|
+
"Never send money to 'unblock' a payout — this is always a scam.",
|
|
301
|
+
],
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
id: "account_takeover_resale",
|
|
305
|
+
category: "identity_impersonation",
|
|
306
|
+
label: "Account Takeover Resale",
|
|
307
|
+
shortDescription: "Scammer hacks or takes over a dormant legitimate seller account and exploits its review history for fraudulent sales.",
|
|
308
|
+
howItHappens: "A legitimate seller account with good ratings either gets phished or abandoned. Scammer gains access, changes the contact details, and starts listing high-demand items at attractive prices. Buyers trust the review history, pay, and receive nothing. By the time the abuse is reported, the scammer has collected multiple payments.",
|
|
309
|
+
howToAvoid: [
|
|
310
|
+
"Check when the account last had activity — sudden listing activity after months of inactivity is suspicious.",
|
|
311
|
+
"Review dates matter: old positive reviews do not guarantee current legitimacy.",
|
|
312
|
+
"Message the seller with a specific question about the item — a genuine seller can answer; an account hijacker often cannot.",
|
|
313
|
+
"For high-value purchases, video call or request a live photo of the item with your name written on paper.",
|
|
314
|
+
],
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
id: "fake_escrow",
|
|
318
|
+
category: "identity_impersonation",
|
|
319
|
+
label: "Fake Escrow / Middleman",
|
|
320
|
+
shortDescription: "Scammer creates a fake third-party escrow or middleman service that is themselves or an accomplice.",
|
|
321
|
+
howItHappens: "Scammer proposes using an 'escrow service' or 'trusted community middleman' to reassure the other party. The escrow account, website, or WhatsApp contact is created or controlled by the scammer. Both buyer and seller are told to send money or item to the 'neutral' party — who then disappears.",
|
|
322
|
+
howToAvoid: [
|
|
323
|
+
"Use only LetItRip's platform for escrow protection — never third-party escrow services you haven't independently verified.",
|
|
324
|
+
"A genuine middleman will not be introduced by one party in the transaction.",
|
|
325
|
+
"Verify any escrow service independently before using it — search their name online, look for reviews.",
|
|
326
|
+
],
|
|
327
|
+
},
|
|
328
|
+
// ── Item Authenticity Fraud ──────────────────────────────────────────────────
|
|
329
|
+
{
|
|
330
|
+
id: "counterfeit_item",
|
|
331
|
+
category: "item_authenticity_fraud",
|
|
332
|
+
label: "Counterfeit / Bootleg Item",
|
|
333
|
+
shortDescription: "Seller sells a replica, bootleg, or factory-second as the genuine authentic article.",
|
|
334
|
+
howItHappens: "Fake Pokémon cards printed with incorrect fonts, textures, or holofoil patterns. Replica Hot Wheels in reproduction original packaging. Funko Pops with wrong paint detail or box quality. Fake Beyblades with lightweight plastic. Products shipped from China with no authentic packaging. These often look convincing to non-experts.",
|
|
335
|
+
howToAvoid: [
|
|
336
|
+
"Know your item: learn what authentic versions look and feel like before buying.",
|
|
337
|
+
"Check card texture, font, and holographic pattern for Pokémon TCG.",
|
|
338
|
+
"For Hot Wheels, verify the base casting date stamp and paint finish.",
|
|
339
|
+
"For Funko Pops, check the box serial number and window tray quality.",
|
|
340
|
+
"Buy sealed products from stores with verified supplier relationships.",
|
|
341
|
+
"If the price is too good for a scarce item, it almost certainly is not authentic.",
|
|
342
|
+
],
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
id: "fake_grading_claim",
|
|
346
|
+
category: "item_authenticity_fraud",
|
|
347
|
+
label: "Fake Grading Claim",
|
|
348
|
+
shortDescription: "Seller claims item is PSA/BGS authenticated when it is not, or shows a photoshopped certificate.",
|
|
349
|
+
howItHappens: "Listing claims 'PSA 9', 'BGS 9.5', or 'CGC certified'. Seller may show a certificate image that is edited (wrong cert number, wrong card name). Or the item arrives without any slab at all. Some sellers claim 'raw grade equivalent to PSA 9' — which is meaningless.",
|
|
350
|
+
howToAvoid: [
|
|
351
|
+
"Verify PSA certification on psacard.com using the cert number on the slab.",
|
|
352
|
+
"Verify BGS on beckett.com, CGC on cgccards.com.",
|
|
353
|
+
"Never accept verbal grade claims — only physically slabbed cards with verifiable cert numbers count.",
|
|
354
|
+
"'Raw PSA equivalent' is not a real grade — dismiss all such claims.",
|
|
355
|
+
],
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
id: "graded_case_tampering",
|
|
359
|
+
category: "item_authenticity_fraud",
|
|
360
|
+
label: "Graded Case Tampering",
|
|
361
|
+
shortDescription: "Scammer cracks open a legitimate PSA/BGS slab, swaps in a fake or lower-grade card, and reseals it.",
|
|
362
|
+
howItHappens: "A real PSA 10 Charizard slab is purchased cheaply (perhaps a lower-grade). The case is carefully cut open, a fake or lower-grade card inserted, and the slab re-sealed with heat or glue. From a photo, it looks authentic. Even the cert number verifies — but it was for a different (original) card.",
|
|
363
|
+
howToAvoid: [
|
|
364
|
+
"Inspect the slab seam carefully — any unevenness, glue residue, or discolouration is a red flag.",
|
|
365
|
+
"Cross-reference the cert number: verify on PSA's website that the card described matches what is in the slab.",
|
|
366
|
+
"For high-value slabs (₹10,000+), buy only from dealers who will video-authenticate in real time.",
|
|
367
|
+
"A cracked slab will often have slight flex or movement that an original sealed case does not.",
|
|
368
|
+
],
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
id: "sealed_product_repack",
|
|
372
|
+
category: "item_authenticity_fraud",
|
|
373
|
+
label: "Sealed Product Repack",
|
|
374
|
+
shortDescription: "Seller opens booster boxes/packs, removes valuable pulls, reseals with heat/glue, and resells as factory sealed.",
|
|
375
|
+
howItHappens: "A Pokémon ETB or booster box is opened, the best cards (Charizard ex, special illustration rares) pulled out, and replaced with commons/uncommons. The box is resealed with a heat gun or glue, and the shrink wrap restored. It looks factory sealed but the valuable cards are gone.",
|
|
376
|
+
howToAvoid: [
|
|
377
|
+
"Examine seal edges for bubbles, uneven heat sealing, or any residue where glue was applied.",
|
|
378
|
+
"Weigh the box if possible — repacked boxes often differ slightly due to missing cards.",
|
|
379
|
+
"Buy sealed products only from stores with documented import invoices or from official distributor chains.",
|
|
380
|
+
"A price significantly below retail for 'sealed' product on a popular set is a major warning sign.",
|
|
381
|
+
],
|
|
382
|
+
},
|
|
383
|
+
// ── Logistics Fraud ──────────────────────────────────────────────────────────
|
|
384
|
+
{
|
|
385
|
+
id: "empty_box_ship",
|
|
386
|
+
category: "logistics_fraud",
|
|
387
|
+
label: "Empty Box Shipment",
|
|
388
|
+
shortDescription: "Seller ships an empty box or box filled with rocks/newspaper, then claims the item was packed.",
|
|
389
|
+
howItHappens: "Seller generates a real tracking number and ships a package. The package contains newspaper, rocks, or nothing at all. When buyer disputes, seller points to shipping proof and claims 'item was packed — must have been removed in transit'. Carrier dispute is difficult without video evidence.",
|
|
390
|
+
howToAvoid: [
|
|
391
|
+
"Video record the unboxing of every high-value delivery — this is your evidence.",
|
|
392
|
+
"If box feels too light or sounds different from expected, photograph the sealed box before opening.",
|
|
393
|
+
"Report disputed deliveries immediately — do not wait days to dispute empty box claims.",
|
|
394
|
+
"Insure high-value shipments and require signature on delivery.",
|
|
395
|
+
],
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
id: "fake_tracking_number",
|
|
399
|
+
category: "logistics_fraud",
|
|
400
|
+
label: "Fake Tracking Number",
|
|
401
|
+
shortDescription: "Seller provides a real-looking tracking number that was created but the package was never handed to the courier.",
|
|
402
|
+
howItHappens: "Seller generates a shipping label (creating a tracking number) but never drops the parcel at the courier. The tracking shows 'label created' indefinitely. Seller claims 'courier hasn't scanned it yet' for days. By the time the buyer escalates, the return window may have passed.",
|
|
403
|
+
howToAvoid: [
|
|
404
|
+
"A tracking number is not proof of shipment — look for the first scan event at a courier facility.",
|
|
405
|
+
"If a tracking number shows only 'label created' after 3 business days, escalate immediately.",
|
|
406
|
+
"Require dispatched tracking (showing actual pickup/facility scan) before confirming receipt.",
|
|
407
|
+
],
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
id: "return_swap_fraud",
|
|
411
|
+
category: "logistics_fraud",
|
|
412
|
+
label: "Return Swap Fraud",
|
|
413
|
+
shortDescription: "Buyer receives genuine item, initiates return, ships back an empty box or damaged substitute to claim refund while keeping the original.",
|
|
414
|
+
howItHappens: "Buyer purchases a valuable item (sealed Pokémon ETB, PSA-graded card). After receiving it, they raise a return request ('not as described'). They ship back an empty box, a fake item, or a damaged similar item. Seller receives a worthless return while the buyer keeps the genuine item and gets a refund.",
|
|
415
|
+
howToAvoid: [
|
|
416
|
+
"Photo and video every item before packing, and photograph the parcel with tracking label visible.",
|
|
417
|
+
"On receiving a return, photograph the unopened return package before opening.",
|
|
418
|
+
"If return contents do not match what was sent, document immediately and escalate to LetItRip support.",
|
|
419
|
+
"For high-value items, add unique identifying marks (invisible ink, specific photo angles) that prove the returned item is yours.",
|
|
420
|
+
],
|
|
421
|
+
},
|
|
422
|
+
];
|
|
423
|
+
// ============================================================================
|
|
424
|
+
// LOOKUP HELPERS
|
|
425
|
+
// ============================================================================
|
|
426
|
+
/** Get a scam type definition by its ID. */
|
|
427
|
+
export function getScamType(id) {
|
|
428
|
+
return SCAM_TYPES.find((t) => t.id === id);
|
|
429
|
+
}
|
|
430
|
+
/** Get all scam types in a given category. */
|
|
431
|
+
export function getScamTypesByCategory(category) {
|
|
432
|
+
return SCAM_TYPES.filter((t) => t.category === category);
|
|
433
|
+
}
|
|
434
|
+
/** Get the category definition for a given scam type ID. */
|
|
435
|
+
export function getCategoryForScamType(scamTypeId) {
|
|
436
|
+
const type = getScamType(scamTypeId);
|
|
437
|
+
if (!type)
|
|
438
|
+
return undefined;
|
|
439
|
+
return SCAM_CATEGORIES.find((c) => c.id === type.category);
|
|
440
|
+
}
|
|
441
|
+
/** Human-readable label map for quick lookups. */
|
|
442
|
+
export const SCAM_TYPE_LABELS = Object.fromEntries(SCAM_TYPES.map((t) => [t.id, t.label]));
|
|
443
|
+
export const SCAM_CATEGORY_LABELS = Object.fromEntries(SCAM_CATEGORIES.map((c) => [c.id, c.label]));
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { BaseRepository, type FirebaseSieveResult, type SieveModel } from "../../../providers/db-firebase";
|
|
2
|
+
import { type ScammerDocument, type ScammerIncidentDocument, type ScammerCommentDocument, type ScammerCreateInput, type ScammerAdminUpdateInput } from "../schemas/firestore";
|
|
3
|
+
declare class ScammerRepository extends BaseRepository<ScammerDocument> {
|
|
4
|
+
constructor();
|
|
5
|
+
static readonly SIEVE_FIELDS: {
|
|
6
|
+
id: {
|
|
7
|
+
canFilter: boolean;
|
|
8
|
+
canSort: boolean;
|
|
9
|
+
};
|
|
10
|
+
status: {
|
|
11
|
+
canFilter: boolean;
|
|
12
|
+
canSort: boolean;
|
|
13
|
+
};
|
|
14
|
+
scamType: {
|
|
15
|
+
canFilter: boolean;
|
|
16
|
+
canSort: boolean;
|
|
17
|
+
};
|
|
18
|
+
scamPlatform: {
|
|
19
|
+
canFilter: boolean;
|
|
20
|
+
canSort: boolean;
|
|
21
|
+
};
|
|
22
|
+
reportedBy: {
|
|
23
|
+
canFilter: boolean;
|
|
24
|
+
canSort: boolean;
|
|
25
|
+
};
|
|
26
|
+
verifiedBy: {
|
|
27
|
+
canFilter: boolean;
|
|
28
|
+
canSort: boolean;
|
|
29
|
+
};
|
|
30
|
+
isContested: {
|
|
31
|
+
canFilter: boolean;
|
|
32
|
+
canSort: boolean;
|
|
33
|
+
};
|
|
34
|
+
views: {
|
|
35
|
+
canFilter: boolean;
|
|
36
|
+
canSort: boolean;
|
|
37
|
+
};
|
|
38
|
+
incidentCount: {
|
|
39
|
+
canFilter: boolean;
|
|
40
|
+
canSort: boolean;
|
|
41
|
+
};
|
|
42
|
+
createdAt: {
|
|
43
|
+
canFilter: boolean;
|
|
44
|
+
canSort: boolean;
|
|
45
|
+
};
|
|
46
|
+
updatedAt: {
|
|
47
|
+
canFilter: boolean;
|
|
48
|
+
canSort: boolean;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
listVerified(model: SieveModel): Promise<FirebaseSieveResult<ScammerDocument>>;
|
|
52
|
+
listAll(model: SieveModel): Promise<FirebaseSieveResult<ScammerDocument>>;
|
|
53
|
+
findBySeoSlug(seoSlug: string): Promise<ScammerDocument | null>;
|
|
54
|
+
create(input: ScammerCreateInput): Promise<ScammerDocument>;
|
|
55
|
+
adminUpdate(id: string, input: ScammerAdminUpdateInput): Promise<void>;
|
|
56
|
+
incrementViews(id: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Search for profiles whose phones, upiIds, emails, or displayNames arrays
|
|
59
|
+
* contain any of the given values. Used for duplicate detection on new reports.
|
|
60
|
+
*/
|
|
61
|
+
findByContactField(field: "phones" | "upiIds" | "emails" | "displayNames", value: string): Promise<ScammerDocument[]>;
|
|
62
|
+
listPublicIncidents(scammerId: string): Promise<ScammerIncidentDocument[]>;
|
|
63
|
+
listPublicComments(scammerId: string): Promise<ScammerCommentDocument[]>;
|
|
64
|
+
findManyById(ids: string[]): Promise<ScammerDocument[]>;
|
|
65
|
+
}
|
|
66
|
+
declare const scammerRepository: ScammerRepository;
|
|
67
|
+
export { ScammerRepository, scammerRepository };
|