@mohasinac/appkit 4.1.0 → 4.1.3
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/maintenance/index.d.ts +2 -0
- package/dist/_internal/client/features/maintenance/index.js +1 -0
- package/dist/_internal/client/features/maintenance/views/CloudLogsListView.d.ts +9 -0
- package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +55 -0
- package/dist/_internal/server/features/auctions/index.d.ts +1 -1
- package/dist/_internal/server/features/auctions/index.js +1 -1
- package/dist/_internal/server/features/auctions/service.js +2 -2
- package/dist/_internal/server/features/maintenance/cloud-logs-data.d.ts +50 -0
- package/dist/_internal/server/features/maintenance/cloud-logs-data.js +152 -0
- package/dist/_internal/server/jobs/core/onOrderCreate.d.ts +4 -12
- package/dist/_internal/server/jobs/core/onOrderCreate.js +3 -3
- package/dist/_internal/server/jobs/core/onProductWrite.js +14 -2
- package/dist/_internal/shared/features/auctions/config.d.ts +1 -1
- package/dist/_internal/shared/features/auctions/config.js +1 -1
- package/dist/_internal/shared/features/auctions/schema.js +1 -1
- package/dist/_internal/shared/features/cart/schema.js +2 -2
- package/dist/_internal/shared/features/events/schema.js +1 -1
- package/dist/_internal/shared/features/orders/schema.js +1 -1
- package/dist/_internal/shared/features/products/schema.js +3 -3
- package/dist/_internal/shared/features/promotions/schema.js +3 -3
- package/dist/_internal/shared/fees/calculator.d.ts +6 -7
- package/dist/client.d.ts +4 -4
- package/dist/client.js +4 -2
- package/dist/constants/api-endpoints.d.ts +9 -6
- package/dist/constants/api-endpoints.js +3 -2
- package/dist/contracts/client-payment-gateway.d.ts +1 -2
- package/dist/features/about/components/AboutView.d.ts +6 -16
- package/dist/features/about/components/AboutView.js +3 -3
- package/dist/features/about/index.d.ts +2 -1
- package/dist/features/about/schemas/firestore.d.ts +47 -0
- package/dist/features/about/schemas/firestore.js +6 -0
- package/dist/features/about/schemas/index.d.ts +210 -0
- package/dist/features/about/schemas/index.js +45 -0
- package/dist/features/account/hooks/useProfile.js +3 -0
- package/dist/features/admin/components/AdminCarouselGroupEditorView.d.ts +6 -0
- package/dist/features/admin/components/AdminCarouselGroupEditorView.js +50 -0
- package/dist/features/admin/components/AdminCartsView.js +16 -3
- package/dist/features/admin/components/AdminCouponEditorView.js +2 -2
- package/dist/features/admin/components/AdminCouponsView.js +14 -4
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -42
- package/dist/features/admin/components/AdminMediaView.js +1 -1
- package/dist/features/admin/components/AdminNotificationsView.js +31 -19
- package/dist/features/admin/components/AdminOrdersView.js +7 -0
- package/dist/features/admin/components/AdminPayoutsView.js +18 -3
- package/dist/features/admin/components/AdminProductsView.js +17 -2
- package/dist/features/admin/components/AdminReviewsView.js +16 -2
- package/dist/features/admin/components/AdminScammersView.js +7 -0
- package/dist/features/admin/components/AdminSectionsView.js +4 -0
- package/dist/features/admin/components/AdminSiteConfigGuideView.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +44 -2
- package/dist/features/admin/components/AdminStoreEditorView.d.ts +2 -1
- package/dist/features/admin/components/AdminStoreEditorView.js +4 -4
- package/dist/features/admin/components/AdminStoresView.js +1 -1
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +23 -5
- package/dist/features/admin/components/AdminSupportTicketsView.js +20 -2
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +4 -1
- package/dist/features/admin/components/AdminTesterChecklistView.js +8 -0
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +55 -41
- package/dist/features/admin/constants/filter-tabs.js +55 -27
- package/dist/features/admin/schemas/firestore.d.ts +5 -0
- package/dist/features/auctions/actions/bid-actions.js +1 -1
- package/dist/features/auctions/components/AuctionDetailPageView.js +2 -2
- package/dist/features/auctions/components/AuctionsListView.js +8 -1
- package/dist/features/auth/components/LoginForm.js +2 -2
- package/dist/features/auth/components/RegisterForm.js +2 -2
- package/dist/features/auth/permissions/constants.d.ts +16 -0
- package/dist/features/auth/permissions/constants.js +53 -0
- package/dist/features/auth/schemas/firestore.js +1 -0
- package/dist/features/blog/components/BlogFilters.js +1 -1
- package/dist/features/cart/schemas/firestore.d.ts +1 -1
- package/dist/features/categories/schemas/firestore.d.ts +1 -1
- package/dist/features/consultation/components/ConsultationForm.js +1 -1
- package/dist/features/events/components/EventFilters.js +2 -0
- package/dist/features/homepage/components/WelcomeSection.js +2 -2
- package/dist/features/layout/TitleBarLayout.d.ts +2 -2
- package/dist/features/layout/TitleBarLayout.js +4 -4
- package/dist/features/media/AvatarUpload.js +7 -3
- package/dist/features/media/MediaVideo.js +1 -1
- package/dist/features/media/finalize.d.ts +9 -13
- package/dist/features/media/finalize.js +23 -74
- package/dist/features/media/server.d.ts +1 -1
- package/dist/features/media/server.js +1 -1
- package/dist/features/orders/hooks/useOrders.js +16 -4
- package/dist/features/orders/schemas/firestore.d.ts +5 -5
- package/dist/features/payments/schemas/firestore.d.ts +2 -2
- package/dist/features/pre-orders/components/PreOrdersListView.js +7 -0
- package/dist/features/products/components/ArtStickersListView.js +5 -0
- package/dist/features/products/components/ProductDetailPageView.d.ts +7 -1
- package/dist/features/products/components/ProductForm.js +14 -1
- package/dist/features/products/components/ProductsIndexPageView.js +7 -0
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/schemas/firestore.d.ts +1 -1
- package/dist/features/products/schemas/product-templates.d.ts +1 -1
- package/dist/features/products/types/index.d.ts +4 -0
- package/dist/features/scams/schemas/index.js +2 -2
- package/dist/features/search/components/Search.js +3 -3
- package/dist/features/seller/components/SellerAuctionsView.js +27 -2
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutsView.js +24 -10
- package/dist/features/seller/components/SellerPreOrdersView.js +12 -4
- package/dist/features/seller/components/SellerPrizeDrawsView.js +23 -5
- package/dist/features/seller/components/SellerProductShell.d.ts +2 -0
- package/dist/features/seller/components/SellerProductShell.js +1 -1
- package/dist/features/seller/components/SellerProductsView.js +8 -6
- package/dist/features/seller/components/SellerReviewsView.js +27 -6
- package/dist/features/seller/components/index.d.ts +0 -2
- package/dist/features/seller/components/index.js +0 -1
- package/dist/features/stores/components/StoreListingsGuideView.js +2 -1
- package/dist/features/stores/components/StoreProductsView.js +1 -1
- package/dist/features/stores/schemas/firestore.d.ts +11 -0
- package/dist/features/stores/schemas/firestore.js +5 -0
- package/dist/features/stores/schemas/index.d.ts +2 -2
- package/dist/features/tester/actions/checklist-item-actions.d.ts +6 -0
- package/dist/features/tester/actions/checklist-item-actions.js +2 -0
- package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +13 -2
- package/dist/features/tester/components/AdminTesterFeedbackListView.js +2 -1
- package/dist/features/tester/components/AdminTesterFeedbackReportView.js +9 -5
- package/dist/features/tester/components/TesterHubView.js +34 -21
- package/dist/features/tester/repository/tester-checklist-item.repository.js +1 -0
- package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +18 -4
- package/dist/features/tester/repository/tester-checklist-response.repository.js +43 -8
- package/dist/features/tester/schemas/firestore.d.ts +8 -3
- package/dist/features/tester/schemas/firestore.js +6 -0
- package/dist/features/tester/seed-data/bids-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/bids-tester-seed-data.js +37 -0
- package/dist/features/tester/seed-data/coupons-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/coupons-tester-seed-data.js +76 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.js +50 -2
- package/dist/features/tester/seed-data/index.d.ts +3 -0
- package/dist/features/tester/seed-data/index.js +3 -0
- package/dist/features/tester/seed-data/orders-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +265 -0
- package/dist/features/tester/seed-data/products-tester-seed-data.js +213 -8
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +294 -12
- package/dist/features/tester/utils/phases.d.ts +31 -0
- package/dist/features/tester/utils/phases.js +46 -0
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +1 -1
- package/dist/features/whatsapp-bot/types/index.d.ts +1 -1
- package/dist/features/wishlist/types/index.d.ts +3 -0
- package/dist/index.d.ts +11 -4
- package/dist/index.js +15 -7
- package/dist/next/api/routeHandler.js +6 -10
- package/dist/next/components/NotFoundView.js +2 -1
- package/dist/next/routing/route-map.d.ts +4 -12
- package/dist/next/routing/route-map.js +2 -4
- package/dist/providers/db-firebase/admin.d.ts +1 -0
- package/dist/providers/db-firebase/admin.js +1 -1
- package/dist/schemas/registry.d.ts +2 -2
- package/dist/seed/addresses-seed-data.js +18 -18
- package/dist/seed/bids-seed-data.js +4 -4
- package/dist/seed/blog-posts-seed-data.js +82 -82
- package/dist/seed/carousel-slides-seed-data.js +14 -10
- package/dist/seed/carousels-seed-data.js +3 -3
- package/dist/seed/cart-seed-data.js +92 -92
- package/dist/seed/claimed-coupons-seed-data.js +10 -10
- package/dist/seed/conversations-seed-data.js +75 -75
- package/dist/seed/coupon-usage-seed-data.js +12 -12
- package/dist/seed/coupons-seed-data.js +41 -41
- package/dist/seed/events-seed-data.js +105 -105
- package/dist/seed/grouped-listings-seed-data.d.ts +2 -137
- package/dist/seed/grouped-listings-seed-data.js +79 -143
- package/dist/seed/history-seed-data.js +38 -38
- package/dist/seed/homepage-sections-seed-data.js +9 -9
- package/dist/seed/index.d.ts +1 -1
- package/dist/seed/index.js +1 -1
- package/dist/seed/manifest.js +4 -4
- package/dist/seed/notifications-seed-data.js +56 -56
- package/dist/seed/offers-seed-data.js +91 -91
- package/dist/seed/orders-seed-data.js +125 -106
- package/dist/seed/payouts-seed-data.js +42 -42
- package/dist/seed/products-auctions-seed-data.js +10 -2
- package/dist/seed/products-classifieds-seed-data.js +48 -5
- package/dist/seed/products-digital-codes-seed-data.js +48 -5
- package/dist/seed/products-live-items-seed-data.js +6 -1
- package/dist/seed/products-prize-draws-seed-data.js +58 -5
- package/dist/seed/products-standard-seed-data.js +40 -8
- package/dist/seed/reviews-seed-data.js +42 -23
- package/dist/seed/scammers-seed-data.js +22 -22
- package/dist/seed/sessions-seed-data.js +7 -7
- package/dist/seed/shipments-seed-data.js +10 -10
- package/dist/seed/site-settings-seed-data.js +82 -0
- package/dist/seed/store-addresses-seed-data.js +2 -2
- package/dist/seed/store-extensions-seed-data.js +93 -93
- package/dist/seed/stores-seed-data.js +2 -0
- package/dist/seed/support-tickets-seed-data.js +47 -47
- package/dist/seed/users-seed-data.js +55 -89
- package/dist/seed/wishlists-seed-data.js +22 -22
- package/dist/server.d.ts +2 -1
- package/dist/server.js +5 -5
- package/dist/styles.css +1 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/PageLoader.js +8 -3
- package/dist/ui/components/Select.d.ts +8 -1
- package/dist/ui/components/Select.js +2 -2
- package/dist/ui/components/SiteMark.d.ts +23 -0
- package/dist/ui/components/SiteMark.js +76 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -0
- package/dist/validation/schemas.d.ts +0 -2
- package/dist/validation/schemas.js +0 -2
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +27 -19
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY:
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* WHY: Real (non-tester-sandbox) classified listing so testers and shoppers can exercise
|
|
3
|
+
* the classified contact-seller flow (no checkout, chat/phone only) against permanent
|
|
4
|
+
* catalog content. Previously an empty stub — "out of scope for the minimal
|
|
5
|
+
* Beyblade-focused demo catalog" — now populated with one seller-run local listing.
|
|
6
|
+
* WHAT: Exports 1 classified listing on Beyblade Arena — local meetup, negotiable.
|
|
5
7
|
*
|
|
6
8
|
* EXPORTS:
|
|
7
|
-
* productsClassifiedsSeedData —
|
|
9
|
+
* productsClassifiedsSeedData — Array of 1 Partial<ProductDocument> with listingType:"classified"
|
|
8
10
|
*
|
|
9
11
|
* @tag domain:products,classifieds
|
|
10
12
|
* @tag layer:seed
|
|
@@ -13,4 +15,45 @@
|
|
|
13
15
|
* @tag consumers:seed/index.ts,seed/runner.ts
|
|
14
16
|
* @tag sideEffects:none
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
import { PRODUCT_FIELDS } from "../constants/field-names";
|
|
19
|
+
import { buildSearchTokens } from "../utils/search-tokens";
|
|
20
|
+
import { seedExtMedia } from "./_helpers/media";
|
|
21
|
+
export const productsClassifiedsSeedData = [
|
|
22
|
+
{
|
|
23
|
+
id: "classified-beyblade-stadium-set",
|
|
24
|
+
slug: "classified-beyblade-stadium-set",
|
|
25
|
+
title: "Used Beyblade Stadium Set — Local Pickup Only",
|
|
26
|
+
description: "Well-loved Beyblade stadium with 6 tops and 2 launchers, sold as-is. Meet up locally or arrange your own shipping — price is negotiable.",
|
|
27
|
+
categorySlugs: ["category-spinning-tops"],
|
|
28
|
+
categoryNames: ["Spinning Tops"],
|
|
29
|
+
brandSlug: "brand-beyblade",
|
|
30
|
+
brand: "Beyblade",
|
|
31
|
+
price: 1200,
|
|
32
|
+
currency: "INR",
|
|
33
|
+
stockQuantity: 1,
|
|
34
|
+
availableQuantity: 1,
|
|
35
|
+
isSold: false,
|
|
36
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/classified-image-beyblade-stadium-set-1-20260101/900/900"),
|
|
37
|
+
images: [seedExtMedia("https://picsum.photos/seed/classified-image-beyblade-stadium-set-1-20260101/900/900")],
|
|
38
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
39
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.USED,
|
|
40
|
+
listingType: "classified",
|
|
41
|
+
storeId: "store-beyblade-arena",
|
|
42
|
+
storeName: "Beyblade Arena",
|
|
43
|
+
classified: {
|
|
44
|
+
meetupArea: { city: "Mumbai", locality: "Andheri West", pincode: "400058" },
|
|
45
|
+
contactMethod: "both",
|
|
46
|
+
acceptsShipping: false,
|
|
47
|
+
negotiable: true,
|
|
48
|
+
},
|
|
49
|
+
customFields: [],
|
|
50
|
+
customSections: [],
|
|
51
|
+
featured: false,
|
|
52
|
+
isPromoted: false,
|
|
53
|
+
isOnSale: false,
|
|
54
|
+
tags: ["classified", "local-pickup"],
|
|
55
|
+
createdAt: new Date("2026-05-05"),
|
|
56
|
+
updatedAt: new Date("2026-05-05"),
|
|
57
|
+
searchTokens: buildSearchTokens("Used Beyblade Stadium Set — Local Pickup Only", "Well-loved Beyblade stadium with 6 tops and 2 launchers.", "Beyblade", "brand-beyblade", ["Spinning Tops"], ["classified", "local-pickup"]),
|
|
58
|
+
},
|
|
59
|
+
];
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY:
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* WHY: Real (non-tester-sandbox) digital-code listing so testers and shoppers can exercise
|
|
3
|
+
* the auto-claim digital delivery flow against permanent catalog content. Previously an
|
|
4
|
+
* empty stub — "out of scope for the minimal Beyblade-focused demo catalog" — now
|
|
5
|
+
* populated with one companion-app unlock code, on-theme for the spinning-tops catalog.
|
|
6
|
+
* WHAT: Exports 1 digital-code listing on Beyblade Arena — auto-claim delivery.
|
|
5
7
|
*
|
|
6
8
|
* EXPORTS:
|
|
7
|
-
* productsDigitalCodesSeedData —
|
|
9
|
+
* productsDigitalCodesSeedData — Array of 1 Partial<ProductDocument> with listingType:"digital-code"
|
|
8
10
|
*
|
|
9
11
|
* @tag domain:products,digital-codes
|
|
10
12
|
* @tag layer:seed
|
|
@@ -13,4 +15,45 @@
|
|
|
13
15
|
* @tag consumers:seed/index.ts,seed/runner.ts
|
|
14
16
|
* @tag sideEffects:none
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
import { PRODUCT_FIELDS } from "../constants/field-names";
|
|
19
|
+
import { buildSearchTokens } from "../utils/search-tokens";
|
|
20
|
+
import { seedExtMedia } from "./_helpers/media";
|
|
21
|
+
export const productsDigitalCodesSeedData = [
|
|
22
|
+
{
|
|
23
|
+
id: "digitalcode-beyblade-x-app-unlock",
|
|
24
|
+
slug: "digitalcode-beyblade-x-app-unlock",
|
|
25
|
+
title: "Beyblade X Companion App — Premium Unlock Code",
|
|
26
|
+
description: "Digital unlock code for the Beyblade X companion app's premium tournament tracker and battle-log features. Delivered instantly after payment.",
|
|
27
|
+
categorySlugs: ["category-spinning-tops"],
|
|
28
|
+
categoryNames: ["Spinning Tops"],
|
|
29
|
+
brandSlug: "brand-takara-tomy",
|
|
30
|
+
brand: "Takara-Tomy",
|
|
31
|
+
price: 199,
|
|
32
|
+
currency: "INR",
|
|
33
|
+
stockQuantity: 25,
|
|
34
|
+
availableQuantity: 25,
|
|
35
|
+
isSold: false,
|
|
36
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/digitalcode-image-beyblade-x-app-unlock-1-20260101/900/900"),
|
|
37
|
+
images: [seedExtMedia("https://picsum.photos/seed/digitalcode-image-beyblade-x-app-unlock-1-20260101/900/900")],
|
|
38
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
39
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
40
|
+
listingType: "digital-code",
|
|
41
|
+
storeId: "store-beyblade-arena",
|
|
42
|
+
storeName: "Beyblade Arena",
|
|
43
|
+
digitalCode: {
|
|
44
|
+
codeDeliveryMethod: "auto-claim",
|
|
45
|
+
codePoolSize: 25,
|
|
46
|
+
codesAvailable: 25,
|
|
47
|
+
redemptionInstructions: "Open the Beyblade X companion app, go to Settings → Redeem Code, and enter your code to unlock premium features.",
|
|
48
|
+
},
|
|
49
|
+
customFields: [],
|
|
50
|
+
customSections: [],
|
|
51
|
+
featured: false,
|
|
52
|
+
isPromoted: false,
|
|
53
|
+
isOnSale: false,
|
|
54
|
+
tags: ["digital-code", "app-unlock"],
|
|
55
|
+
createdAt: new Date("2026-05-05"),
|
|
56
|
+
updatedAt: new Date("2026-05-05"),
|
|
57
|
+
searchTokens: buildSearchTokens("Beyblade X Companion App — Premium Unlock Code", "Digital unlock code for the Beyblade X companion app.", "Takara-Tomy", "brand-takara-tomy", ["Spinning Tops"], ["digital-code", "app-unlock"]),
|
|
58
|
+
},
|
|
59
|
+
];
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY:
|
|
2
|
+
* WHY: `listingType: "live"` is schema-specific to animals/plants (ProductLiveItemMeta:
|
|
3
|
+
* species, ageMonths, sex, jurisdictionAllowed, vendor verification, CITES permit) —
|
|
4
|
+
* genuinely inapplicable to this catalog's spinning-tops/collectibles theme, so left
|
|
5
|
+
* deliberately empty in the real seed rather than forcing a nonsensical example.
|
|
6
|
+
* Testers can still exercise the live-item buyer flow against the disposable
|
|
7
|
+
* tester-sandbox fixture in appkit/src/features/tester/seed-data/products-tester-seed-data.ts.
|
|
3
8
|
* WHAT: Exports an empty array — kept as a stub so seed/index.ts and the seed API route's
|
|
4
9
|
* SEED_DATA_MAP.products concatenation keep working without a code change elsewhere.
|
|
5
10
|
*
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY:
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* WHY: Real (non-tester-sandbox) prize-draw listing so testers and shoppers can exercise
|
|
3
|
+
* the prize-draw buy → reveal flow against permanent catalog content, not just the
|
|
4
|
+
* disposable 7-day tester sandbox item. Previously an empty stub — "out of scope for
|
|
5
|
+
* the minimal Beyblade-focused demo catalog" — now populated with one platform-run
|
|
6
|
+
* mystery-box draw, on-theme for the spinning-tops catalog.
|
|
7
|
+
* WHAT: Exports 1 prize-draw listing (classic reveal mode, 4 prizes) run by the platform's
|
|
8
|
+
* own store, letitrip-official.
|
|
5
9
|
*
|
|
6
10
|
* EXPORTS:
|
|
7
|
-
* productsPrizeDrawsSeedData —
|
|
11
|
+
* productsPrizeDrawsSeedData — Array of 1 Partial<ProductDocument> with listingType:"prize-draw"
|
|
8
12
|
*
|
|
9
13
|
* @tag domain:products,prize-draws
|
|
10
14
|
* @tag layer:seed
|
|
@@ -13,4 +17,53 @@
|
|
|
13
17
|
* @tag consumers:seed/index.ts,seed/runner.ts
|
|
14
18
|
* @tag sideEffects:none
|
|
15
19
|
*/
|
|
16
|
-
|
|
20
|
+
import { PRODUCT_FIELDS } from "../constants/field-names";
|
|
21
|
+
import { buildSearchTokens } from "../utils/search-tokens";
|
|
22
|
+
import { seedExtMedia } from "./_helpers/media";
|
|
23
|
+
export const productsPrizeDrawsSeedData = [
|
|
24
|
+
{
|
|
25
|
+
id: "prizedraw-beyblade-mystery-box",
|
|
26
|
+
slug: "prizedraw-beyblade-mystery-box",
|
|
27
|
+
title: "Beyblade Mystery Box — Prize Draw",
|
|
28
|
+
description: "Buy an entry for ₹99 and reveal your prize instantly — win anything from a rare limited-edition Beyblade down to a spare launcher grip. 4 prizes available, revealed on a first-come basis.",
|
|
29
|
+
categorySlugs: ["category-spinning-tops"],
|
|
30
|
+
categoryNames: ["Spinning Tops"],
|
|
31
|
+
brandSlug: "brand-beyblade",
|
|
32
|
+
brand: "Beyblade",
|
|
33
|
+
price: 99,
|
|
34
|
+
currency: "INR",
|
|
35
|
+
stockQuantity: 4,
|
|
36
|
+
availableQuantity: 4,
|
|
37
|
+
isSold: false,
|
|
38
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-mystery-box-1-20260101/900/900"),
|
|
39
|
+
images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-beyblade-mystery-box-1-20260101/900/900")],
|
|
40
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
41
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
42
|
+
listingType: "prize-draw",
|
|
43
|
+
storeId: "store-letitrip-official",
|
|
44
|
+
storeName: "LetItRip Official",
|
|
45
|
+
prizeDrawMode: "reveal",
|
|
46
|
+
pricePerEntry: 99,
|
|
47
|
+
prizeMaxEntries: 4,
|
|
48
|
+
prizeCurrentEntries: 0,
|
|
49
|
+
prizeRevealWindowStart: new Date("2026-05-01"),
|
|
50
|
+
prizeRevealWindowEnd: new Date("2026-12-31"),
|
|
51
|
+
prizeRevealStatus: "open",
|
|
52
|
+
prizeRevealDeadlineDays: 7,
|
|
53
|
+
prizeDrawItems: [
|
|
54
|
+
{ 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
|
+
{ 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 },
|
|
56
|
+
{ itemNumber: 3, title: "Spare Parts Bundle", description: "Assorted spare tips, rings, and drivers.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-3-20260101/600/600")], condition: "new", estimatedValue: 399, isWon: false },
|
|
57
|
+
{ itemNumber: 4, title: "Spare Launcher Grip", description: "Standard replacement launcher grip.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-beyblade-4-20260101/600/600")], condition: "new", estimatedValue: 149, isWon: false },
|
|
58
|
+
],
|
|
59
|
+
customFields: [],
|
|
60
|
+
customSections: [],
|
|
61
|
+
featured: false,
|
|
62
|
+
isPromoted: true,
|
|
63
|
+
isOnSale: false,
|
|
64
|
+
tags: ["prize-draw", "mystery-box"],
|
|
65
|
+
createdAt: new Date("2026-05-01"),
|
|
66
|
+
updatedAt: new Date("2026-05-01"),
|
|
67
|
+
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
|
+
},
|
|
69
|
+
];
|
|
@@ -43,7 +43,11 @@ const _rawProductsStandardSeedData = [
|
|
|
43
43
|
availableQuantity: 4,
|
|
44
44
|
isSold: false,
|
|
45
45
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900"),
|
|
46
|
-
images: [
|
|
46
|
+
images: [
|
|
47
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900"),
|
|
48
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-2-20260101/900/900"),
|
|
49
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-3-20260101/900/900"),
|
|
50
|
+
],
|
|
47
51
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
48
52
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.LIKE_NEW,
|
|
49
53
|
featured: true,
|
|
@@ -68,7 +72,11 @@ const _rawProductsStandardSeedData = [
|
|
|
68
72
|
availableQuantity: 2,
|
|
69
73
|
isSold: false,
|
|
70
74
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900"),
|
|
71
|
-
images: [
|
|
75
|
+
images: [
|
|
76
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900"),
|
|
77
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-2-20260101/900/900"),
|
|
78
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-3-20260101/900/900"),
|
|
79
|
+
],
|
|
72
80
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
73
81
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.GOOD,
|
|
74
82
|
storeId: "store-beyblade-arena",
|
|
@@ -93,7 +101,11 @@ const _rawProductsStandardSeedData = [
|
|
|
93
101
|
availableQuantity: 6,
|
|
94
102
|
isSold: false,
|
|
95
103
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900"),
|
|
96
|
-
images: [
|
|
104
|
+
images: [
|
|
105
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900"),
|
|
106
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-2-20260101/900/900"),
|
|
107
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-3-20260101/900/900"),
|
|
108
|
+
],
|
|
97
109
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
98
110
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
99
111
|
featured: true,
|
|
@@ -118,7 +130,11 @@ const _rawProductsStandardSeedData = [
|
|
|
118
130
|
availableQuantity: 3,
|
|
119
131
|
isSold: false,
|
|
120
132
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900"),
|
|
121
|
-
images: [
|
|
133
|
+
images: [
|
|
134
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900"),
|
|
135
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-2-20260101/900/900"),
|
|
136
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-3-20260101/900/900"),
|
|
137
|
+
],
|
|
122
138
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
123
139
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
124
140
|
storeId: "store-beyblade-arena",
|
|
@@ -143,7 +159,11 @@ const _rawProductsStandardSeedData = [
|
|
|
143
159
|
availableQuantity: 10,
|
|
144
160
|
isSold: false,
|
|
145
161
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900"),
|
|
146
|
-
images: [
|
|
162
|
+
images: [
|
|
163
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900"),
|
|
164
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-2-20260101/900/900"),
|
|
165
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-3-20260101/900/900"),
|
|
166
|
+
],
|
|
147
167
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
148
168
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
149
169
|
featured: true,
|
|
@@ -168,7 +188,11 @@ const _rawProductsStandardSeedData = [
|
|
|
168
188
|
availableQuantity: 5,
|
|
169
189
|
isSold: false,
|
|
170
190
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900"),
|
|
171
|
-
images: [
|
|
191
|
+
images: [
|
|
192
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900"),
|
|
193
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-2-20260101/900/900"),
|
|
194
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-3-20260101/900/900"),
|
|
195
|
+
],
|
|
172
196
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
173
197
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
174
198
|
storeId: "store-beyblade-arena",
|
|
@@ -193,7 +217,11 @@ const _rawProductsStandardSeedData = [
|
|
|
193
217
|
availableQuantity: 12,
|
|
194
218
|
isSold: false,
|
|
195
219
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900"),
|
|
196
|
-
images: [
|
|
220
|
+
images: [
|
|
221
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900"),
|
|
222
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-2-20260101/900/900"),
|
|
223
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-3-20260101/900/900"),
|
|
224
|
+
],
|
|
197
225
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
198
226
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
199
227
|
featured: true,
|
|
@@ -218,7 +246,11 @@ const _rawProductsStandardSeedData = [
|
|
|
218
246
|
availableQuantity: 7,
|
|
219
247
|
isSold: false,
|
|
220
248
|
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900"),
|
|
221
|
-
images: [
|
|
249
|
+
images: [
|
|
250
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900"),
|
|
251
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-2-20260101/900/900"),
|
|
252
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-3-20260101/900/900"),
|
|
253
|
+
],
|
|
222
254
|
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
223
255
|
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
224
256
|
storeId: "store-beyblade-arena",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY: Seeds product reviews from buyers across
|
|
3
|
-
* WHAT: Exports 65 reviews spread across
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* WHY: Seeds product reviews from buyers across the Beyblade catalog on the marketplace.
|
|
3
|
+
* WHAT: Exports 65 reviews spread across the 14 real Beyblade products. Ratings 3–5 stars, mix
|
|
4
|
+
* of verified/unverified. Seller responses on ~16 reviews. Images (1-3, seedExtMedia
|
|
5
|
+
* picsum) on ~11 reviews; a video (raw external mp4 + seedExtMedia thumbnail) on 5 reviews.
|
|
6
6
|
*
|
|
7
7
|
* EXPORTS:
|
|
8
8
|
* reviewsSeedData — Array of 65 review documents
|
|
@@ -14,8 +14,13 @@
|
|
|
14
14
|
* @tag consumers:seed/index.ts,seed/runner.ts
|
|
15
15
|
* @tag sideEffects:none
|
|
16
16
|
*/
|
|
17
|
+
import { seedExtMedia } from "./_helpers/media";
|
|
17
18
|
const NOW = new Date();
|
|
18
19
|
const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
|
|
20
|
+
// Public, direct-playable sample MP4 — review.video.url renders through a raw
|
|
21
|
+
// <video src> element (ReviewDetailShell.tsx), NOT the /api/media/ext image
|
|
22
|
+
// proxy, so it must stay an unwrapped external URL (never seedExtMedia()).
|
|
23
|
+
const SAMPLE_VIDEO_URL = "https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"; // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
|
|
19
24
|
const reviewTemplates = [
|
|
20
25
|
{ title: "Excellent quality and fast shipping!", comment: "Received exactly as described. Item is in perfect condition. Will buy again!", rating: 5 },
|
|
21
26
|
{ title: "Good condition, minor wear", comment: "Arrived safely but has slight edge wear. Still happy with the purchase overall.", rating: 4 },
|
|
@@ -49,26 +54,27 @@ const sellerReplies = [
|
|
|
49
54
|
"We appreciate the honest feedback. We'll look into the packaging issue.",
|
|
50
55
|
];
|
|
51
56
|
const products = [
|
|
52
|
-
{ id: "
|
|
53
|
-
{ id: "
|
|
54
|
-
{ id: "
|
|
55
|
-
{ id: "
|
|
56
|
-
{ id: "
|
|
57
|
-
{ id: "
|
|
58
|
-
{ id: "product-
|
|
59
|
-
{ id: "product-
|
|
60
|
-
{ id: "product-
|
|
61
|
-
{ id: "product-
|
|
62
|
-
{ id: "product-
|
|
63
|
-
{ id: "product-
|
|
64
|
-
{ id: "product-
|
|
65
|
-
{ id: "product-
|
|
66
|
-
{ id: "product-kaiba-figure-15cm", title: "Kaiba 15cm Figure", store: "store-kaiba-corp-cards" },
|
|
57
|
+
{ id: "auction-beyblade-original-dragoon-storm", title: "Beyblade Original Dragoon Storm", store: "store-beyblade-arena" },
|
|
58
|
+
{ id: "auction-beyblade-metal-lightning-l-drago", title: "Beyblade Metal Lightning L-Drago", store: "store-beyblade-arena" },
|
|
59
|
+
{ id: "classified-beyblade-stadium-set", title: "Beyblade Stadium Set", store: "store-beyblade-arena" },
|
|
60
|
+
{ id: "digitalcode-beyblade-x-app-unlock", title: "Beyblade X App Unlock Code", store: "store-beyblade-arena" },
|
|
61
|
+
{ id: "preorder-beyblade-x-bx-08-wave", title: "Beyblade X BX-08 Wave", store: "store-beyblade-arena" },
|
|
62
|
+
{ id: "prizedraw-beyblade-mystery-box", title: "Beyblade Mystery Box", store: "store-letitrip-official" },
|
|
63
|
+
{ id: "product-beyblade-original-dranzer-s", title: "Beyblade Original Dranzer S", store: "store-beyblade-arena" },
|
|
64
|
+
{ id: "product-beyblade-original-driger-v", title: "Beyblade Original Driger V", store: "store-beyblade-arena" },
|
|
65
|
+
{ id: "product-beyblade-metal-storm-pegasus", title: "Beyblade Metal Storm Pegasus", store: "store-beyblade-arena" },
|
|
66
|
+
{ id: "product-beyblade-metal-flame-sagittario", title: "Beyblade Metal Flame Sagittario", store: "store-beyblade-arena" },
|
|
67
|
+
{ id: "product-beyblade-burst-valkyrie", title: "Beyblade Burst Valkyrie", store: "store-beyblade-arena" },
|
|
68
|
+
{ id: "product-beyblade-burst-regalia-genesis", title: "Beyblade Burst Regalia Genesis", store: "store-beyblade-arena" },
|
|
69
|
+
{ id: "product-beyblade-x-wizard-arrow", title: "Beyblade X Wizard Arrow", store: "store-beyblade-arena" },
|
|
70
|
+
{ id: "product-beyblade-x-knife-shinobi", title: "Beyblade X Knife Shinobi", store: "store-beyblade-arena" },
|
|
67
71
|
];
|
|
68
72
|
const buyers = [
|
|
69
|
-
{ id: "user-yugi-muto", name: "
|
|
70
|
-
{ id: "user-admin-letitrip", name: "
|
|
71
|
-
{ id: "user-seto-kaiba", name: "
|
|
73
|
+
{ id: "user-yugi-muto", name: "Mock User 3" },
|
|
74
|
+
{ id: "user-admin-letitrip", name: "Mock User 1" },
|
|
75
|
+
{ id: "user-seto-kaiba", name: "Mock User 2" },
|
|
76
|
+
{ id: "user-meera-bey", name: "Mock User 11" },
|
|
77
|
+
{ id: "user-rohit-collector", name: "Mock User 14" },
|
|
72
78
|
];
|
|
73
79
|
const _rawReviewsSeedData = [];
|
|
74
80
|
for (let i = 0; i < 65; i++) {
|
|
@@ -77,7 +83,11 @@ for (let i = 0; i < 65; i++) {
|
|
|
77
83
|
const buyer = buyers[i % buyers.length];
|
|
78
84
|
const daysAgoCreated = 90 - i;
|
|
79
85
|
const hasSellerReply = i % 4 === 0;
|
|
86
|
+
// ~17% of reviews ("detailed" ones) carry buyer-submitted photos.
|
|
80
87
|
const hasImage = i % 6 === 0;
|
|
88
|
+
const imageCount = (i % 3) + 1;
|
|
89
|
+
// A smaller handful (5 of 65) also carry an unboxing/battle-test video.
|
|
90
|
+
const hasVideo = i % 13 === 0;
|
|
81
91
|
_rawReviewsSeedData.push({
|
|
82
92
|
id: `review-${i + 1}`,
|
|
83
93
|
productId: product.id,
|
|
@@ -88,8 +98,17 @@ for (let i = 0; i < 65; i++) {
|
|
|
88
98
|
rating: template.rating,
|
|
89
99
|
title: template.title,
|
|
90
100
|
comment: template.comment,
|
|
91
|
-
images: hasImage
|
|
101
|
+
images: hasImage
|
|
102
|
+
? Array.from({ length: imageCount }, (_, n) => seedExtMedia(`https://picsum.photos/seed/review-image-${product.id}-${i + 1}-${n + 1}/800/800`))
|
|
103
|
+
: [],
|
|
92
104
|
hasImages: hasImage,
|
|
105
|
+
video: hasVideo
|
|
106
|
+
? {
|
|
107
|
+
url: SAMPLE_VIDEO_URL,
|
|
108
|
+
thumbnailUrl: seedExtMedia(`https://picsum.photos/seed/review-video-thumb-${product.id}-${i + 1}/800/450`),
|
|
109
|
+
duration: 18 + (i % 5) * 6,
|
|
110
|
+
}
|
|
111
|
+
: undefined,
|
|
93
112
|
verified: i % 3 !== 2,
|
|
94
113
|
status: "approved",
|
|
95
114
|
helpfulCount: Math.floor(Math.random() * 20),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY: Seeds scammer profiles for
|
|
3
|
-
* WHAT: 1 verified, 1 pending_review, 1 rejected. Fictional
|
|
2
|
+
* WHY: Seeds scammer profiles for the collectibles marketplace — 3 profiles covering the full status workflow.
|
|
3
|
+
* WHAT: 1 verified, 1 pending_review, 1 rejected. Fictional Beyblade-related scam scenarios.
|
|
4
4
|
*
|
|
5
5
|
* EXPORTS:
|
|
6
6
|
* scammersSeedData — Array of Partial<ScammerDocument> for seed runner
|
|
@@ -21,20 +21,20 @@ export const scammersSeedData = [
|
|
|
21
21
|
{
|
|
22
22
|
id: "scammer-fake-lob-seller",
|
|
23
23
|
seoSlug: "scammer-fake-lob-seller",
|
|
24
|
-
displayNames: ["
|
|
24
|
+
displayNames: ["Bey_King_India", "Rare Blades Official"],
|
|
25
25
|
phones: ["9876543210", "8765432109"],
|
|
26
|
-
upiIds: ["9876543210@paytm", "
|
|
27
|
-
emails: ["
|
|
26
|
+
upiIds: ["9876543210@paytm", "beykingblades@okicici"],
|
|
27
|
+
emails: ["beykingblades.fake@gmail.com"],
|
|
28
28
|
socialMedia: [
|
|
29
|
-
{ platform: "instagram", handle: "
|
|
29
|
+
{ platform: "instagram", handle: "bey_king_india_official", url: "https://instagram.com/bey_king_india_official" },
|
|
30
30
|
{ platform: "whatsapp", handle: "9876543210" },
|
|
31
31
|
],
|
|
32
32
|
scamType: "advance_payment_ghost",
|
|
33
33
|
scamPlatform: "whatsapp",
|
|
34
|
-
description: "Seller listed
|
|
35
|
-
amountLost:
|
|
36
|
-
itemInvolved: "
|
|
37
|
-
evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-
|
|
34
|
+
description: "Seller listed an original-series Dranzer S sealed launcher set on a Facebook group for ₹2,500 — significantly below market. When I messaged, he asked for ₹500 advance to 'hold' the set before shipping. After I paid via UPI (9876543210@paytm), he went silent. The account name on UPI matched 'Bey King'. Later found 2 more people in the same group who had the same experience with the same UPI ID.",
|
|
35
|
+
amountLost: 500,
|
|
36
|
+
itemInvolved: "Beyblade Original Dranzer S — Sealed Launcher Set",
|
|
37
|
+
evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-beyking-chat-screenshot-20260402/800/600")],
|
|
38
38
|
reportedBy: "user-yugi-muto",
|
|
39
39
|
reportedByAnon: false,
|
|
40
40
|
status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,
|
|
@@ -54,21 +54,21 @@ export const scammersSeedData = [
|
|
|
54
54
|
},
|
|
55
55
|
// ── 2. Pending review — fake pre-order listing ────────────────────────────────
|
|
56
56
|
{
|
|
57
|
-
id: "scammer-fake-
|
|
58
|
-
seoSlug: "scammer-fake-
|
|
59
|
-
displayNames: ["
|
|
57
|
+
id: "scammer-fake-takara-tomy-preorder",
|
|
58
|
+
seoSlug: "scammer-fake-takara-tomy-preorder",
|
|
59
|
+
displayNames: ["TakaraTomy_Agent_India", "TT India Blades"],
|
|
60
60
|
phones: ["7654321098"],
|
|
61
|
-
upiIds: ["
|
|
62
|
-
emails: ["
|
|
61
|
+
upiIds: ["takaratomyagentindia@ybl"],
|
|
62
|
+
emails: ["takaratomy.agent.india@gmail.com"],
|
|
63
63
|
socialMedia: [
|
|
64
|
-
{ platform: "instagram", handle: "
|
|
65
|
-
{ platform: "telegram", handle: "
|
|
64
|
+
{ platform: "instagram", handle: "takaratomy_agent_india_official" },
|
|
65
|
+
{ platform: "telegram", handle: "takaratomy_agent_india" },
|
|
66
66
|
],
|
|
67
67
|
scamType: "fake_preorder_listing",
|
|
68
68
|
scamPlatform: "instagram",
|
|
69
|
-
description: "Account posed as an authorized pre-order agent for the upcoming
|
|
70
|
-
amountLost:
|
|
71
|
-
itemInvolved: "
|
|
69
|
+
description: "Account posed as an authorized pre-order agent for the upcoming Beyblade X BX-08 wave. Collected ₹800 from me for a 'guaranteed allocation slot' via UPI. Instagram profile had ~4,000 followers (likely bought) and fake order screenshots. After payment, the account blocked me. Similar reports found on Reddit r/BeybladeIndia.",
|
|
70
|
+
amountLost: 800,
|
|
71
|
+
itemInvolved: "Beyblade X BX-08 Wave (fake pre-order)",
|
|
72
72
|
evidence: [],
|
|
73
73
|
reportedBy: "user-seto-kaiba",
|
|
74
74
|
reportedByAnon: true,
|
|
@@ -95,9 +95,9 @@ export const scammersSeedData = [
|
|
|
95
95
|
socialMedia: [],
|
|
96
96
|
scamType: "empty_box_ship",
|
|
97
97
|
scamPlatform: "olx",
|
|
98
|
-
description: "Sold a sealed
|
|
98
|
+
description: "Sold a sealed Beyblade Burst Regalia Genesis on OLX, buyer claims item never arrived but tracking shows delivered. Buyer opened a scam report. Seller provided courier tracking + photograph of sealed package at drop-off. Report rejected after review.",
|
|
99
99
|
amountLost: 0,
|
|
100
|
-
itemInvolved: "
|
|
100
|
+
itemInvolved: "Beyblade Burst Regalia Genesis — Sealed",
|
|
101
101
|
evidence: [],
|
|
102
102
|
reportedBy: "user-yugi-muto",
|
|
103
103
|
reportedByAnon: false,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY: Seeds user sessions for
|
|
2
|
+
* WHY: Seeds user sessions for the Beyblade marketplace — 3 users, mix of active/expired/revoked.
|
|
3
3
|
* WHAT: 5 sessions total (3 active, 1 expired, 1 revoked). Covers desktop + mobile, multi-device.
|
|
4
4
|
*
|
|
5
5
|
* EXPORTS:
|
|
@@ -38,7 +38,7 @@ export const sessionsSeedData = [
|
|
|
38
38
|
expiresAt: daysAhead(25),
|
|
39
39
|
isActive: true,
|
|
40
40
|
},
|
|
41
|
-
//
|
|
41
|
+
// Rehan — Chrome Android (active)
|
|
42
42
|
{
|
|
43
43
|
id: "session-yugi-chrome-android-001",
|
|
44
44
|
userId: "user-yugi-muto",
|
|
@@ -49,13 +49,13 @@ export const sessionsSeedData = [
|
|
|
49
49
|
device: "Mobile",
|
|
50
50
|
ip: "203.0.113.10",
|
|
51
51
|
},
|
|
52
|
-
location: { country: _locale.countryName, city: "
|
|
52
|
+
location: { country: _locale.countryName, city: "Indore" },
|
|
53
53
|
createdAt: daysAgo(3),
|
|
54
54
|
lastActivity: daysAgo(0),
|
|
55
55
|
expiresAt: daysAhead(27),
|
|
56
56
|
isActive: true,
|
|
57
57
|
},
|
|
58
|
-
//
|
|
58
|
+
// Vivaan — Safari macOS (active)
|
|
59
59
|
{
|
|
60
60
|
id: "session-kaiba-safari-mac-001",
|
|
61
61
|
userId: "user-seto-kaiba",
|
|
@@ -66,13 +66,13 @@ export const sessionsSeedData = [
|
|
|
66
66
|
device: "Desktop",
|
|
67
67
|
ip: "203.0.113.20",
|
|
68
68
|
},
|
|
69
|
-
location: { country: _locale.countryName, city: "
|
|
69
|
+
location: { country: _locale.countryName, city: "Nagpur" },
|
|
70
70
|
createdAt: daysAgo(2),
|
|
71
71
|
lastActivity: daysAgo(0),
|
|
72
72
|
expiresAt: daysAhead(28),
|
|
73
73
|
isActive: true,
|
|
74
74
|
},
|
|
75
|
-
//
|
|
75
|
+
// Rehan — expired old session
|
|
76
76
|
{
|
|
77
77
|
id: "session-yugi-expired-001",
|
|
78
78
|
userId: "user-yugi-muto",
|
|
@@ -83,7 +83,7 @@ export const sessionsSeedData = [
|
|
|
83
83
|
device: "Mobile",
|
|
84
84
|
ip: "203.0.113.11",
|
|
85
85
|
},
|
|
86
|
-
location: { country: _locale.countryName, city: "
|
|
86
|
+
location: { country: _locale.countryName, city: "Indore" },
|
|
87
87
|
createdAt: daysAgo(40),
|
|
88
88
|
lastActivity: daysAgo(36),
|
|
89
89
|
expiresAt: daysAgo(35),
|
|
@@ -87,20 +87,20 @@ const rawLots = [
|
|
|
87
87
|
{ id: "lot-beyblade-02", shipmentId: rawShipments[3].id, lotName: "Launchers + stadiums", supplierOrderRef: "BA-3302", weightGrams: 2200, purchaseCost: 25000 },
|
|
88
88
|
];
|
|
89
89
|
const rawItems = [
|
|
90
|
-
{ id: "item-tokyo-01a", lotId: "lot-tokyo-01", shipmentId: rawShipments[0].id, title: "Base Set Booster Box (Japanese)", quantity: 6, isForSelfUse: false, price:
|
|
90
|
+
{ id: "item-tokyo-01a", lotId: "lot-tokyo-01", shipmentId: rawShipments[0].id, title: "Base Set Booster Box (Japanese)", quantity: 6, isForSelfUse: false, price: 95000 },
|
|
91
91
|
{ id: "item-tokyo-02a", lotId: "lot-tokyo-02", shipmentId: rawShipments[0].id, title: "Charizard Base Set PSA 9", quantity: 1, isForSelfUse: true },
|
|
92
|
-
{ id: "item-vault-01a", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Custom Camaro", quantity: 4, isForSelfUse: false, price:
|
|
93
|
-
{ id: "item-vault-01b", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Python", quantity: 3, isForSelfUse: false, price:
|
|
94
|
-
{ id: "item-vault-02a", lotId: "lot-vault-02", shipmentId: rawShipments[1].id, title: "Matchbox Superfast Truck (sample)", quantity: 2, isForSelfUse: false, price:
|
|
95
|
-
{ id: "item-gundam-01a", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG RX-78-2 Gundam Ver 3.0", quantity: 8, isForSelfUse: false, price:
|
|
92
|
+
{ id: "item-vault-01a", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Custom Camaro", quantity: 4, isForSelfUse: false, price: 18000 },
|
|
93
|
+
{ id: "item-vault-01b", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Python", quantity: 3, isForSelfUse: false, price: 22000 },
|
|
94
|
+
{ id: "item-vault-02a", lotId: "lot-vault-02", shipmentId: rawShipments[1].id, title: "Matchbox Superfast Truck (sample)", quantity: 2, isForSelfUse: false, price: 6500 },
|
|
95
|
+
{ id: "item-gundam-01a", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG RX-78-2 Gundam Ver 3.0", quantity: 8, isForSelfUse: false, price: 21000 },
|
|
96
96
|
{
|
|
97
|
-
id: "item-gundam-01b", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG Sazabi Ver Ka", quantity: 5, isForSelfUse: false, price:
|
|
97
|
+
id: "item-gundam-01b", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG Sazabi Ver Ka", quantity: 5, isForSelfUse: false, price: 28000,
|
|
98
98
|
linkedProductId: "product-gundam-mg-sazabi-ver-ka", linkedProductSlug: "product-gundam-mg-sazabi-ver-ka", linkedProductListingType: "standard",
|
|
99
99
|
},
|
|
100
|
-
{ id: "item-gundam-02a", lotId: "lot-gundam-02", shipmentId: rawShipments[2].id, title: "HG Gunpla assorted mecha", quantity: 20, isForSelfUse: false, price:
|
|
101
|
-
{ id: "item-beyblade-01a", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Turbo Achilles", quantity: 15, isForSelfUse: false, price:
|
|
102
|
-
{ id: "item-beyblade-01b", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Genesis Valtryek", quantity: 12, isForSelfUse: false, price:
|
|
103
|
-
{ id: "item-beyblade-02a", lotId: "lot-beyblade-02", shipmentId: rawShipments[3].id, title: "Beystadium Extreme", quantity: 6, isForSelfUse: false, price:
|
|
100
|
+
{ id: "item-gundam-02a", lotId: "lot-gundam-02", shipmentId: rawShipments[2].id, title: "HG Gunpla assorted mecha", quantity: 20, isForSelfUse: false, price: 3500 },
|
|
101
|
+
{ id: "item-beyblade-01a", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Turbo Achilles", quantity: 15, isForSelfUse: false, price: 5500 },
|
|
102
|
+
{ id: "item-beyblade-01b", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Genesis Valtryek", quantity: 12, isForSelfUse: false, price: 6000 },
|
|
103
|
+
{ id: "item-beyblade-02a", lotId: "lot-beyblade-02", shipmentId: rawShipments[3].id, title: "Beystadium Extreme", quantity: 6, isForSelfUse: false, price: 4800 },
|
|
104
104
|
];
|
|
105
105
|
function mainItemsRevenue(lotId) {
|
|
106
106
|
return rawItems
|