@mohasinac/appkit 2.7.53 → 2.7.55

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.
Files changed (197) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +1 -1
  2. package/dist/_internal/server/jobs/core/auctionSettlement.js +6 -3
  3. package/dist/_internal/server/jobs/core/bundleStockSync.js +9 -7
  4. package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +12 -3
  5. package/dist/_internal/server/jobs/core/onProductStockChange.js +12 -13
  6. package/dist/_internal/server/jobs/core/onProductWrite.js +1 -3
  7. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +11 -2
  8. package/dist/_internal/server/jobs/runtime/adapters/firebase.js +5 -14
  9. package/dist/_internal/shared/actions/action-registry.js +827 -4
  10. package/dist/_internal/shared/features/events/schema.d.ts +4 -4
  11. package/dist/client.d.ts +2 -0
  12. package/dist/client.js +1 -0
  13. package/dist/constants/api-endpoints.d.ts +3 -0
  14. package/dist/constants/api-endpoints.js +1 -0
  15. package/dist/constants/field-names.d.ts +4 -3
  16. package/dist/constants/field-names.js +8 -8
  17. package/dist/errors/error-codes.d.ts +3 -0
  18. package/dist/errors/error-codes.js +3 -0
  19. package/dist/errors/messages.d.ts +3 -0
  20. package/dist/errors/messages.js +3 -0
  21. package/dist/features/account/components/UserOffersPanel.js +2 -1
  22. package/dist/features/admin/components/AdminAllEventEntriesView.js +4 -3
  23. package/dist/features/admin/components/AdminBidsView.js +5 -3
  24. package/dist/features/admin/components/AdminBlogView.js +3 -2
  25. package/dist/features/admin/components/AdminBrandsView.js +2 -1
  26. package/dist/features/admin/components/AdminBundleEditorView.js +4 -5
  27. package/dist/features/admin/components/AdminBundlesView.js +3 -3
  28. package/dist/features/admin/components/AdminCarouselView.d.ts +2 -1
  29. package/dist/features/admin/components/AdminCarouselView.js +14 -5
  30. package/dist/features/admin/components/AdminCategoriesView.js +2 -1
  31. package/dist/features/admin/components/AdminContactView.d.ts +4 -1
  32. package/dist/features/admin/components/AdminContactView.js +27 -7
  33. package/dist/features/admin/components/AdminCouponsView.d.ts +3 -1
  34. package/dist/features/admin/components/AdminCouponsView.js +17 -3
  35. package/dist/features/admin/components/AdminFaqsView.d.ts +3 -1
  36. package/dist/features/admin/components/AdminFaqsView.js +18 -4
  37. package/dist/features/admin/components/AdminFeaturesView.js +2 -1
  38. package/dist/features/admin/components/AdminMediaView.js +3 -2
  39. package/dist/features/admin/components/AdminNavigationView.js +3 -2
  40. package/dist/features/admin/components/AdminNewsletterView.d.ts +2 -1
  41. package/dist/features/admin/components/AdminNewsletterView.js +13 -4
  42. package/dist/features/admin/components/AdminNotificationsView.js +6 -4
  43. package/dist/features/admin/components/AdminOrdersView.js +4 -3
  44. package/dist/features/admin/components/AdminPayoutsView.js +2 -2
  45. package/dist/features/admin/components/AdminPrizeDrawsView.js +2 -1
  46. package/dist/features/admin/components/AdminProductsView.js +3 -3
  47. package/dist/features/admin/components/AdminReviewsView.js +4 -3
  48. package/dist/features/admin/components/AdminScammersView.js +2 -1
  49. package/dist/features/admin/components/AdminSessionsView.js +5 -3
  50. package/dist/features/admin/components/AdminStoresView.js +2 -2
  51. package/dist/features/admin/components/AdminSublistingCategoriesView.d.ts +5 -1
  52. package/dist/features/admin/components/AdminSublistingCategoriesView.js +12 -3
  53. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -1
  54. package/dist/features/admin/components/AdminTeamView.d.ts +2 -1
  55. package/dist/features/admin/components/AdminTeamView.js +13 -4
  56. package/dist/features/admin/components/AdminUsersView.js +2 -2
  57. package/dist/features/admin/types/product.types.d.ts +1 -1
  58. package/dist/features/admin/types/product.types.js +2 -3
  59. package/dist/features/auctions/actions/bid-actions.d.ts +9 -0
  60. package/dist/features/auctions/actions/bid-actions.js +61 -0
  61. package/dist/features/auctions/components/AuctionDetailPageView.d.ts +2 -1
  62. package/dist/features/auctions/components/AuctionDetailPageView.js +5 -4
  63. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +3 -1
  64. package/dist/features/auctions/components/PlaceBidFormClient.js +32 -2
  65. package/dist/features/auctions/types/index.d.ts +1 -1
  66. package/dist/features/layout/AppLayoutShell.js +1 -1
  67. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -11
  68. package/dist/features/products/api/[id]/route.js +4 -8
  69. package/dist/features/products/api/route.js +1 -3
  70. package/dist/features/products/components/AuctionsIndexListing.js +3 -11
  71. package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -10
  72. package/dist/features/products/components/ProductFilters.d.ts +33 -9
  73. package/dist/features/products/components/ProductFilters.js +6 -29
  74. package/dist/features/products/components/ProductForm.js +2 -3
  75. package/dist/features/products/constants/action-defs.d.ts +86 -7
  76. package/dist/features/products/constants/action-defs.js +99 -7
  77. package/dist/features/products/constants/sieve.d.ts +162 -0
  78. package/dist/features/products/constants/sieve.js +95 -0
  79. package/dist/features/products/repository/products.repository.d.ts +5 -0
  80. package/dist/features/products/repository/products.repository.js +23 -3
  81. package/dist/features/products/schemas/firestore.d.ts +4 -4
  82. package/dist/features/products/schemas/firestore.js +2 -3
  83. package/dist/features/products/schemas/index.d.ts +6 -6
  84. package/dist/features/products/schemas/index.js +2 -6
  85. package/dist/features/products/types/index.d.ts +1 -1
  86. package/dist/features/seller/actions/offer-actions.js +2 -2
  87. package/dist/features/seller/components/QuickProductForm.d.ts +13 -0
  88. package/dist/features/seller/components/QuickProductForm.js +50 -0
  89. package/dist/features/seller/components/SellerAuctionsView.d.ts +4 -1
  90. package/dist/features/seller/components/SellerAuctionsView.js +37 -3
  91. package/dist/features/seller/components/SellerBidsView.js +2 -1
  92. package/dist/features/seller/components/SellerBundlesView.d.ts +3 -1
  93. package/dist/features/seller/components/SellerBundlesView.js +38 -5
  94. package/dist/features/seller/components/SellerClassifiedView.d.ts +3 -1
  95. package/dist/features/seller/components/SellerClassifiedView.js +37 -4
  96. package/dist/features/seller/components/SellerDigitalCodesView.d.ts +3 -1
  97. package/dist/features/seller/components/SellerDigitalCodesView.js +37 -4
  98. package/dist/features/seller/components/SellerGoogleReviewsView.js +2 -1
  99. package/dist/features/seller/components/SellerGroupedListingsView.js +3 -2
  100. package/dist/features/seller/components/SellerLiveView.d.ts +3 -1
  101. package/dist/features/seller/components/SellerLiveView.js +37 -4
  102. package/dist/features/seller/components/SellerOffersPanel.js +2 -1
  103. package/dist/features/seller/components/SellerOffersView.d.ts +4 -1
  104. package/dist/features/seller/components/SellerOffersView.js +8 -3
  105. package/dist/features/seller/components/SellerPayoutsView.d.ts +3 -1
  106. package/dist/features/seller/components/SellerPayoutsView.js +7 -3
  107. package/dist/features/seller/components/SellerPreOrdersView.d.ts +2 -1
  108. package/dist/features/seller/components/SellerPreOrdersView.js +30 -7
  109. package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +2 -1
  110. package/dist/features/seller/components/SellerPrizeDrawsView.js +30 -7
  111. package/dist/features/seller/components/SellerProductShell.js +12 -0
  112. package/dist/features/seller/components/SellerReviewsView.js +2 -1
  113. package/dist/features/seller/components/SellerShippingConfigsView.js +3 -2
  114. package/dist/features/seller/components/SellerStoreCategoriesView.js +6 -5
  115. package/dist/features/seller/components/SellerTemplatesView.js +4 -3
  116. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +30 -16
  117. package/dist/features/wishlist/types/index.d.ts +1 -1
  118. package/dist/index.d.ts +6 -3
  119. package/dist/index.js +6 -4
  120. package/dist/seed/addresses-seed-data.d.ts +2 -18
  121. package/dist/seed/addresses-seed-data.js +137 -203
  122. package/dist/seed/bids-seed-data.d.ts +2 -8
  123. package/dist/seed/bids-seed-data.js +172 -648
  124. package/dist/seed/blog-posts-seed-data.d.ts +0 -5
  125. package/dist/seed/blog-posts-seed-data.js +341 -596
  126. package/dist/seed/carousel-slides-seed-data.d.ts +0 -5
  127. package/dist/seed/carousel-slides-seed-data.js +61 -192
  128. package/dist/seed/carousels-seed-data.js +18 -1
  129. package/dist/seed/cart-seed-data.d.ts +1 -18
  130. package/dist/seed/cart-seed-data.js +116 -293
  131. package/dist/seed/categories-seed-data.d.ts +0 -6
  132. package/dist/seed/categories-seed-data.js +1409 -1537
  133. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -11
  134. package/dist/seed/claimed-coupons-seed-data.js +32 -29
  135. package/dist/seed/conversations-seed-data.d.ts +0 -6
  136. package/dist/seed/conversations-seed-data.js +132 -280
  137. package/dist/seed/coupon-usage-seed-data.d.ts +0 -16
  138. package/dist/seed/coupon-usage-seed-data.js +30 -44
  139. package/dist/seed/coupons-seed-data.d.ts +0 -6
  140. package/dist/seed/coupons-seed-data.js +141 -489
  141. package/dist/seed/events-seed-data.d.ts +0 -6
  142. package/dist/seed/events-seed-data.js +201 -379
  143. package/dist/seed/faq-seed-data.d.ts +0 -14
  144. package/dist/seed/faq-seed-data.js +609 -1184
  145. package/dist/seed/grouped-listings-seed-data.d.ts +119 -8
  146. package/dist/seed/grouped-listings-seed-data.js +148 -233
  147. package/dist/seed/history-seed-data.d.ts +0 -7
  148. package/dist/seed/history-seed-data.js +50 -54
  149. package/dist/seed/homepage-sections-seed-data.d.ts +0 -5
  150. package/dist/seed/homepage-sections-seed-data.js +83 -175
  151. package/dist/seed/index.d.ts +1 -1
  152. package/dist/seed/index.js +1 -1
  153. package/dist/seed/manifest.js +2 -2
  154. package/dist/seed/notifications-seed-data.d.ts +0 -6
  155. package/dist/seed/notifications-seed-data.js +309 -196
  156. package/dist/seed/offers-seed-data.d.ts +0 -8
  157. package/dist/seed/offers-seed-data.js +118 -197
  158. package/dist/seed/orders-seed-data.d.ts +2 -8
  159. package/dist/seed/orders-seed-data.js +248 -1510
  160. package/dist/seed/payouts-seed-data.d.ts +0 -6
  161. package/dist/seed/payouts-seed-data.js +102 -441
  162. package/dist/seed/products-auctions-seed-data.d.ts +1 -14
  163. package/dist/seed/products-auctions-seed-data.js +612 -1084
  164. package/dist/seed/products-preorders-seed-data.d.ts +119 -14
  165. package/dist/seed/products-preorders-seed-data.js +154 -455
  166. package/dist/seed/products-standard-seed-data.d.ts +1 -15
  167. package/dist/seed/products-standard-seed-data.js +1355 -4128
  168. package/dist/seed/reviews-seed-data.d.ts +2 -8
  169. package/dist/seed/reviews-seed-data.js +99 -1182
  170. package/dist/seed/scammers-seed-data.d.ts +0 -15
  171. package/dist/seed/scammers-seed-data.js +36 -37
  172. package/dist/seed/sessions-seed-data.d.ts +0 -13
  173. package/dist/seed/sessions-seed-data.js +58 -335
  174. package/dist/seed/site-settings-seed-data.d.ts +0 -4
  175. package/dist/seed/site-settings-seed-data.js +61 -52
  176. package/dist/seed/store-addresses-seed-data.js +27 -151
  177. package/dist/seed/store-extensions-seed-data.d.ts +0 -7
  178. package/dist/seed/store-extensions-seed-data.js +147 -261
  179. package/dist/seed/stores-seed-data.d.ts +0 -5
  180. package/dist/seed/stores-seed-data.js +222 -184
  181. package/dist/seed/sub-listings-seed-data.d.ts +119 -0
  182. package/dist/seed/sub-listings-seed-data.js +447 -0
  183. package/dist/seed/support-tickets-seed-data.d.ts +0 -7
  184. package/dist/seed/support-tickets-seed-data.js +82 -75
  185. package/dist/seed/users-seed-data.d.ts +0 -5
  186. package/dist/seed/users-seed-data.js +279 -634
  187. package/dist/seed/wishlists-seed-data.d.ts +0 -9
  188. package/dist/seed/wishlists-seed-data.js +36 -52
  189. package/dist/seo/json-ld.js +6 -4
  190. package/dist/styles.css +8052 -3
  191. package/dist/tailwind-utilities.css +1 -1
  192. package/dist/utils/index.d.ts +1 -0
  193. package/dist/utils/index.js +1 -0
  194. package/dist/utils/search-tokens.d.ts +2 -0
  195. package/dist/utils/search-tokens.js +21 -0
  196. package/package.json +2 -2
  197. package/scripts/seed-cli.mjs +2 -2
