@mohasinac/appkit 4.2.0 → 4.3.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/_internal/client/features/layout/navActive.d.ts +17 -0
- package/dist/_internal/client/features/layout/navActive.js +33 -0
- package/dist/_internal/server/features/auth/actions.d.ts +0 -1
- package/dist/_internal/server/features/auth/actions.js +0 -1
- package/dist/_internal/server/features/bundles/data.d.ts +22 -4
- package/dist/_internal/server/features/bundles/data.js +41 -4
- package/dist/_internal/server/features/bundles/index.d.ts +1 -1
- package/dist/_internal/server/features/bundles/index.js +1 -1
- package/dist/_internal/server/features/checkout/actions.js +7 -78
- package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -16
- package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -30
- package/dist/_internal/server/features/orders/adapters.js +1 -14
- package/dist/_internal/server/features/products/actions.js +8 -3
- package/dist/_internal/server/features/products/service.d.ts +15 -0
- package/dist/_internal/server/features/products/service.js +41 -0
- package/dist/_internal/server/functions/firestore.d.ts +3 -1
- package/dist/_internal/server/functions/firestore.js +17 -1
- package/dist/_internal/server/functions/scheduled.d.ts +2 -5
- package/dist/_internal/server/functions/scheduled.js +6 -30
- package/dist/_internal/server/jobs/core/bundleStockSync.js +25 -7
- package/dist/_internal/server/jobs/core/countersReconcile.js +7 -1
- package/dist/_internal/server/jobs/core/index.d.ts +4 -4
- package/dist/_internal/server/jobs/core/index.js +4 -4
- package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.d.ts +19 -0
- package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.js +30 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.d.ts +2 -2
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +2 -2
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.d.ts +20 -0
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +113 -0
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.d.ts +14 -0
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +74 -0
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.d.ts +22 -0
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +68 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +3 -4
- package/dist/_internal/server/jobs/handlers/index.js +8 -6
- package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.d.ts +3 -0
- package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.js +11 -0
- package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.js +2 -0
- package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.d.ts +3 -0
- package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.js +4 -0
- package/dist/_internal/shared/actions/action-registry.js +40 -10
- package/dist/_internal/shared/checkout/rules/_defaults.js +1 -2
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +3 -0
- package/dist/_internal/shared/checkout/rules/_limits.js +3 -0
- package/dist/_internal/shared/checkout/rules/_registry.d.ts +2 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +2 -2
- package/dist/_internal/shared/checkout/rules/classified.rule.js +0 -1
- package/dist/_internal/shared/checkout/rules/index.d.ts +1 -1
- package/dist/_internal/shared/checkout/rules/index.js +1 -1
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +20 -1
- package/dist/_internal/shared/checkout/rules/types.d.ts +17 -7
- package/dist/_internal/shared/features/categories/bundle-copy.d.ts +2 -0
- package/dist/_internal/shared/features/categories/bundle-copy.js +2 -0
- package/dist/_internal/shared/features/categories/bundle-pricing.d.ts +23 -0
- package/dist/_internal/shared/features/categories/bundle-pricing.js +25 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -1
- package/dist/constants/api-endpoints.d.ts +6 -9
- package/dist/constants/api-endpoints.js +5 -5
- package/dist/constants/field-names.d.ts +17 -1
- package/dist/constants/field-names.js +17 -1
- package/dist/features/account/components/UserSidebar.js +21 -9
- package/dist/features/account/hooks/useNotifications.js +5 -0
- package/dist/features/admin/actions/admin-actions.js +6 -0
- package/dist/features/admin/actions/notification-actions.js +1 -2
- package/dist/features/admin/components/AdminBlogEditorView.js +1 -1
- package/dist/features/admin/components/AdminGuideHubView.js +15 -1
- package/dist/features/admin/components/AdminPaymentsGuideView.d.ts +2 -0
- package/dist/features/admin/components/AdminPaymentsGuideView.js +36 -0
- package/dist/features/admin/components/AdminPrizeDrawsView.js +3 -3
- package/dist/features/admin/components/AdminSidebar.js +18 -9
- package/dist/features/admin/components/AdminSiteSettingsView.js +33 -6
- package/dist/features/admin/components/AdminTesterChecklistView.js +74 -22
- package/dist/features/admin/components/AdminWhatsAppGuideView.d.ts +2 -0
- package/dist/features/admin/components/AdminWhatsAppGuideView.js +35 -0
- package/dist/features/admin/hooks/useAdminListing.d.ts +4 -0
- package/dist/features/admin/hooks/useAdminListing.js +4 -2
- package/dist/features/admin/schemas/firestore.d.ts +13 -5
- package/dist/features/admin/schemas/firestore.js +1 -2
- package/dist/features/auctions/actions/bid-actions.js +3 -1
- package/dist/features/auctions/components/AuctionBidsTable.d.ts +6 -1
- package/dist/features/auctions/components/AuctionBidsTable.js +8 -4
- package/dist/features/auctions/components/AuctionDetailPageView.js +10 -13
- package/dist/features/auctions/components/CollapsibleBidHistory.d.ts +23 -2
- package/dist/features/auctions/components/CollapsibleBidHistory.js +22 -3
- package/dist/features/auctions/components/LiveBidPrice.d.ts +19 -0
- package/dist/features/auctions/components/LiveBidPrice.js +17 -0
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -1
- package/dist/features/auctions/components/PlaceBidFormClient.js +16 -1
- package/dist/features/auctions/hooks/useBids.d.ts +33 -0
- package/dist/features/auctions/hooks/useBids.js +32 -0
- package/dist/features/auctions/hooks/useLiveAuctionBid.d.ts +20 -0
- package/dist/features/auctions/hooks/useLiveAuctionBid.js +23 -0
- package/dist/features/auth/checkout-value-otp.d.ts +7 -10
- package/dist/features/auth/checkout-value-otp.js +14 -10
- package/dist/features/auth/server.d.ts +0 -1
- package/dist/features/auth/server.js +0 -1
- package/dist/features/blog/api/[slug]/route.d.ts +5 -0
- package/dist/features/blog/api/[slug]/route.js +12 -3
- package/dist/features/blog/components/BlogPostView.d.ts +2 -0
- package/dist/features/blog/components/BlogPostView.js +5 -4
- package/dist/features/blog/hooks/useBlog.d.ts +2 -0
- package/dist/features/blog/hooks/useBlog.js +2 -0
- package/dist/features/blog/repository/blog.repository.d.ts +7 -0
- package/dist/features/blog/repository/blog.repository.js +44 -0
- package/dist/features/blog/schemas/firestore.d.ts +3 -0
- package/dist/features/blog/schemas/firestore.js +1 -0
- package/dist/features/blog/types/index.d.ts +2 -0
- package/dist/features/cart/components/index.d.ts +0 -2
- package/dist/features/cart/components/index.js +0 -1
- package/dist/features/cart/hooks/useCartCount.js +22 -5
- package/dist/features/cart/hooks/useGuestCart.js +11 -1
- package/dist/features/cart/utils/guest-cart.d.ts +4 -0
- package/dist/features/cart/utils/guest-cart.js +10 -0
- package/dist/features/cart/utils/pending-ops.d.ts +17 -0
- package/dist/features/cart/utils/pending-ops.js +46 -5
- package/dist/features/categories/components/BrandDetailPageView.js +6 -2
- package/dist/features/categories/components/BundleDetailView.js +4 -2
- package/dist/features/categories/components/CategoryDetailPageView.js +10 -2
- package/dist/features/categories/schemas/firestore.d.ts +7 -0
- package/dist/features/checkout/actions/index.d.ts +0 -1
- package/dist/features/checkout/actions/index.js +0 -1
- package/dist/features/checkout/schemas/firestore.d.ts +2 -2
- package/dist/features/events/actions/event-actions.d.ts +2 -0
- package/dist/features/events/actions/event-actions.js +5 -0
- package/dist/features/events/components/EventCard.js +2 -3
- package/dist/features/events/components/RelatedEventsCarousel.d.ts +15 -0
- package/dist/features/events/components/RelatedEventsCarousel.js +13 -0
- package/dist/features/events/components/index.d.ts +2 -0
- package/dist/features/events/components/index.js +1 -0
- package/dist/features/events/repository/events.repository.d.ts +6 -0
- package/dist/features/events/repository/events.repository.js +21 -0
- package/dist/features/history/repository/user-history.repository.d.ts +1 -1
- package/dist/features/history/utils/guest-history.d.ts +1 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +4 -2
- package/dist/features/homepage/components/FeaturedProductsSection.js +2 -2
- package/dist/features/homepage/components/SectionCarousel.js +1 -1
- package/dist/features/homepage/components/WelcomeSection.js +1 -1
- package/dist/features/layout/AppLayoutShell.js +44 -10
- package/dist/features/layout/NavbarLayout.js +1 -1
- package/dist/features/layout/TitleBarLayout.js +2 -2
- package/dist/features/media/MediaVideo.d.ts +7 -0
- package/dist/features/media/MediaVideo.js +36 -5
- package/dist/features/orders/components/OrdersList.js +1 -5
- package/dist/features/orders/schemas/firestore.d.ts +2 -8
- package/dist/features/orders/schemas/index.d.ts +3 -32
- package/dist/features/orders/schemas/index.js +1 -4
- package/dist/features/orders/types/index.d.ts +6 -9
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +2 -1
- package/dist/features/products/actions/product-actions.js +13 -10
- package/dist/features/products/components/MarketplaceBundleCard.d.ts +1 -1
- package/dist/features/products/components/MarketplaceBundleCard.js +7 -4
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
- package/dist/features/products/components/PrizeDrawWinnerMappingView.d.ts +14 -0
- package/dist/features/products/components/PrizeDrawWinnerMappingView.js +37 -0
- package/dist/features/products/components/PrizeRevealModal.d.ts +10 -23
- package/dist/features/products/components/PrizeRevealModal.js +18 -147
- package/dist/features/products/components/ProductDetailPageView.js +72 -30
- package/dist/features/products/components/ProductForm.js +7 -14
- package/dist/features/products/components/ProductGalleryClient.d.ts +10 -1
- package/dist/features/products/components/ProductGalleryClient.js +29 -10
- package/dist/features/products/components/ProductsIndexListing.js +2 -1
- package/dist/features/products/components/RelatedProductsCarousel.js +2 -2
- package/dist/features/products/components/ShowGroupSection.js +2 -2
- package/dist/features/products/components/SublistingCarouselSection.js +1 -1
- package/dist/features/products/components/index.d.ts +4 -2
- package/dist/features/products/components/index.js +1 -0
- package/dist/features/products/constants/action-defs.d.ts +1 -3
- package/dist/features/products/constants/action-defs.js +0 -5
- package/dist/features/products/repository/products.repository.d.ts +6 -0
- package/dist/features/products/repository/products.repository.js +20 -1
- package/dist/features/products/schemas/firestore.d.ts +28 -3
- package/dist/features/products/schemas/index.d.ts +11 -3
- package/dist/features/products/schemas/index.js +10 -2
- package/dist/features/products/types/index.d.ts +2 -1
- package/dist/features/reviews/actions/review-actions.js +1 -0
- package/dist/features/reviews/components/ReviewDetailPageView.js +8 -1
- package/dist/features/reviews/components/ReviewDetailShell.js +2 -1
- package/dist/features/reviews/components/ReviewsList.js +2 -1
- package/dist/features/reviews/schemas/firestore.d.ts +3 -0
- package/dist/features/reviews/schemas/index.d.ts +6 -0
- package/dist/features/reviews/schemas/index.js +2 -0
- package/dist/features/reviews/types/index.d.ts +3 -0
- package/dist/features/scams/actions/scam-actions.d.ts +3 -0
- package/dist/features/scams/actions/scam-actions.js +3 -2
- package/dist/features/scams/components/ScamProfileView.d.ts +2 -1
- package/dist/features/scams/components/ScamProfileView.js +2 -2
- package/dist/features/scams/repository/scammer.repository.d.ts +6 -0
- package/dist/features/scams/repository/scammer.repository.js +24 -0
- package/dist/features/seller/actions/seller-actions.js +8 -0
- package/dist/features/seller/components/SellerPrizeDrawsView.js +4 -0
- package/dist/features/seller/components/SellerSidebar.js +20 -9
- package/dist/features/stores/components/StoreDetailLayoutView.js +6 -6
- package/dist/features/stores/components/StoreGuideHubView.js +7 -1
- package/dist/features/stores/components/StoreNavTabs.d.ts +10 -1
- package/dist/features/stores/components/StoreNavTabs.js +22 -9
- package/dist/features/stores/components/StoreWhatsAppGuideView.d.ts +3 -0
- package/dist/features/stores/components/StoreWhatsAppGuideView.js +12 -0
- package/dist/features/stores/components/index.d.ts +2 -0
- package/dist/features/stores/components/index.js +1 -0
- package/dist/features/tester/actions/index.d.ts +1 -0
- package/dist/features/tester/actions/index.js +1 -0
- package/dist/features/tester/actions/leaderboard-actions.d.ts +3 -0
- package/dist/features/tester/actions/leaderboard-actions.js +5 -0
- package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +26 -4
- package/dist/features/tester/components/AdminTesterFeedbackListView.js +13 -0
- package/dist/features/tester/components/BugHunterLeaderboardView.d.ts +23 -0
- package/dist/features/tester/components/BugHunterLeaderboardView.js +18 -0
- package/dist/features/tester/components/index.d.ts +2 -0
- package/dist/features/tester/components/index.js +1 -0
- package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +12 -1
- package/dist/features/tester/repository/tester-checklist-item.repository.js +80 -0
- package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +4 -0
- package/dist/features/tester/repository/tester-checklist-response.repository.js +4 -0
- package/dist/features/tester/schemas/firestore.d.ts +22 -1
- package/dist/features/tester/schemas/firestore.js +8 -0
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +42 -7
- package/dist/features/tester/seed-data/events-tester-seed-data.js +23 -0
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +69 -31
- package/dist/features/tester/seed-data/products-tester-seed-data.js +154 -9
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +252 -15
- package/dist/features/wishlist/hooks/useGuestWishlist.js +11 -1
- package/dist/features/wishlist/hooks/useWishlistCount.js +16 -2
- package/dist/features/wishlist/utils/guest-wishlist.d.ts +5 -0
- package/dist/features/wishlist/utils/guest-wishlist.js +11 -0
- package/dist/index.d.ts +23 -22
- package/dist/index.js +31 -58
- package/dist/jobs.d.ts +1 -1
- package/dist/jobs.js +2 -2
- package/dist/next/routing/route-map.d.ts +9 -2
- package/dist/next/routing/route-map.js +4 -1
- package/dist/schemas/registry.d.ts +6 -26
- package/dist/seed/bids-seed-data.js +14 -2
- package/dist/seed/blog-posts-seed-data.js +2 -1
- package/dist/seed/categories-seed-data.js +11 -2
- package/dist/seed/events-seed-data.js +11 -11
- package/dist/seed/faq-seed-data.js +5 -1
- package/dist/seed/products-auctions-seed-data.js +2 -2
- package/dist/seed/products-preorders-seed-data.d.ts +2 -1
- package/dist/seed/products-prize-draws-seed-data.js +56 -10
- package/dist/seed/products-standard-seed-data.js +80 -3
- package/dist/seed/scammers-seed-data.js +75 -2
- package/dist/seed/site-settings-seed-data.js +5 -2
- package/dist/server-entry.d.ts +0 -1
- package/dist/server-entry.js +0 -1
- package/dist/server.d.ts +4 -20
- package/dist/server.js +10 -57
- package/dist/styles.css +1 -277
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/BaseListingCard.js +1 -1
- package/dist/ui/components/ImageLightbox.d.ts +9 -0
- package/dist/ui/components/ImageLightbox.js +6 -3
- package/dist/ui/components/ListingToolbar.d.ts +18 -1
- package/dist/ui/components/ListingToolbar.js +5 -2
- package/dist/ui/components/StickyToolbar.js +13 -8
- package/package.json +1 -1
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
* personas (Mock User 11, Mock User 14, Mock User 9), never the store's own seller
|
|
9
9
|
* (user-tyson-blader owns store-beyblade-arena). Status: newest bid per auction is
|
|
10
10
|
* "active", the rest "outbid". Bid IDs: bid-{productSlug}-{userName}-{YYYYMMDD}-{rand6}.
|
|
11
|
+
* L-Drago's ladder is deliberately 13 bids deep (cycling the 3 personas) so the
|
|
12
|
+
* auction detail page's paginated Bid History section (pageSize 5) and the /user/bids
|
|
13
|
+
* dashboard both have real multi-page data to exercise — see CollapsibleBidHistory.tsx.
|
|
11
14
|
*
|
|
12
15
|
* EXPORTS:
|
|
13
16
|
* bidsSeedData — Array of bid documents, one set per seeded auction, counts matching
|
|
@@ -72,18 +75,27 @@ const _rawBidsSeedData = [
|
|
|
72
75
|
currentBid: 3499,
|
|
73
76
|
bidderIds: ["user-rohit-collector", "user-ananya-collector", "user-meera-bey"],
|
|
74
77
|
}),
|
|
75
|
-
// auction-beyblade-metal-lightning-l-drago — bidCount:
|
|
78
|
+
// auction-beyblade-metal-lightning-l-drago — bidCount: 13, currentBid: 3199
|
|
79
|
+
// Deliberately deep ladder (see file header) to exercise Bid History pagination.
|
|
76
80
|
...buildLadder({
|
|
77
81
|
productId: "auction-beyblade-metal-lightning-l-drago",
|
|
78
82
|
productTitle: "Metal Fight Beyblade BB-99 Lightning L-Drago",
|
|
79
83
|
startingBid: 1999,
|
|
80
|
-
currentBid:
|
|
84
|
+
currentBid: 3199,
|
|
81
85
|
bidderIds: [
|
|
82
86
|
"user-meera-bey",
|
|
83
87
|
"user-rohit-collector",
|
|
84
88
|
"user-ananya-collector",
|
|
85
89
|
"user-rohit-collector",
|
|
86
90
|
"user-meera-bey",
|
|
91
|
+
"user-ananya-collector",
|
|
92
|
+
"user-rohit-collector",
|
|
93
|
+
"user-meera-bey",
|
|
94
|
+
"user-ananya-collector",
|
|
95
|
+
"user-rohit-collector",
|
|
96
|
+
"user-meera-bey",
|
|
97
|
+
"user-ananya-collector",
|
|
98
|
+
"user-rohit-collector",
|
|
87
99
|
],
|
|
88
100
|
}),
|
|
89
101
|
];
|
|
@@ -275,7 +275,8 @@ export const blogPostsSeedData = [
|
|
|
275
275
|
title: "10 Tips to Sell Faster on LetItRip",
|
|
276
276
|
slug: "selling-tips-letitrip",
|
|
277
277
|
excerpt: "From photography to pricing to descriptions — proven tactics to make your listings sell faster on LetItRip.",
|
|
278
|
-
content: `<h2>1. Photograph Everything</h2><p>Front, back, edges, corners, holo pattern. Natural light. White background. Minimum 4 photos per listing.</p><h2>2. Price Competitively</h2><p>Check what similar items sold for on LetItRip in the last 30 days. Price 5–10% below the lowest active listing for a fast sale.</p><h2>3. Write Honest Descriptions</h2><p>State the exact condition. Mention every flaw. Buyers trust sellers who are upfront about imperfections — they'll come back.</p><h2>4. Respond to Offers Within 2 Hours</h2><p>Quick responses convert. Buyers often make offers to multiple sellers — the first response wins.</p><h2>5. Ship the Same Day</h2><p>Buyers who receive fast shipping leave 5-star reviews. 5-star reviews bring more buyers. It's a flywheel.</p><h2>6–10</h2><p>Use accurate category tags. Add a YouTube unboxing link. Offer bundle discounts. Cross-reference to your other listings. Keep your store description updated.</p>`,
|
|
278
|
+
content: `<h2>1. Photograph Everything</h2><p>Front, back, edges, corners, holo pattern. Natural light. White background. Minimum 4 photos per listing.</p><h2>2. Price Competitively</h2><p>Check what similar items sold for on LetItRip in the last 30 days. Price 5–10% below the lowest active listing for a fast sale.</p><h2>3. Write Honest Descriptions</h2><p>State the exact condition. Mention every flaw. Buyers trust sellers who are upfront about imperfections — they'll come back.</p><h2>4. Respond to Offers Within 2 Hours</h2><p>Quick responses convert. Buyers often make offers to multiple sellers — the first response wins.</p><h2>5. Ship the Same Day</h2><p>Buyers who receive fast shipping leave 5-star reviews. 5-star reviews bring more buyers. It's a flywheel.</p><h2>6–10</h2><p>Use accurate category tags. Add a YouTube unboxing link (see the video above). Offer bundle discounts. Cross-reference to your other listings. Keep your store description updated.</p>`,
|
|
279
|
+
youtubeId: "dQw4w9WgXcQ",
|
|
279
280
|
category: "tips",
|
|
280
281
|
tags: ["selling", "tips", "photography", "pricing", "seller-guide"],
|
|
281
282
|
isFeatured: false,
|
|
@@ -245,6 +245,7 @@ const bundleRows = [
|
|
|
245
245
|
productIds: ["product-beyblade-original-dranzer-s", "product-beyblade-original-driger-v", "product-beyblade-metal-storm-pegasus"],
|
|
246
246
|
},
|
|
247
247
|
bundleProductIds: ["product-beyblade-original-dranzer-s", "product-beyblade-original-driger-v", "product-beyblade-metal-storm-pegasus"],
|
|
248
|
+
bundleOriginalTotal: 4597, // 1499 + 1799 + 1299
|
|
248
249
|
bundleStockStatus: "in_stock",
|
|
249
250
|
display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-original-collectors-set-20260101/1200/900"), showInFooter: false },
|
|
250
251
|
isActive: true,
|
|
@@ -277,6 +278,7 @@ const bundleRows = [
|
|
|
277
278
|
productIds: ["product-beyblade-metal-storm-pegasus", "product-beyblade-metal-flame-sagittario", "product-beyblade-original-dranzer-s"],
|
|
278
279
|
},
|
|
279
280
|
bundleProductIds: ["product-beyblade-metal-storm-pegasus", "product-beyblade-metal-flame-sagittario", "product-beyblade-original-dranzer-s"],
|
|
281
|
+
bundleOriginalTotal: 3997, // 1299 + 1199 + 1499
|
|
280
282
|
bundleStockStatus: "in_stock",
|
|
281
283
|
display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-metal-fusion-duo-20260101/1200/900"), showInFooter: false },
|
|
282
284
|
isActive: true,
|
|
@@ -303,12 +305,15 @@ const bundleRows = [
|
|
|
303
305
|
description: "Valkyrie and Regalia Genesis — top-tier Burst-era attackers in one set.",
|
|
304
306
|
categoryType: "bundle",
|
|
305
307
|
bundleKind: "special",
|
|
306
|
-
|
|
308
|
+
// Was 3799 — priced ABOVE the 999+1399+1199=3597 member total (no real
|
|
309
|
+
// discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
|
|
310
|
+
bundlePrice: 2899,
|
|
307
311
|
bundleQueryRule: {
|
|
308
312
|
type: "static",
|
|
309
313
|
productIds: ["product-beyblade-burst-valkyrie", "product-beyblade-burst-regalia-genesis", "product-beyblade-metal-flame-sagittario"],
|
|
310
314
|
},
|
|
311
315
|
bundleProductIds: ["product-beyblade-burst-valkyrie", "product-beyblade-burst-regalia-genesis", "product-beyblade-metal-flame-sagittario"],
|
|
316
|
+
bundleOriginalTotal: 3597, // 999 + 1399 + 1199
|
|
312
317
|
bundleStockStatus: "in_stock",
|
|
313
318
|
display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-burst-battlers-pack-20260101/1200/900"), showInFooter: false },
|
|
314
319
|
isActive: true,
|
|
@@ -341,6 +346,7 @@ const bundleRows = [
|
|
|
341
346
|
productIds: ["product-beyblade-x-wizard-arrow", "product-beyblade-x-knife-shinobi", "product-beyblade-burst-valkyrie"],
|
|
342
347
|
},
|
|
343
348
|
bundleProductIds: ["product-beyblade-x-wizard-arrow", "product-beyblade-x-knife-shinobi", "product-beyblade-burst-valkyrie"],
|
|
349
|
+
bundleOriginalTotal: 2847, // 899 + 949 + 999
|
|
344
350
|
bundleStockStatus: "in_stock",
|
|
345
351
|
display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-x-series-starter-20260101/1200/900"), showInFooter: false },
|
|
346
352
|
isActive: true,
|
|
@@ -367,7 +373,9 @@ const bundleRows = [
|
|
|
367
373
|
description: "One top from every Beyblade generation — Original, Metal Fight, Burst, and X — the ultimate collector's starter pack.",
|
|
368
374
|
categoryType: "bundle",
|
|
369
375
|
bundleKind: "special",
|
|
370
|
-
|
|
376
|
+
// Was 5999 — priced ABOVE the 1799+1299+999+899=4996 member total (no
|
|
377
|
+
// real discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
|
|
378
|
+
bundlePrice: 3999,
|
|
371
379
|
bundleQueryRule: {
|
|
372
380
|
type: "static",
|
|
373
381
|
productIds: [
|
|
@@ -383,6 +391,7 @@ const bundleRows = [
|
|
|
383
391
|
"product-beyblade-burst-valkyrie",
|
|
384
392
|
"product-beyblade-x-wizard-arrow",
|
|
385
393
|
],
|
|
394
|
+
bundleOriginalTotal: 4996, // 1799 + 1299 + 999 + 899
|
|
386
395
|
bundleStockStatus: "in_stock",
|
|
387
396
|
display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-every-generation-starter-pack-20260101/1200/900"), showInFooter: false },
|
|
388
397
|
isActive: true,
|
|
@@ -110,7 +110,7 @@ export const eventsSeedData = [
|
|
|
110
110
|
startsAt: daysAgo(3),
|
|
111
111
|
endsAt: daysAhead(14),
|
|
112
112
|
coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-regalia-genesis-raffle-20260101/1200/600"), alt: "Beyblade Burst Regalia Genesis" },
|
|
113
|
-
tags: ["raffle", "burst", "regalia-genesis", "giveaway"],
|
|
113
|
+
tags: ["raffle", "burst", "regalia-genesis", "giveaway", "prizes"],
|
|
114
114
|
hasRaffle: true,
|
|
115
115
|
raffleType: "open_raffle",
|
|
116
116
|
rafflePrize: "Sealed Beyblade Burst Regalia Genesis (authenticity cert: LIR-BEY-998877)",
|
|
@@ -170,22 +170,22 @@ export const eventsSeedData = [
|
|
|
170
170
|
createdAt: daysAgo(12),
|
|
171
171
|
updatedAt: daysAgo(2),
|
|
172
172
|
},
|
|
173
|
-
// ── 7.
|
|
173
|
+
// ── 7. ACTIVE — Offer: Buy 3 Beyblades, Get 10% Off ──────────────────────
|
|
174
174
|
{
|
|
175
175
|
id: "event-buy-3-get-1-beyblades",
|
|
176
176
|
slug: "buy-3-get-1-beyblades",
|
|
177
177
|
type: EVENT_FIELDS.TYPE_VALUES.OFFER,
|
|
178
|
-
title: "Buy 3 Beyblades, Get
|
|
179
|
-
description: "
|
|
180
|
-
status: EVENT_FIELDS.STATUS_VALUES.
|
|
181
|
-
startsAt:
|
|
178
|
+
title: "Buy 3 Beyblades, Get 10% Off",
|
|
179
|
+
description: "Buy any 3 beyblades from Beyblade Arena and get 10% off the total. Applies to original, metal, burst, and X series.",
|
|
180
|
+
status: EVENT_FIELDS.STATUS_VALUES.ACTIVE,
|
|
181
|
+
startsAt: daysAgo(1),
|
|
182
182
|
endsAt: daysAhead(20),
|
|
183
|
-
coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-buy3get1-20260101/1200/600"), alt: "Buy 3 get
|
|
184
|
-
tags: ["offer", "buy-3-get-
|
|
183
|
+
coverImage: { type: "image", url: seedExtMedia("https://picsum.photos/seed/event-cover-buy3get1-20260101/1200/600"), alt: "Buy 3 beyblades, get 10% off offer" },
|
|
184
|
+
tags: ["offer", "buy-3-get-10-percent", "singles"],
|
|
185
185
|
offerConfig: {
|
|
186
|
-
couponId: "coupon-
|
|
187
|
-
displayCode: "
|
|
188
|
-
bannerText: "Buy any 3 beyblades and get
|
|
186
|
+
couponId: "coupon-buynow10",
|
|
187
|
+
displayCode: "BUYNOW10",
|
|
188
|
+
bannerText: "Buy any 3 beyblades from Beyblade Arena and get 10% off the total!",
|
|
189
189
|
},
|
|
190
190
|
stats: { totalEntries: 0, approvedEntries: 0, flaggedEntries: 0 },
|
|
191
191
|
createdBy: "user-admin-letitrip",
|
|
@@ -1224,7 +1224,11 @@ export const faqSeedData = [
|
|
|
1224
1224
|
relatedFAQs: [],
|
|
1225
1225
|
stats: makeStats(210, 10),
|
|
1226
1226
|
seo: { slug: "faq-what-are-procurement-shipments", metaTitle: "Procurement Shipments for Sellers", metaDescription: "How LetItRip's seller procurement shipment tracking tool works." },
|
|
1227
|
-
isActive:
|
|
1227
|
+
// Deliberately isActive:false — every other FAQ in this file (and all 63
|
|
1228
|
+
// previously seeded) was isActive:true, so the admin FAQs dashboard's
|
|
1229
|
+
// isActive toggle (backed by the faqs(isActive, priority ASC) composite
|
|
1230
|
+
// index) had nothing to show when toggled to the inactive branch.
|
|
1231
|
+
isActive: false,
|
|
1228
1232
|
createdBy: "user-admin-letitrip",
|
|
1229
1233
|
createdAt: daysAgo(10),
|
|
1230
1234
|
updatedAt: daysAgo(1),
|
|
@@ -69,10 +69,10 @@ const _rawProductsAuctionsSeedData = [
|
|
|
69
69
|
brand: "Takara-Tomy",
|
|
70
70
|
startingBid: 1999,
|
|
71
71
|
buyItNowPrice: 4499,
|
|
72
|
-
currentBid:
|
|
72
|
+
currentBid: 3199,
|
|
73
73
|
currency: "INR",
|
|
74
74
|
auctionEndDate: new Date(Date.now() + 6 * 24 * 60 * 60 * 1000),
|
|
75
|
-
bidCount:
|
|
75
|
+
bidCount: 13,
|
|
76
76
|
bidsHaveStarted: true,
|
|
77
77
|
isSold: false,
|
|
78
78
|
mainImage: seedExtMedia("https://picsum.photos/seed/auction-image-beyblade-metal-lightning-l-drago-1-20260101/900/900"),
|
|
@@ -112,9 +112,10 @@ export declare const productsPreordersSeedData: {
|
|
|
112
112
|
prizeRevealWindowStart?: Date | undefined;
|
|
113
113
|
prizeRevealWindowEnd?: Date | undefined;
|
|
114
114
|
prizeRevealStatus?: "pending" | "open" | "closed" | undefined;
|
|
115
|
-
|
|
115
|
+
prizeDrawDurationDays?: number | undefined;
|
|
116
116
|
prizeGithubFileUrl?: string | undefined;
|
|
117
117
|
prizeDrawMode?: "reveal" | "lottery" | undefined;
|
|
118
|
+
prizeRevealMode?: "instant" | "scheduled" | undefined;
|
|
118
119
|
lotteryConfig?: import("..").LotteryConfig | undefined;
|
|
119
120
|
shipping?: {
|
|
120
121
|
allowedProviderIds?: string[];
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY: Real (non-tester-sandbox) prize-draw
|
|
3
|
-
*
|
|
4
|
-
* disposable 7-day tester sandbox item. Previously an empty
|
|
5
|
-
* the minimal Beyblade-focused demo catalog" — now populated
|
|
6
|
-
* mystery-box
|
|
7
|
-
* WHAT: Exports
|
|
8
|
-
*
|
|
2
|
+
* WHY: Real (non-tester-sandbox) prize-draw listings so testers and shoppers can exercise
|
|
3
|
+
* both automatic-reveal modes ("instant" and "scheduled") against permanent catalog
|
|
4
|
+
* content, not just the disposable 7-day tester sandbox item. Previously an empty
|
|
5
|
+
* stub — "out of scope for the minimal Beyblade-focused demo catalog" — now populated
|
|
6
|
+
* with two platform-run mystery-box draws, on-theme for the spinning-tops catalog.
|
|
7
|
+
* WHAT: Exports 2 prize-draw listings (classic reveal mode) run by the platform's own
|
|
8
|
+
* store, letitrip-official — one "instant" mode (4 prizes), one "scheduled" mode
|
|
9
|
+
* (2 prizes, small pool for easy manual sellout testing).
|
|
9
10
|
*
|
|
10
11
|
* EXPORTS:
|
|
11
|
-
* productsPrizeDrawsSeedData — Array of
|
|
12
|
+
* productsPrizeDrawsSeedData — Array of 2 Partial<ProductDocument> with listingType:"prize-draw"
|
|
12
13
|
*
|
|
13
14
|
* @tag domain:products,prize-draws
|
|
14
15
|
* @tag layer:seed
|
|
@@ -43,13 +44,14 @@ export const productsPrizeDrawsSeedData = [
|
|
|
43
44
|
storeId: "store-letitrip-official",
|
|
44
45
|
storeName: "LetItRip Official",
|
|
45
46
|
prizeDrawMode: "reveal",
|
|
47
|
+
prizeRevealMode: "instant",
|
|
46
48
|
pricePerEntry: 99,
|
|
47
49
|
prizeMaxEntries: 4,
|
|
48
50
|
prizeCurrentEntries: 0,
|
|
51
|
+
prizeDrawDurationDays: 7,
|
|
49
52
|
prizeRevealWindowStart: new Date("2026-05-01"),
|
|
50
|
-
prizeRevealWindowEnd: new Date("2026-
|
|
53
|
+
prizeRevealWindowEnd: new Date("2026-05-08"),
|
|
51
54
|
prizeRevealStatus: "open",
|
|
52
|
-
prizeRevealDeadlineDays: 7,
|
|
53
55
|
prizeDrawItems: [
|
|
54
56
|
{ itemNumber: 1, title: "Limited-Edition Gold Dranzer S", description: "Rare gold-finish collector's edition.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-1-20260101/600/600")], condition: "new", estimatedValue: 3499, isWon: false },
|
|
55
57
|
{ itemNumber: 2, title: "Beyblade X Starter Set", description: "Full starter set with stadium.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-2-20260101/600/600")], condition: "new", estimatedValue: 1999, isWon: false },
|
|
@@ -66,4 +68,48 @@ export const productsPrizeDrawsSeedData = [
|
|
|
66
68
|
updatedAt: new Date("2026-05-01"),
|
|
67
69
|
searchTokens: buildSearchTokens("Beyblade Mystery Box — Prize Draw", "Buy an entry and reveal your prize instantly.", "Beyblade", "brand-beyblade", ["Spinning Tops"], ["prize-draw", "mystery-box"]),
|
|
68
70
|
},
|
|
71
|
+
{
|
|
72
|
+
id: "prizedraw-beyblade-scheduled-demo",
|
|
73
|
+
slug: "prizedraw-beyblade-scheduled-demo",
|
|
74
|
+
title: "Beyblade Champion's Draw — Prize Draw",
|
|
75
|
+
description: "Two entries, two prizes — the winners are revealed automatically the moment the draw closes (3 days) or sells out, whichever comes first.",
|
|
76
|
+
categorySlugs: ["category-spinning-tops"],
|
|
77
|
+
categoryNames: ["Spinning Tops"],
|
|
78
|
+
brandSlug: "brand-beyblade",
|
|
79
|
+
brand: "Beyblade",
|
|
80
|
+
price: 149,
|
|
81
|
+
currency: "INR",
|
|
82
|
+
stockQuantity: 2,
|
|
83
|
+
availableQuantity: 2,
|
|
84
|
+
isSold: false,
|
|
85
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-scheduled-1-20260101/900/900"),
|
|
86
|
+
images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-scheduled-1-20260101/900/900")],
|
|
87
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
88
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
89
|
+
listingType: "prize-draw",
|
|
90
|
+
storeId: "store-letitrip-official",
|
|
91
|
+
storeName: "LetItRip Official",
|
|
92
|
+
prizeDrawMode: "reveal",
|
|
93
|
+
prizeRevealMode: "scheduled",
|
|
94
|
+
pricePerEntry: 149,
|
|
95
|
+
prizeMaxEntries: 2,
|
|
96
|
+
prizeCurrentEntries: 0,
|
|
97
|
+
prizeDrawDurationDays: 3,
|
|
98
|
+
prizeRevealWindowStart: new Date("2026-05-01"),
|
|
99
|
+
prizeRevealWindowEnd: new Date("2026-05-04"),
|
|
100
|
+
prizeRevealStatus: "open",
|
|
101
|
+
prizeDrawItems: [
|
|
102
|
+
{ itemNumber: 1, title: "Beyblade X Champion Set", description: "Tournament-grade champion set.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-scheduled-1-20260101/600/600")], condition: "new", estimatedValue: 2499, isWon: false },
|
|
103
|
+
{ itemNumber: 2, title: "Spare Tip Multipack", description: "Assorted performance tips.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-scheduled-2-20260101/600/600")], condition: "new", estimatedValue: 299, isWon: false },
|
|
104
|
+
],
|
|
105
|
+
customFields: [],
|
|
106
|
+
customSections: [],
|
|
107
|
+
featured: false,
|
|
108
|
+
isPromoted: false,
|
|
109
|
+
isOnSale: false,
|
|
110
|
+
tags: ["prize-draw", "mystery-box"],
|
|
111
|
+
createdAt: new Date("2026-05-01"),
|
|
112
|
+
updatedAt: new Date("2026-05-01"),
|
|
113
|
+
searchTokens: buildSearchTokens("Beyblade Champion's Draw — Prize Draw", "Two entries, two prizes, revealed automatically at close or sellout.", "Beyblade", "brand-beyblade", ["Spinning Tops"], ["prize-draw", "mystery-box"]),
|
|
114
|
+
},
|
|
69
115
|
];
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* WHY: Seeds a minimal, Beyblade-focused catalog of standard product listings — 2 products per
|
|
3
|
-
* generation (Original, Metal Fight, Burst, X), all from the Beyblade Arena store
|
|
4
|
-
*
|
|
3
|
+
* generation (Original, Metal Fight, Burst, X), all from the Beyblade Arena store, plus
|
|
4
|
+
* 2 video-demo products (one per generation family) so the product gallery's video slide
|
|
5
|
+
* (theater-mode playback, zoom/rotate) has real, playable fixtures to test against.
|
|
6
|
+
* WHAT: Exports 10 standard products with listingType:"standard", covering all 4 generation
|
|
5
7
|
* leaf categories (tagged with both leaf + root category slugs).
|
|
6
8
|
*
|
|
7
9
|
* EXPORTS:
|
|
8
|
-
* productsStandardSeedData — Array of
|
|
10
|
+
* productsStandardSeedData — Array of 10 standard products with listingType:"standard"
|
|
9
11
|
*
|
|
10
12
|
* @tag domain:products,catalog
|
|
11
13
|
* @tag layer:seed
|
|
@@ -51,6 +53,7 @@ const _rawProductsStandardSeedData = [
|
|
|
51
53
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
52
54
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.LIKE_NEW,
|
|
53
55
|
featured: true,
|
|
56
|
+
tags: ["attack-type"],
|
|
54
57
|
storeId: "store-beyblade-arena",
|
|
55
58
|
storeName: "Beyblade Arena",
|
|
56
59
|
createdAt: new Date("2026-04-10"),
|
|
@@ -79,6 +82,7 @@ const _rawProductsStandardSeedData = [
|
|
|
79
82
|
],
|
|
80
83
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
81
84
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.GOOD,
|
|
85
|
+
tags: ["vintage-collectible"],
|
|
82
86
|
storeId: "store-beyblade-arena",
|
|
83
87
|
storeName: "Beyblade Arena",
|
|
84
88
|
createdAt: new Date("2026-04-12"),
|
|
@@ -109,6 +113,7 @@ const _rawProductsStandardSeedData = [
|
|
|
109
113
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
110
114
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
111
115
|
featured: true,
|
|
116
|
+
tags: ["attack-type"],
|
|
112
117
|
storeId: "store-beyblade-arena",
|
|
113
118
|
storeName: "Beyblade Arena",
|
|
114
119
|
createdAt: new Date("2026-04-14"),
|
|
@@ -137,6 +142,7 @@ const _rawProductsStandardSeedData = [
|
|
|
137
142
|
],
|
|
138
143
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
139
144
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
145
|
+
tags: ["balance-type", "tournament-grade"],
|
|
140
146
|
storeId: "store-beyblade-arena",
|
|
141
147
|
storeName: "Beyblade Arena",
|
|
142
148
|
createdAt: new Date("2026-04-16"),
|
|
@@ -167,6 +173,7 @@ const _rawProductsStandardSeedData = [
|
|
|
167
173
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
168
174
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
169
175
|
featured: true,
|
|
176
|
+
tags: ["attack-type", "starter-set"],
|
|
170
177
|
storeId: "store-beyblade-arena",
|
|
171
178
|
storeName: "Beyblade Arena",
|
|
172
179
|
createdAt: new Date("2026-04-18"),
|
|
@@ -195,6 +202,7 @@ const _rawProductsStandardSeedData = [
|
|
|
195
202
|
],
|
|
196
203
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
197
204
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
205
|
+
tags: ["attack-type"],
|
|
198
206
|
storeId: "store-beyblade-arena",
|
|
199
207
|
storeName: "Beyblade Arena",
|
|
200
208
|
createdAt: new Date("2026-04-20"),
|
|
@@ -225,6 +233,7 @@ const _rawProductsStandardSeedData = [
|
|
|
225
233
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
226
234
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
227
235
|
featured: true,
|
|
236
|
+
tags: ["attack-type", "starter-set"],
|
|
228
237
|
storeId: "store-beyblade-arena",
|
|
229
238
|
storeName: "Beyblade Arena",
|
|
230
239
|
createdAt: new Date("2026-04-22"),
|
|
@@ -253,11 +262,79 @@ const _rawProductsStandardSeedData = [
|
|
|
253
262
|
],
|
|
254
263
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
255
264
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
265
|
+
tags: ["balance-type", "tournament-grade"],
|
|
256
266
|
storeId: "store-beyblade-arena",
|
|
257
267
|
storeName: "Beyblade Arena",
|
|
258
268
|
createdAt: new Date("2026-04-24"),
|
|
259
269
|
updatedAt: new Date("2026-05-04"),
|
|
260
270
|
},
|
|
271
|
+
// ===== Video-demo fixtures — real playable video field for gallery testing =====
|
|
272
|
+
{
|
|
273
|
+
id: "product-beyblade-original-dragoon-f-video-demo",
|
|
274
|
+
slug: "product-beyblade-original-dragoon-f-video-demo",
|
|
275
|
+
barcodeId: "LIR-BEY-VID-001",
|
|
276
|
+
title: "Beyblade Original — Dragoon F (Video Demo)",
|
|
277
|
+
description: "Dragoon F attack-type top from the original series. Listed with an unboxing/spin video for gallery testing.",
|
|
278
|
+
categorySlugs: ["category-beyblade-original", "category-spinning-tops"],
|
|
279
|
+
categoryNames: ["Beyblade Original", "Spinning Tops"],
|
|
280
|
+
brandSlug: "brand-beyblade",
|
|
281
|
+
brand: "Beyblade",
|
|
282
|
+
price: 1599,
|
|
283
|
+
currency: "INR",
|
|
284
|
+
stockQuantity: 5,
|
|
285
|
+
availableQuantity: 5,
|
|
286
|
+
isSold: false,
|
|
287
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dragoon-f-video-demo-1-20260819/900/900"),
|
|
288
|
+
images: [
|
|
289
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dragoon-f-video-demo-1-20260819/900/900"),
|
|
290
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dragoon-f-video-demo-2-20260819/900/900"),
|
|
291
|
+
],
|
|
292
|
+
video: {
|
|
293
|
+
url: "https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
|
|
294
|
+
thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-original-dragoon-f-video-demo-20260819/800/450"),
|
|
295
|
+
duration: 15,
|
|
296
|
+
},
|
|
297
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
298
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
299
|
+
tags: ["vintage-collectible"],
|
|
300
|
+
storeId: "store-beyblade-arena",
|
|
301
|
+
storeName: "Beyblade Arena",
|
|
302
|
+
createdAt: new Date("2026-08-19"),
|
|
303
|
+
updatedAt: new Date("2026-08-19"),
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
id: "product-beyblade-x-dran-sword-video-demo",
|
|
307
|
+
slug: "product-beyblade-x-dran-sword-video-demo",
|
|
308
|
+
barcodeId: "LIR-BEY-VID-002",
|
|
309
|
+
title: "Beyblade X BX-02 Dran Sword (Video Demo)",
|
|
310
|
+
description: "Dran Sword 3-60F attack-type top from the Beyblade X Xtreme Gear generation. Listed with a battle-test video for gallery testing.",
|
|
311
|
+
categorySlugs: ["category-beyblade-x", "category-spinning-tops"],
|
|
312
|
+
categoryNames: ["Beyblade X", "Spinning Tops"],
|
|
313
|
+
brandSlug: "brand-takara-tomy",
|
|
314
|
+
brand: "Takara-Tomy",
|
|
315
|
+
price: 949,
|
|
316
|
+
currency: "INR",
|
|
317
|
+
stockQuantity: 8,
|
|
318
|
+
availableQuantity: 8,
|
|
319
|
+
isSold: false,
|
|
320
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-dran-sword-video-demo-1-20260819/900/900"),
|
|
321
|
+
images: [
|
|
322
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-dran-sword-video-demo-1-20260819/900/900"),
|
|
323
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-dran-sword-video-demo-2-20260819/900/900"),
|
|
324
|
+
],
|
|
325
|
+
video: {
|
|
326
|
+
url: "https://storage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
|
|
327
|
+
thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-x-dran-sword-video-demo-20260819/800/450"),
|
|
328
|
+
duration: 20,
|
|
329
|
+
},
|
|
330
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
331
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
332
|
+
tags: ["attack-type", "tournament-grade"],
|
|
333
|
+
storeId: "store-beyblade-arena",
|
|
334
|
+
storeName: "Beyblade Arena",
|
|
335
|
+
createdAt: new Date("2026-08-19"),
|
|
336
|
+
updatedAt: new Date("2026-08-19"),
|
|
337
|
+
},
|
|
261
338
|
];
|
|
262
339
|
export const productsStandardSeedData = [
|
|
263
340
|
..._rawProductsStandardSeedData.map((p) => withTokens({
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY: Seeds scammer profiles for the collectibles marketplace —
|
|
3
|
-
*
|
|
2
|
+
* WHY: Seeds scammer profiles for the collectibles marketplace — 5 profiles covering the full status workflow
|
|
3
|
+
* plus real fixtures for the "related scammer profiles" feature (2026-08-19).
|
|
4
|
+
* WHAT: 3 verified, 1 pending_review, 1 rejected. Fictional Beyblade-related scam scenarios.
|
|
5
|
+
* Profiles #1 and #4 share scamType "advance_payment_ghost" (verified "Similar Scam Reports"
|
|
6
|
+
* discovery). Profiles #4 and #5 cross-link via relatedScammerIds (verified "Related Profiles" —
|
|
7
|
+
* same operator, two aliases) — deliberately NOT linked to #1, since #1 is a different person
|
|
8
|
+
* who happens to use the same scam pattern, not the same identity.
|
|
4
9
|
*
|
|
5
10
|
* EXPORTS:
|
|
6
11
|
* scammersSeedData — Array of Partial<ScammerDocument> for seed runner
|
|
@@ -116,4 +121,72 @@ export const scammersSeedData = [
|
|
|
116
121
|
createdAt: daysAgo(15),
|
|
117
122
|
updatedAt: daysAgo(8),
|
|
118
123
|
},
|
|
124
|
+
// ── 4. Verified — advance payment ghost (same scamType as #1, different person) ──
|
|
125
|
+
{
|
|
126
|
+
id: "scammer-fake-metal-fusion-preorder-agent",
|
|
127
|
+
seoSlug: "scammer-fake-metal-fusion-preorder-agent",
|
|
128
|
+
displayNames: ["MetalFusion_PreorderAgent", "MF Beyblade Imports"],
|
|
129
|
+
phones: ["9123456780"],
|
|
130
|
+
upiIds: ["mfpreorderagent@ybl"],
|
|
131
|
+
emails: ["mf.preorder.agent@gmail.com"],
|
|
132
|
+
socialMedia: [
|
|
133
|
+
{ platform: "whatsapp", handle: "9123456780" },
|
|
134
|
+
],
|
|
135
|
+
scamType: "advance_payment_ghost",
|
|
136
|
+
scamPlatform: "whatsapp",
|
|
137
|
+
description: "Ran a WhatsApp broadcast offering a bulk import batch of Metal Fight Beyblade tops at below-market prices, collecting ₹650 'booking' advances via UPI before shipping. Went silent after payment. Same operator resurfaced days later under a backup Telegram account (see related profile) using an identical script.",
|
|
138
|
+
amountLost: 650,
|
|
139
|
+
itemInvolved: "Metal Fight Beyblade BB-43 Flame Sagittario — bulk import batch",
|
|
140
|
+
evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-mf-preorder-agent-chat-20260420/800/600")],
|
|
141
|
+
reportedBy: "user-seto-kaiba",
|
|
142
|
+
reportedByAnon: false,
|
|
143
|
+
status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,
|
|
144
|
+
verifiedBy: "user-admin-letitrip",
|
|
145
|
+
verifiedAt: daysAgo(10),
|
|
146
|
+
verificationNote: "Confirmed via chat logs; UPI/phone pattern matches the linked backup-account profile.",
|
|
147
|
+
relatedScammerIds: ["scammer-fake-metal-fusion-backup-account"],
|
|
148
|
+
mergedFromIds: [],
|
|
149
|
+
tags: ["repeat_offender"],
|
|
150
|
+
views: 58,
|
|
151
|
+
incidentCount: 0,
|
|
152
|
+
commentCount: 0,
|
|
153
|
+
contestCount: 0,
|
|
154
|
+
isContested: false,
|
|
155
|
+
createdAt: daysAgo(18),
|
|
156
|
+
updatedAt: daysAgo(10),
|
|
157
|
+
},
|
|
158
|
+
// ── 5. Verified — same operator as #4 under a backup alias ────────────────────
|
|
159
|
+
{
|
|
160
|
+
id: "scammer-fake-metal-fusion-backup-account",
|
|
161
|
+
seoSlug: "scammer-fake-metal-fusion-backup-account",
|
|
162
|
+
displayNames: ["MF_Backup_Store", "MetalFusion Backup"],
|
|
163
|
+
phones: ["9123456781"],
|
|
164
|
+
upiIds: ["mfbackupstore@oksbi"],
|
|
165
|
+
emails: [],
|
|
166
|
+
socialMedia: [
|
|
167
|
+
{ platform: "telegram", handle: "mf_backup_store" },
|
|
168
|
+
],
|
|
169
|
+
scamType: "advance_payment_ghost",
|
|
170
|
+
scamPlatform: "telegram",
|
|
171
|
+
description: "Same scammer as MetalFusion_PreorderAgent, resurfaced under a backup Telegram account after the WhatsApp profile went cold. Identical advance-payment script, this time for a Storm Pegasus import batch.",
|
|
172
|
+
amountLost: 400,
|
|
173
|
+
itemInvolved: "Metal Fight Beyblade BB-28 Storm Pegasus — bulk import batch",
|
|
174
|
+
evidence: [],
|
|
175
|
+
reportedBy: "user-yugi-muto",
|
|
176
|
+
reportedByAnon: false,
|
|
177
|
+
status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,
|
|
178
|
+
verifiedBy: "user-admin-letitrip",
|
|
179
|
+
verifiedAt: daysAgo(9),
|
|
180
|
+
verificationNote: "Same operator as scammer-fake-metal-fusion-preorder-agent — profiles linked, not merged (both kept for evidence trail).",
|
|
181
|
+
relatedScammerIds: ["scammer-fake-metal-fusion-preorder-agent"],
|
|
182
|
+
mergedFromIds: [],
|
|
183
|
+
tags: ["repeat_offender"],
|
|
184
|
+
views: 22,
|
|
185
|
+
incidentCount: 0,
|
|
186
|
+
commentCount: 0,
|
|
187
|
+
contestCount: 0,
|
|
188
|
+
isContested: false,
|
|
189
|
+
createdAt: daysAgo(9),
|
|
190
|
+
updatedAt: daysAgo(9),
|
|
191
|
+
},
|
|
119
192
|
];
|
package/dist/server-entry.d.ts
CHANGED
|
@@ -63,7 +63,6 @@ export { getSearchResults, searchAction, type SearchQuery, } from "./_internal/s
|
|
|
63
63
|
export { getCategoryForDetail, listRootCategories, listFeaturedCategories, listMenuCategories, getCategoryTree, listSitemapCategories, CATEGORIES_PAGE_SIZE, CATEGORIES_ROOT_TIER, CATEGORIES_MAX_DEPTH, CATEGORIES_SITEMAP_LIMIT, CATEGORIES_FEATURED_LIMIT, CATEGORIES_MENU_LIMIT, } from "./_internal/server/features/categories/index";
|
|
64
64
|
export { getGroupedListingForDetail, getGroupedListingWithItems, listGroupedListings, listFeaturedGroupedListings, listSitemapGroupedListings, GROUPED_LISTINGS_PAGE_SIZE, GROUPED_LISTINGS_FEATURED_LIMIT, GROUPED_LISTINGS_SITEMAP_LIMIT, type GroupedListingWithItems, type ListGroupedListingsParams, type SitemapGroupedListing, } from "./_internal/server/features/grouped/index";
|
|
65
65
|
export { createCheckoutOrderAction, attachPaymentAction, verifyAndPlaceRazorpayOrderAction, formatShippingAddress, CHECKOUT_DEFAULT_COMMISSIONS, CHECKOUT_PAYMENT_METHODS, type CreateCheckoutOrderInput, type VerifyAndPlaceRazorpayOrderInput, type CheckoutOrderResult, type CheckoutPaymentMethod, } from "./_internal/server/features/checkout/index";
|
|
66
|
-
export { grantAdminCheckoutBypass } from "./features/checkout/server";
|
|
67
66
|
export { processRefundAction, type ProcessRefundInput, } from "./_internal/server/features/refunds/actions";
|
|
68
67
|
export { createPaymentIntentAction, verifyPaymentSignatureAction, resolvePaymentFee, PAYMENTS_DEFAULT_PLATFORM_FEE_PERCENT, PAYMENTS_DEFAULT_GST_PERCENT, PAYMENTS_RECEIPT_PREFIX, type CreatePaymentIntentInput, type CreatePaymentIntentResult, type VerifyPaymentSignatureInput, type ResolvedPaymentFee, } from "./_internal/server/features/payments/index";
|
|
69
68
|
export { getSublistingCategoryForDetail } from "./_internal/server/features/sublisting-categories/index";
|
package/dist/server-entry.js
CHANGED
|
@@ -91,7 +91,6 @@ export { getGroupedListingForDetail, getGroupedListingWithItems, listGroupedList
|
|
|
91
91
|
// `.listByType("bundle", opts)` / `.findById(id)` directly.
|
|
92
92
|
// S4: checkout actions
|
|
93
93
|
export { createCheckoutOrderAction, attachPaymentAction, verifyAndPlaceRazorpayOrderAction, formatShippingAddress, CHECKOUT_DEFAULT_COMMISSIONS, CHECKOUT_PAYMENT_METHODS, } from "./_internal/server/features/checkout/index";
|
|
94
|
-
export { grantAdminCheckoutBypass } from "./features/checkout/server";
|
|
95
94
|
// S-SBUNI-RULES: refund action
|
|
96
95
|
export { processRefundAction, } from "./_internal/server/features/refunds/actions";
|
|
97
96
|
// S4: payments actions
|
package/dist/server.d.ts
CHANGED
|
@@ -197,33 +197,19 @@ export { bidsGET } from "./features/auctions/server";
|
|
|
197
197
|
export { getBidById } from "./features/auctions/server";
|
|
198
198
|
export { listBidsByProduct } from "./features/auctions/server";
|
|
199
199
|
export { placeBid } from "./features/auctions/server";
|
|
200
|
-
export {
|
|
201
|
-
export { CONSENT_OTP_EXPIRY_MINUTES } from "./features/auth/server";
|
|
202
|
-
export { CONSENT_OTP_EXPIRY_MS } from "./features/auth/server";
|
|
203
|
-
export { CONSENT_OTP_MAX_ATTEMPTS } from "./features/auth/server";
|
|
204
|
-
export { CONSENT_OTP_MAX_BYPASS_CREDITS } from "./features/auth/server";
|
|
205
|
-
export { CONSENT_OTP_VERIFY_RATE_LIMIT } from "./features/auth/server";
|
|
200
|
+
export { CHECKOUT_VALUE_OTP_VERIFY_RATE_LIMIT } from "./features/auth/checkout-value-otp";
|
|
206
201
|
export { authMeGET } from "./features/auth/server";
|
|
207
|
-
export { buildConsentOtpEmail } from "./features/auth/server";
|
|
208
|
-
export { consentOtpRateLimitRef } from "./features/auth/server";
|
|
209
|
-
export { consentOtpRef } from "./features/auth/server";
|
|
210
202
|
export { createPasswordResetToken } from "./features/auth/server";
|
|
211
203
|
export { createVerificationToken } from "./features/auth/server";
|
|
212
204
|
export { deleteToken } from "./features/auth/server";
|
|
213
|
-
export { enforceConsentOtpRateLimit } from "./features/auth/server";
|
|
214
|
-
export { generateOtpCode } from "./features/auth/server";
|
|
215
205
|
export { generateToken } from "./features/auth/server";
|
|
216
206
|
export { getPublicUserProfile } from "./features/auth/server";
|
|
217
207
|
export { getProfileStoreProducts } from "./features/auth/server";
|
|
218
208
|
export { getSellerReviews } from "./features/auth/server";
|
|
219
209
|
export { getUserProfile } from "./features/auth/server";
|
|
220
210
|
export { getUserSessions } from "./features/auth/server";
|
|
221
|
-
export { hashOtp } from "./features/auth/server";
|
|
222
211
|
export { issueRealtimeToken } from "./features/auth/server";
|
|
223
212
|
export { markPasswordResetTokenAsUsed } from "./features/auth/server";
|
|
224
|
-
export { patchConsentOtp } from "./features/auth/server";
|
|
225
|
-
export { readConsentOtp } from "./features/auth/server";
|
|
226
|
-
export { saveConsentOtp } from "./features/auth/server";
|
|
227
213
|
export { updateUserProfile } from "./features/auth/server";
|
|
228
214
|
export { verifyEmailToken } from "./features/auth/server";
|
|
229
215
|
export { verifyPasswordResetToken } from "./features/auth/server";
|
|
@@ -260,10 +246,6 @@ export { listBrandCategories } from "./features/categories/server";
|
|
|
260
246
|
export { listCategories } from "./features/categories/server";
|
|
261
247
|
export { listTopLevelCategories } from "./features/categories/server";
|
|
262
248
|
export { updateCategory } from "./features/categories/server";
|
|
263
|
-
export { grantCheckoutConsentViaSms } from "./features/checkout/server";
|
|
264
|
-
export { sendCheckoutConsentOtp } from "./features/checkout/server";
|
|
265
|
-
export { verifyCheckoutConsentOtp } from "./features/checkout/server";
|
|
266
|
-
export { grantAdminCheckoutBypass } from "./features/checkout/server";
|
|
267
249
|
export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
|
|
268
250
|
export { EmailButton, EmailColumn, EmailContainer, EmailDivider, EmailDoc, EmailFooter, EmailHeader, EmailImage, EmailLink, EmailRow, } from "./features/email";
|
|
269
251
|
export type { EmailButtonProps, EmailColumnProps, EmailContainerProps, EmailDividerProps, EmailDocProps, EmailFooterProps, EmailHeaderProps, EmailImageProps, EmailLinkProps, EmailRowProps, EmailTone, } from "./features/email";
|
|
@@ -285,8 +267,10 @@ export { enterEvent } from "./features/events/server";
|
|
|
285
267
|
export { eventIdGET } from "./features/events/server";
|
|
286
268
|
export { eventsGET } from "./features/events/server";
|
|
287
269
|
export { getEventLeaderboard } from "./features/events/server";
|
|
270
|
+
export { getBugHunterLeaderboard } from "./features/tester/server";
|
|
288
271
|
export { getPublicEventById } from "./features/events/server";
|
|
289
272
|
export { listPublicEvents } from "./features/events/server";
|
|
273
|
+
export { getRelatedEvents } from "./features/events/server";
|
|
290
274
|
export { updateEvent } from "./features/events/server";
|
|
291
275
|
export { triggerEventRaffleAction, assignSpinPrizeAction, } from "./_internal/server/features/raffle/actions";
|
|
292
276
|
export { processRefundAction, type ProcessRefundInput, } from "./_internal/server/features/refunds/actions";
|
|
@@ -503,7 +487,7 @@ export type { GoogleReview, GoogleReviewsResult } from "./features/homepage/lib/
|
|
|
503
487
|
export { GoogleReviewsSection } from "./features/homepage/components/GoogleReviewsSection";
|
|
504
488
|
export type { GoogleReviewsSectionProps } from "./features/homepage/components/GoogleReviewsSection";
|
|
505
489
|
export { getProductForDetail, listSitemapProducts, type SitemapProduct } from "./_internal/server/features/products/index";
|
|
506
|
-
export { getBundleForDetail, listBundleMembers, listFeaturedBundles, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, type BundleDataOptions, type BundleMetadataOptions, type BundleOgData, } from "./_internal/server/features/bundles/index";
|
|
490
|
+
export { getBundleForDetail, listBundleMembers, listFeaturedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, type BundleDataOptions, type BundleMetadataOptions, type BundleOgData, } from "./_internal/server/features/bundles/index";
|
|
507
491
|
export { getAuctionForDetail, getProductFeaturesForAuction } from "./_internal/server/features/auctions/index";
|
|
508
492
|
export { getPreOrderForDetail, getProductFeaturesForPreOrder } from "./_internal/server/features/pre-orders/index";
|
|
509
493
|
export { getStoreForDetail, listStoreProductsInitial, listStoreAuctionsInitial, listStorePreOrdersInitial, listSitemapStores } from "./_internal/server/features/stores/index";
|