@@ -1,17 +1,2 @@
1
- /**
2
- * Scammer Profiles Seed Data — LetItRip Scam Registry
3
- *
4
- * 3 seed profiles covering the full status workflow:
5
- * 1. scammer-rahul-advance-payment — verified (fully populated, used for UI dev)
6
- * 2. scammer-fake-pokemon-seller-upi — pending_review (tests admin queue)
7
- * 3. scammer-mistaken-identity-case — rejected (tests false-report workflow)
8
- *
9
- * Subcollection seed (incidents, comments, contests) is tracked as part of SCAM9.
10
- * The denormalized count fields (incidentCount, commentCount, contestCount) on
11
- * these documents reflect what would exist after subcollection seed runs.
12
- *
13
- * All phones / UPI IDs / emails are fictional but formatted like real Indian data.
14
- * Slug prefix: scammer-
15
- */
16
1
  import type { ScammerDocument } from "../features/scams/schemas/firestore";
17
2
  export declare const scammersSeedData: Partial<ScammerDocument>[];
@@ -1,17 +1,16 @@
1
- /**
2
- * Scammer Profiles Seed DataLetItRip Scam Registry
1
+ /*
2
+ * WHY: Seeds scammer profiles for YGO marketplace 3 profiles covering the full status workflow.
3
+ * WHAT: 1 verified, 1 pending_review, 1 rejected. Fictional YGO-related scam scenarios.
3
4
  *
4
- * 3 seed profiles covering the full status workflow:
5
- * 1. scammer-rahul-advance-payment verified (fully populated, used for UI dev)
6
- * 2. scammer-fake-pokemon-seller-upi — pending_review (tests admin queue)
7
- * 3. scammer-mistaken-identity-case — rejected (tests false-report workflow)
5
+ * EXPORTS:
6
+ * scammersSeedDataArray of Partial<ScammerDocument> for seed runner
8
7
  *
9
- * Subcollection seed (incidents, comments, contests) is tracked as part of SCAM9.
10
- * The denormalized count fields (incidentCount, commentCount, contestCount) on
11
- * these documents reflect what would exist after subcollection seed runs.
12
- *
13
- * All phones / UPI IDs / emails are fictional but formatted like real Indian data.
14
- * Slug prefix: scammer-
8
+ * @tag domain:scams
9
+ * @tag layer:seed
10
+ * @tag pattern:none
11
+ * @tag access:server-only
12
+ * @tag consumers:seed/index.ts,seed/runner.ts,SeedPanel
13
+ * @tag sideEffects:none
15
14
  */
16
15
  import { SCAMMER_FIELDS } from "../constants/field-names";
17
16
  const NOW = new Date("2026-05-10T00:00:00.000Z");
@@ -19,23 +18,23 @@ const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
19
18
  export const scammersSeedData = [
20
19
  // ── 1. Verified — advance payment ghost ──────────────────────────────────────
21
20
  {
22
- id: "scammer-rahul-advance-payment",
23
- seoSlug: "scammer-rahul-advance-payment",
24
- displayNames: ["Rahul Sharma", "RS Toys", "RS Trading"],
21
+ id: "scammer-fake-lob-seller",
22
+ seoSlug: "scammer-fake-lob-seller",
23
+ displayNames: ["YGO_King_India", "LOB Cards Official"],
25
24
  phones: ["9876543210", "8765432109"],
26
- upiIds: ["9876543210@paytm", "rstoys@okicici"],
27
- emails: ["rstoys.fake@gmail.com"],
25
+ upiIds: ["9876543210@paytm", "ygokingcards@okicici"],
26
+ emails: ["ygokingcards.fake@gmail.com"],
28
27
  socialMedia: [
29
- { platform: "instagram", handle: "rs_toys_official", url: "https://instagram.com/rs_toys_official" },
28
+ { platform: "instagram", handle: "ygo_king_india_official", url: "https://instagram.com/ygo_king_india_official" },
30
29
  { platform: "whatsapp", handle: "9876543210" },
31
30
  ],
32
31
  scamType: "advance_payment_ghost",
33
32
  scamPlatform: "whatsapp",
34
- description: "Seller listed a Charizard VSTAR SAR on a Facebook group for ₹3,500 — significantly below market. When I messaged, he asked for ₹1,000 advance to 'hold' the card before shipping. After I paid via UPI (9876543210@paytm), he went silent. The account name on UPI matched 'Rahul S'. Later found 2 more people in the same group who had the same experience with the same UPI ID.",
35
- amountLost: 100000, // ₹1,000 in paise
36
- itemInvolved: "Charizard VSTAR SAR (Pokémon Scarlet & Violet)",
37
- evidence: ["/media/scammer-evidence-rahul-chat-screenshot-20260402.jpg"],
38
- reportedBy: "user-rahul-sharma",
33
+ description: "Seller listed a Blue-Eyes White Dragon LOB 1st Edition PSA 9 on a Facebook group for ₹25,000 — significantly below market. When I messaged, he asked for ₹5,000 advance to 'hold' the card before shipping. After I paid via UPI (9876543210@paytm), he went silent. The account name on UPI matched 'YGO King'. Later found 2 more people in the same group who had the same experience with the same UPI ID.",
34
+ amountLost: 500000,
35
+ itemInvolved: "Blue-Eyes White Dragon LOB 1st Edition PSA 9 (Yu-Gi-Oh!)",
36
+ evidence: ["/media/scammer-evidence-ygoking-chat-screenshot-20260402.jpg"],
37
+ reportedBy: "user-yugi-muto",
39
38
  reportedByAnon: false,
40
39
  status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,
41
40
  verifiedBy: "user-admin-letitrip",
@@ -54,23 +53,23 @@ export const scammersSeedData = [
54
53
  },
55
54
  // ── 2. Pending review — fake pre-order listing ────────────────────────────────
56
55
  {
57
- id: "scammer-fake-pokemon-seller-upi",
58
- seoSlug: "scammer-fake-pokemon-seller-upi",
59
- displayNames: ["Pokemon_King_India", "PK India Toys"],
56
+ id: "scammer-fake-konami-preorder",
57
+ seoSlug: "scammer-fake-konami-preorder",
58
+ displayNames: ["Konami_Agent_India", "KA India Cards"],
60
59
  phones: ["7654321098"],
61
- upiIds: ["pokemonkingindia@ybl"],
62
- emails: ["pokemon.king.india@gmail.com"],
60
+ upiIds: ["konamiagentindia@ybl"],
61
+ emails: ["konami.agent.india@gmail.com"],
63
62
  socialMedia: [
64
- { platform: "instagram", handle: "pokemon_king_india_official" },
65
- { platform: "telegram", handle: "pokemon_king_india" },
63
+ { platform: "instagram", handle: "konami_agent_india_official" },
64
+ { platform: "telegram", handle: "konami_agent_india" },
66
65
  ],
67
66
  scamType: "fake_preorder_listing",
68
67
  scamPlatform: "instagram",
69
- description: "Account posed as an authorized pre-order agent for the upcoming Pokémon Scarlet & Violet 151 reprint. Collected ₹2,200 from me for a 'guaranteed 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/IndianPokemon.",
70
- amountLost: 220000, // ₹2,200 in paise
71
- itemInvolved: "Pokémon 151 Reprint Pre-order (fake)",
68
+ description: "Account posed as an authorized pre-order agent for the upcoming Konami 25th Anniversary Ultimate Collection booster box. Collected ₹4,500 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/YuGiOhIndia.",
69
+ amountLost: 450000,
70
+ itemInvolved: "Konami 25th Anniversary Ultimate Collection (fake pre-order)",
72
71
  evidence: [],
73
- reportedBy: "user-arjun-singh",
72
+ reportedBy: "user-seto-kaiba",
74
73
  reportedByAnon: true,
75
74
  status: "pending_review",
76
75
  relatedScammerIds: [],
@@ -95,11 +94,11 @@ export const scammersSeedData = [
95
94
  socialMedia: [],
96
95
  scamType: "empty_box_ship",
97
96
  scamPlatform: "olx",
98
- description: "Sold a Hot Wheels set 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.",
97
+ description: "Sold a sealed Duelist of the Roses booster box 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
98
  amountLost: 0,
100
- itemInvolved: "Hot Wheels Retro Entertainment Set",
99
+ itemInvolved: "Duelist of the Roses Booster Box (Yu-Gi-Oh!)",
101
100
  evidence: [],
102
- reportedBy: "user-anjali-verma",
101
+ reportedBy: "user-yugi-muto",
103
102
  reportedByAnon: false,
104
103
  status: SCAMMER_FIELDS.STATUS_VALUES.REJECTED,
105
104
  verifiedBy: "user-admin-letitrip",
@@ -1,16 +1,3 @@
1
- /**
2
- * Sessions Seed Data
3
- *
4
- * Covers all session lifecycle states and device types for testing:
5
- * — Active sessions : admin, seller, regular users (desktop + mobile)
6
- * — Multi-device session : same user, two concurrent devices
7
- * — Expired session : isActive=false because expiresAt is in the past
8
- * — User-revoked session : isActive=false, revokedBy=userId
9
- * — Admin-revoked session : isActive=false, revokedBy="admin" (suspicious activity)
10
- *
11
- * All FK references:
12
- * userId → users/{uid} (see users-seed-data.ts)
13
- */
14
1
  import { type SessionDocument, SESSION_COLLECTION } from "../features/auth/schemas";
15
2
  export { SESSION_COLLECTION };
16
3
  export declare const sessionsSeedData: SessionDocument[];
@@ -1,388 +1,111 @@
1
- import { getSeedLocale } from "./seed-market-config";
2
- const _locale = getSeedLocale();
3
- /**
4
- * Sessions Seed Data
1
+ /*
2
+ * WHY: Seeds user sessions for YGO marketplace — 3 users, mix of active/expired/revoked.
3
+ * WHAT: 5 sessions total (3 active, 1 expired, 1 revoked). Covers desktop + mobile, multi-device.
5
4
  *
6
- * Covers all session lifecycle states and device types for testing:
7
- * — Active sessions : admin, seller, regular users (desktop + mobile)
8
- * — Multi-device session : same user, two concurrent devices
9
- * — Expired session : isActive=false because expiresAt is in the past
10
- * — User-revoked session : isActive=false, revokedBy=userId
11
- * — Admin-revoked session : isActive=false, revokedBy="admin" (suspicious activity)
5
+ * EXPORTS:
6
+ * sessionsSeedData Array of SessionDocument for seed runner
7
+ * SESSION_COLLECTION re-exported collection name
12
8
  *
13
- * All FK references:
14
- * userId users/{uid} (see users-seed-data.ts)
9
+ * @tag domain:sessions,auth
10
+ * @tag layer:seed
11
+ * @tag pattern:none
12
+ * @tag access:server-only
13
+ * @tag consumers:seed/index.ts,seed/runner.ts,SeedPanel
14
+ * @tag sideEffects:none
15
15
  */
16
+ import { getSeedLocale } from "./seed-market-config";
17
+ const _locale = getSeedLocale();
16
18
  import { SESSION_COLLECTION, } from "../features/auth/schemas";
17
- // Dynamic date helpers
18
19
  const NOW = new Date();
19
20
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
20
21
  const daysAhead = (n) => new Date(NOW.getTime() + n * 86400000);
21
- // Re-exported so seed-all-data.ts can reference the collection name directly.
22
22
  export { SESSION_COLLECTION };
23
23
  export const sessionsSeedData = [
24
- // -- Active: Admin — Chrome Desktop (Windows) ----------------------------
24
+ // Admin — Chrome Desktop (active)
25
25
  {
26
26
  id: "session-admin-chrome-desktop-001",
27
27
  userId: "user-admin-letitrip",
28
28
  deviceInfo: {
29
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
29
+ userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36",
30
30
  browser: "Chrome 122",
31
31
  os: "Windows 11",
32
32
  device: "Desktop",
33
33
  ip: "203.0.113.1",
34
34
  },
35
35
  location: { country: _locale.countryName, city: "Mumbai" },
36
- createdAt: daysAgo(12),
37
- lastActivity: daysAgo(8),
38
- expiresAt: daysAhead(17),
39
- isActive: true,
40
- },
41
- // -- Active: John Doe — Chrome Desktop ------------------------------------
42
- {
43
- id: "session-john-chrome-desktop-001",
44
- userId: "user-john-doe-johndoe",
45
- deviceInfo: {
46
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
47
- browser: "Chrome 121",
48
- os: "Windows 11",
49
- device: "Desktop",
50
- ip: "203.0.113.10",
51
- },
52
- location: { country: _locale.countryName, city: "Mumbai" },
53
- createdAt: daysAgo(11),
54
- lastActivity: daysAgo(8),
55
- expiresAt: daysAhead(17),
36
+ createdAt: daysAgo(5),
37
+ lastActivity: daysAgo(0),
38
+ expiresAt: daysAhead(25),
56
39
  isActive: true,
57
40
  },
58
- // -- Active: John Doe — Chrome Android (multi-device test) ---------------
41
+ // Yugi — Chrome Android (active)
59
42
  {
60
- id: "session-john-chrome-android-002",
61
- userId: "user-john-doe-johndoe",
43
+ id: "session-yugi-chrome-android-001",
44
+ userId: "user-yugi-muto",
62
45
  deviceInfo: {
63
- userAgent: "Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36",
64
- browser: "Chrome 121",
46
+ userAgent: "Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 Chrome/122.0.0.0 Mobile Safari/537.36",
47
+ browser: "Chrome 122",
65
48
  os: "Android 14",
66
49
  device: "Mobile",
67
- ip: "203.0.113.11",
50
+ ip: "203.0.113.10",
68
51
  },
69
- location: { country: _locale.countryName, city: "Mumbai" },
70
- createdAt: daysAgo(10),
71
- lastActivity: daysAgo(8),
72
- expiresAt: daysAhead(18),
52
+ location: { country: _locale.countryName, city: "Domino City" },
53
+ createdAt: daysAgo(3),
54
+ lastActivity: daysAgo(0),
55
+ expiresAt: daysAhead(27),
73
56
  isActive: true,
74
57
  },
75
- // -- Active: Jane Smith — Safari iOS -------------------------------------
58
+ // Kaiba — Safari macOS (active)
76
59
  {
77
- id: "session-jane-safari-ios-001",
78
- userId: "user-jane-smith-janes",
60
+ id: "session-kaiba-safari-mac-001",
61
+ userId: "user-seto-kaiba",
79
62
  deviceInfo: {
80
- userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1",
63
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 Version/17.4 Safari/605.1.15",
81
64
  browser: "Safari 17",
82
- os: "iOS 17.3",
83
- device: "Mobile",
84
- ip: "203.0.113.20",
85
- },
86
- location: { country: _locale.countryName, city: "Delhi" },
87
- createdAt: daysAgo(9),
88
- lastActivity: daysAgo(8),
89
- expiresAt: daysAhead(19),
90
- isActive: true,
91
- },
92
- // -- Active: TechHub Seller — Chrome macOS Desktop -----------------------
93
- {
94
- id: "session-techhub-chrome-mac-001",
95
- userId: "user-techhub-electronics-electron",
96
- deviceInfo: {
97
- userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
98
- browser: "Chrome 122",
99
65
  os: "macOS 14",
100
66
  device: "Desktop",
101
- ip: "203.0.113.30",
102
- },
103
- location: { country: _locale.countryName, city: "Mumbai" },
104
- createdAt: daysAgo(13),
105
- lastActivity: daysAgo(8),
106
- expiresAt: daysAhead(15),
107
- isActive: true,
108
- },
109
- // -- Active: Content Moderator — Firefox Linux Desktop -------------------
110
- {
111
- id: "session-moderator-firefox-linux-001",
112
- userId: "user-moderator-mod-user",
113
- deviceInfo: {
114
- userAgent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0",
115
- browser: "Firefox 123",
116
- os: "Ubuntu Linux",
117
- device: "Desktop",
118
- ip: "203.0.113.40",
119
- },
120
- location: { country: _locale.countryName, city: "Mumbai" },
121
- createdAt: daysAgo(9),
122
- lastActivity: daysAgo(8),
123
- expiresAt: daysAhead(19),
124
- isActive: true,
125
- },
126
- // -- Active: Priya Sharma — Chrome iPad (Tablet) -------------------------
127
- {
128
- id: "session-priya-chrome-ipad-001",
129
- userId: "user-priya-sharma-priya",
130
- deviceInfo: {
131
- userAgent: "Mozilla/5.0 (iPad; CPU OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/121.0.6167.66 Mobile/15E148 Safari/604.1",
132
- browser: "Chrome 121",
133
- os: "iOS 17.2",
134
- device: "Tablet",
135
- ip: "203.0.113.50",
136
- },
137
- location: { country: _locale.countryName, city: "Hyderabad" },
138
- createdAt: daysAgo(10),
139
- lastActivity: daysAgo(9),
140
- expiresAt: daysAhead(18),
141
- isActive: true,
142
- },
143
- // -- Active: Artisan Crafts Co. seller — Edge Windows Desktop -------------
144
- {
145
- id: "session-artisan-edge-win-001",
146
- userId: "user-home-essentials-homeesse",
147
- deviceInfo: {
148
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
149
- browser: "Edge 122",
150
- os: "Windows 11",
151
- device: "Desktop",
152
- ip: "203.0.113.60",
67
+ ip: "203.0.113.20",
153
68
  },
154
- location: { country: _locale.countryName, city: "Jaipur" },
155
- createdAt: daysAgo(12),
156
- lastActivity: daysAgo(9),
157
- expiresAt: daysAhead(16),
69
+ location: { country: _locale.countryName, city: "Domino City" },
70
+ createdAt: daysAgo(2),
71
+ lastActivity: daysAgo(0),
72
+ expiresAt: daysAhead(28),
158
73
  isActive: true,
159
74
  },
160
- // -- Expired: Mike Johnson Safari macOS (expiresAt is in the past) ------
161
- // Tests: admin session list, cleanup queries, session expiry UI badge
75
+ // Yugiexpired old session
162
76
  {
163
- id: "session-mike-safari-mac-expired-001",
164
- userId: "user-mike-johnson-mikejohn",
77
+ id: "session-yugi-expired-001",
78
+ userId: "user-yugi-muto",
165
79
  deviceInfo: {
166
- userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15",
80
+ userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3) AppleWebKit/605.1.15 Version/17.2 Mobile Safari/604.1",
167
81
  browser: "Safari 17",
168
- os: "macOS 14",
169
- device: "Desktop",
170
- ip: "203.0.113.70",
171
- },
172
- location: { country: _locale.countryName, city: "Bangalore" },
173
- createdAt: daysAgo(43),
174
- lastActivity: daysAgo(39),
175
- expiresAt: daysAgo(38), // Expired 30 days ago
176
- isActive: false,
177
- },
178
- // -- Expired: Raj Patel — Chrome Android (natural expiry) -----------------
179
- {
180
- id: "session-raj-chrome-android-expired-001",
181
- userId: "user-raj-patel-rajpatel",
182
- deviceInfo: {
183
- userAgent: "Mozilla/5.0 (Linux; Android 13; Samsung Galaxy S23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36",
184
- browser: "Chrome 119",
185
- os: "Android 13",
82
+ os: "iOS 17.3",
186
83
  device: "Mobile",
187
- ip: "203.0.113.80",
188
- },
189
- location: { country: _locale.countryName, city: "Ahmedabad" },
190
- createdAt: daysAgo(58),
191
- lastActivity: daysAgo(56),
192
- expiresAt: daysAgo(53), // Expired 45 days ago
193
- isActive: false,
194
- },
195
- // -- Revoked by User: Raj Patel — old laptop session he revoked manually --
196
- // Tests: revoke session API, "Sign out all devices" flow
197
- {
198
- id: "session-raj-chrome-desktop-revoked-001",
199
- userId: "user-raj-patel-rajpatel",
200
- deviceInfo: {
201
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
202
- browser: "Chrome 118",
203
- os: "Windows 10",
204
- device: "Desktop",
205
- ip: "203.0.113.81",
84
+ ip: "203.0.113.11",
206
85
  },
207
- location: { country: _locale.countryName, city: "Ahmedabad" },
208
- createdAt: daysAgo(98),
86
+ location: { country: _locale.countryName, city: "Domino City" },
87
+ createdAt: daysAgo(40),
209
88
  lastActivity: daysAgo(36),
210
- expiresAt: daysAgo(8), // Would still be valid
89
+ expiresAt: daysAgo(35),
211
90
  isActive: false,
212
- revokedAt: daysAgo(27),
213
- revokedBy: "user-raj-patel-rajpatel", // User revoked their own session
214
91
  },
215
- // -- Revoked by Admin: Suspicious session on unknown device ---------------
216
- // Tests: admin revoke session API, security audit UI
92
+ // Admin revoked suspicious session
217
93
  {
218
- id: "session-meera-suspicious-revoked-admin-001",
219
- userId: "user-vikram-nair-vikram",
94
+ id: "session-admin-revoked-001",
95
+ userId: "user-admin-letitrip",
220
96
  deviceInfo: {
221
- userAgent: "Mozilla/5.0 (Linux; Android 9; SM-J730F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Mobile Safari/537.36",
97
+ userAgent: "Mozilla/5.0 (Linux; Android 9; SM-J730F) AppleWebKit/537.36 Chrome/67.0.0.0 Mobile Safari/537.36",
222
98
  browser: "Chrome 67",
223
99
  os: "Android 9",
224
100
  device: "Mobile",
225
- ip: "198.51.100.42", // Unknown IP, flagged as suspicious
101
+ ip: "198.51.100.42",
226
102
  },
227
- location: { country: "Russia", city: "Moscow" }, // Unexpected country
228
- createdAt: daysAgo(22),
229
- lastActivity: daysAgo(22),
230
- expiresAt: daysAhead(6),
103
+ location: { country: "Russia", city: "Moscow" },
104
+ createdAt: daysAgo(20),
105
+ lastActivity: daysAgo(20),
106
+ expiresAt: daysAhead(8),
231
107
  isActive: false,
232
- revokedAt: daysAgo(22),
233
- revokedBy: "admin", // Admin revoked after security review
234
- },
235
- // -- Active: Fashion Boutique seller — Chrome Android ---------------------
236
- {
237
- id: "session-fashion-chrome-android-001",
238
- userId: "user-fashion-boutique-fashionb",
239
- deviceInfo: {
240
- userAgent: "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36",
241
- browser: "Chrome 122",
242
- os: "Android 14",
243
- device: "Mobile",
244
- ip: "203.0.113.90",
245
- },
246
- location: { country: _locale.countryName, city: "Mumbai" },
247
- createdAt: daysAgo(8),
248
- lastActivity: daysAgo(4),
249
- expiresAt: daysAhead(22),
250
- isActive: true,
251
- },
252
- // -- Active: Vikram Nair — Chrome Mobile ----------------------------------
253
- {
254
- id: "session-vikram-chrome-mobile-001",
255
- userId: "user-vikram-nair-vikram",
256
- deviceInfo: {
257
- userAgent: "Mozilla/5.0 (Linux; Android 13; OnePlus 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36",
258
- browser: "Chrome 121",
259
- os: "Android 13",
260
- device: "Mobile",
261
- ip: "203.0.113.91",
262
- },
263
- location: { country: _locale.countryName, city: "Kochi" },
264
- createdAt: daysAgo(9),
265
- lastActivity: daysAgo(4),
266
- expiresAt: daysAhead(19),
267
- isActive: true,
268
- },
269
- // -- Active: Raj Patel — Chrome Desktop -----------------------------------
270
- {
271
- id: "session-raj-chrome-desktop-active-001",
272
- userId: "user-raj-patel-rajpatel",
273
- deviceInfo: {
274
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
275
- browser: "Chrome 122",
276
- os: "Windows 11",
277
- device: "Desktop",
278
- ip: "203.0.113.92",
279
- },
280
- location: { country: _locale.countryName, city: "Ahmedabad" },
281
- createdAt: daysAgo(8),
282
- lastActivity: daysAgo(4),
283
- expiresAt: daysAhead(22),
284
- isActive: true,
285
- },
286
- // -- Active: Ananya Bose — Safari iOS -------------------------------------
287
- {
288
- id: "session-ananya-safari-ios-001",
289
- userId: "user-ananya-bose-ananya",
290
- deviceInfo: {
291
- userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Mobile/15E148 Safari/604.1",
292
- browser: "Safari 17",
293
- os: "iOS 17.3",
294
- device: "Mobile",
295
- ip: "203.0.113.93",
296
- },
297
- location: { country: _locale.countryName, city: "Kolkata" },
298
- createdAt: daysAgo(17),
299
- lastActivity: daysAgo(4),
300
- expiresAt: daysAhead(11),
301
- isActive: true,
302
- },
303
- // -- Active: Pooja Mehta — Chrome Desktop ---------------------------------
304
- {
305
- id: "session-pooja-chrome-desktop-001",
306
- userId: "user-pooja-mehta-pooja",
307
- deviceInfo: {
308
- userAgent: "Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
309
- browser: "Chrome 122",
310
- os: "Windows 11",
311
- device: "Desktop",
312
- ip: "203.0.113.94",
313
- },
314
- location: { country: _locale.countryName, city: "Mumbai" },
315
- createdAt: daysAgo(15),
316
- lastActivity: daysAgo(5),
317
- expiresAt: daysAhead(13),
318
- isActive: true,
319
- },
320
- // -- Active: Ravi Kumar — Chrome Android ----------------------------------
321
- {
322
- id: "session-ravi-chrome-android-001",
323
- userId: "user-ravi-kumar-ravi",
324
- deviceInfo: {
325
- userAgent: "Mozilla/5.0 (Linux; Android 14; Samsung Galaxy S24) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36",
326
- browser: "Chrome 122",
327
- os: "Android 14",
328
- device: "Mobile",
329
- ip: "203.0.113.95",
330
- },
331
- location: { country: _locale.countryName, city: "Chandigarh" },
332
- createdAt: daysAgo(12),
333
- lastActivity: daysAgo(4),
334
- expiresAt: daysAhead(16),
335
- isActive: true,
336
- },
337
- // -- Active: Sneha Gupta — Firefox Desktop --------------------------------
338
- {
339
- id: "session-sneha-firefox-desktop-001",
340
- userId: "user-sneha-gupta-sneha",
341
- deviceInfo: {
342
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
343
- browser: "Firefox 124",
344
- os: "Windows 10",
345
- device: "Desktop",
346
- ip: "203.0.113.96",
347
- },
348
- location: { country: _locale.countryName, city: "Lucknow" },
349
- createdAt: daysAgo(9),
350
- lastActivity: daysAgo(4),
351
- expiresAt: daysAhead(19),
352
- isActive: true,
353
- },
354
- // -- Active: Admin — Chrome Android (admin monitors on mobile) -----------
355
- {
356
- id: "session-admin-chrome-android-001",
357
- userId: "user-admin-letitrip",
358
- deviceInfo: {
359
- userAgent: "Mozilla/5.0 (Linux; Android 14; Samsung Galaxy S24 Ultra) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36",
360
- browser: "Chrome 122",
361
- os: "Android 14",
362
- device: "Mobile",
363
- ip: "203.0.113.2",
364
- },
365
- location: { country: _locale.countryName, city: "Mumbai" },
366
- createdAt: daysAgo(3),
367
- lastActivity: daysAgo(1),
368
- expiresAt: daysAhead(26),
369
- isActive: true,
370
- },
371
- // -- Active: Admin — Safari macOS (secondary workstation) ----------------
372
- {
373
- id: "session-admin-safari-macos-001",
374
- userId: "user-admin-letitrip",
375
- deviceInfo: {
376
- userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
377
- browser: "Safari 17",
378
- os: "macOS 14",
379
- device: "Desktop",
380
- ip: "203.0.113.3",
381
- },
382
- location: { country: _locale.countryName, city: "Mumbai" },
383
- createdAt: daysAgo(1),
384
- lastActivity: daysAgo(0),
385
- expiresAt: daysAhead(29),
386
- isActive: true,
108
+ revokedAt: daysAgo(20),
109
+ revokedBy: "admin",
387
110
  },
388
111
  ];
@@ -1,7 +1,3 @@
1
- /**
2
- * Site Settings Seed Data
3
- * Global site configuration (singleton document)
4
- */
5
1
  import type { SiteSettingsDocument } from "../features/admin/schemas";
6
2
  export declare const siteSettingsSeedData: Partial<SiteSettingsDocument> & {
7
3
  adSettings: {