@mohasinac/appkit 2.7.53 → 2.7.54
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/DashboardLayoutClient.js +1 -1
- package/dist/_internal/server/jobs/core/auctionSettlement.js +6 -3
- package/dist/_internal/server/jobs/core/bundleStockSync.js +9 -7
- package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +12 -3
- package/dist/_internal/server/jobs/core/onProductStockChange.js +12 -13
- package/dist/_internal/server/jobs/core/onProductWrite.js +1 -3
- package/dist/_internal/server/jobs/handlers/onProductStockChange.js +11 -2
- package/dist/client.d.ts +2 -0
- package/dist/client.js +1 -0
- package/dist/constants/field-names.d.ts +4 -3
- package/dist/constants/field-names.js +8 -8
- package/dist/errors/error-codes.d.ts +3 -0
- package/dist/errors/error-codes.js +3 -0
- package/dist/errors/messages.d.ts +3 -0
- package/dist/errors/messages.js +3 -0
- package/dist/features/admin/types/product.types.d.ts +1 -1
- package/dist/features/admin/types/product.types.js +2 -3
- package/dist/features/auctions/actions/bid-actions.d.ts +9 -0
- package/dist/features/auctions/actions/bid-actions.js +61 -0
- package/dist/features/auctions/components/AuctionDetailPageView.d.ts +2 -1
- package/dist/features/auctions/components/AuctionDetailPageView.js +5 -4
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +3 -1
- package/dist/features/auctions/components/PlaceBidFormClient.js +32 -2
- package/dist/features/auctions/types/index.d.ts +1 -1
- package/dist/features/layout/AppLayoutShell.js +1 -1
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -11
- package/dist/features/products/api/[id]/route.js +4 -8
- package/dist/features/products/api/route.js +1 -3
- package/dist/features/products/components/AuctionsIndexListing.js +3 -11
- package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -10
- package/dist/features/products/components/ProductFilters.d.ts +33 -9
- package/dist/features/products/components/ProductFilters.js +6 -29
- package/dist/features/products/components/ProductForm.js +2 -3
- package/dist/features/products/constants/sieve.d.ts +162 -0
- package/dist/features/products/constants/sieve.js +95 -0
- package/dist/features/products/repository/products.repository.d.ts +5 -0
- package/dist/features/products/repository/products.repository.js +23 -3
- package/dist/features/products/schemas/firestore.d.ts +4 -4
- package/dist/features/products/schemas/firestore.js +2 -3
- package/dist/features/products/schemas/index.d.ts +6 -6
- package/dist/features/products/schemas/index.js +2 -6
- package/dist/features/products/types/index.d.ts +1 -1
- package/dist/features/seller/actions/offer-actions.js +2 -2
- package/dist/features/wishlist/types/index.d.ts +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +6 -4
- package/dist/seed/addresses-seed-data.d.ts +2 -18
- package/dist/seed/addresses-seed-data.js +137 -203
- package/dist/seed/bids-seed-data.d.ts +2 -8
- package/dist/seed/bids-seed-data.js +172 -648
- package/dist/seed/blog-posts-seed-data.d.ts +0 -5
- package/dist/seed/blog-posts-seed-data.js +341 -596
- package/dist/seed/carousel-slides-seed-data.d.ts +0 -5
- package/dist/seed/carousel-slides-seed-data.js +61 -192
- package/dist/seed/carousels-seed-data.js +18 -1
- package/dist/seed/cart-seed-data.d.ts +1 -18
- package/dist/seed/cart-seed-data.js +116 -293
- package/dist/seed/categories-seed-data.d.ts +0 -6
- package/dist/seed/categories-seed-data.js +1409 -1537
- package/dist/seed/claimed-coupons-seed-data.d.ts +0 -11
- package/dist/seed/claimed-coupons-seed-data.js +32 -29
- package/dist/seed/conversations-seed-data.d.ts +0 -6
- package/dist/seed/conversations-seed-data.js +132 -280
- package/dist/seed/coupon-usage-seed-data.d.ts +0 -16
- package/dist/seed/coupon-usage-seed-data.js +30 -44
- package/dist/seed/coupons-seed-data.d.ts +0 -6
- package/dist/seed/coupons-seed-data.js +141 -489
- package/dist/seed/events-seed-data.d.ts +0 -6
- package/dist/seed/events-seed-data.js +201 -379
- package/dist/seed/faq-seed-data.d.ts +0 -14
- package/dist/seed/faq-seed-data.js +609 -1184
- package/dist/seed/grouped-listings-seed-data.d.ts +119 -8
- package/dist/seed/grouped-listings-seed-data.js +148 -233
- package/dist/seed/history-seed-data.d.ts +0 -7
- package/dist/seed/history-seed-data.js +50 -54
- package/dist/seed/homepage-sections-seed-data.d.ts +0 -5
- package/dist/seed/homepage-sections-seed-data.js +83 -175
- package/dist/seed/index.d.ts +1 -1
- package/dist/seed/index.js +1 -1
- package/dist/seed/manifest.js +2 -2
- package/dist/seed/notifications-seed-data.d.ts +0 -6
- package/dist/seed/notifications-seed-data.js +309 -196
- package/dist/seed/offers-seed-data.d.ts +0 -8
- package/dist/seed/offers-seed-data.js +118 -197
- package/dist/seed/orders-seed-data.d.ts +2 -8
- package/dist/seed/orders-seed-data.js +248 -1510
- package/dist/seed/payouts-seed-data.d.ts +0 -6
- package/dist/seed/payouts-seed-data.js +102 -441
- package/dist/seed/products-auctions-seed-data.d.ts +1 -14
- package/dist/seed/products-auctions-seed-data.js +612 -1084
- package/dist/seed/products-preorders-seed-data.d.ts +119 -14
- package/dist/seed/products-preorders-seed-data.js +154 -455
- package/dist/seed/products-standard-seed-data.d.ts +1 -15
- package/dist/seed/products-standard-seed-data.js +1355 -4128
- package/dist/seed/reviews-seed-data.d.ts +2 -8
- package/dist/seed/reviews-seed-data.js +99 -1182
- package/dist/seed/scammers-seed-data.d.ts +0 -15
- package/dist/seed/scammers-seed-data.js +36 -37
- package/dist/seed/sessions-seed-data.d.ts +0 -13
- package/dist/seed/sessions-seed-data.js +58 -335
- package/dist/seed/site-settings-seed-data.d.ts +0 -4
- package/dist/seed/site-settings-seed-data.js +61 -52
- package/dist/seed/store-addresses-seed-data.js +27 -151
- package/dist/seed/store-extensions-seed-data.d.ts +0 -7
- package/dist/seed/store-extensions-seed-data.js +147 -261
- package/dist/seed/stores-seed-data.d.ts +0 -5
- package/dist/seed/stores-seed-data.js +222 -184
- package/dist/seed/sub-listings-seed-data.d.ts +119 -0
- package/dist/seed/sub-listings-seed-data.js +447 -0
- package/dist/seed/support-tickets-seed-data.d.ts +0 -7
- package/dist/seed/support-tickets-seed-data.js +82 -75
- package/dist/seed/users-seed-data.d.ts +0 -5
- package/dist/seed/users-seed-data.js +279 -634
- package/dist/seed/wishlists-seed-data.d.ts +0 -9
- package/dist/seed/wishlists-seed-data.js +36 -52
- package/dist/seo/json-ld.js +6 -4
- package/dist/styles.css +8052 -3
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/search-tokens.d.ts +2 -0
- package/dist/utils/search-tokens.js +21 -0
- package/package.json +2 -2
- 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
|
-
*
|
|
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
|
-
*
|
|
5
|
-
*
|
|
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
|
+
* scammersSeedData — Array of Partial<ScammerDocument> for seed runner
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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-
|
|
23
|
-
seoSlug: "scammer-
|
|
24
|
-
displayNames: ["
|
|
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", "
|
|
27
|
-
emails: ["
|
|
25
|
+
upiIds: ["9876543210@paytm", "ygokingcards@okicici"],
|
|
26
|
+
emails: ["ygokingcards.fake@gmail.com"],
|
|
28
27
|
socialMedia: [
|
|
29
|
-
{ platform: "instagram", handle: "
|
|
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
|
|
35
|
-
amountLost:
|
|
36
|
-
itemInvolved: "
|
|
37
|
-
evidence: ["/media/scammer-evidence-
|
|
38
|
-
reportedBy: "user-
|
|
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-
|
|
58
|
-
seoSlug: "scammer-fake-
|
|
59
|
-
displayNames: ["
|
|
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: ["
|
|
62
|
-
emails: ["
|
|
60
|
+
upiIds: ["konamiagentindia@ybl"],
|
|
61
|
+
emails: ["konami.agent.india@gmail.com"],
|
|
63
62
|
socialMedia: [
|
|
64
|
-
{ platform: "instagram", handle: "
|
|
65
|
-
{ platform: "telegram", handle: "
|
|
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
|
|
70
|
-
amountLost:
|
|
71
|
-
itemInvolved: "
|
|
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-
|
|
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
|
|
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: "
|
|
99
|
+
itemInvolved: "Duelist of the Roses Booster Box (Yu-Gi-Oh!)",
|
|
101
100
|
evidence: [],
|
|
102
|
-
reportedBy: "user-
|
|
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
|
-
|
|
2
|
-
|
|
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
|
-
*
|
|
7
|
-
* —
|
|
8
|
-
* —
|
|
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
|
-
*
|
|
14
|
-
*
|
|
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
|
-
//
|
|
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
|
|
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(
|
|
37
|
-
lastActivity: daysAgo(
|
|
38
|
-
expiresAt: daysAhead(
|
|
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
|
-
//
|
|
41
|
+
// Yugi — Chrome Android (active)
|
|
59
42
|
{
|
|
60
|
-
id: "session-
|
|
61
|
-
userId: "user-
|
|
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
|
|
64
|
-
browser: "Chrome
|
|
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.
|
|
50
|
+
ip: "203.0.113.10",
|
|
68
51
|
},
|
|
69
|
-
location: { country: _locale.countryName, city: "
|
|
70
|
-
createdAt: daysAgo(
|
|
71
|
-
lastActivity: daysAgo(
|
|
72
|
-
expiresAt: daysAhead(
|
|
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
|
-
//
|
|
58
|
+
// Kaiba — Safari macOS (active)
|
|
76
59
|
{
|
|
77
|
-
id: "session-
|
|
78
|
-
userId: "user-
|
|
60
|
+
id: "session-kaiba-safari-mac-001",
|
|
61
|
+
userId: "user-seto-kaiba",
|
|
79
62
|
deviceInfo: {
|
|
80
|
-
userAgent: "Mozilla/5.0 (
|
|
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.
|
|
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: "
|
|
155
|
-
createdAt: daysAgo(
|
|
156
|
-
lastActivity: daysAgo(
|
|
157
|
-
expiresAt: daysAhead(
|
|
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
|
-
//
|
|
161
|
-
// Tests: admin session list, cleanup queries, session expiry UI badge
|
|
75
|
+
// Yugi — expired old session
|
|
162
76
|
{
|
|
163
|
-
id: "session-
|
|
164
|
-
userId: "user-
|
|
77
|
+
id: "session-yugi-expired-001",
|
|
78
|
+
userId: "user-yugi-muto",
|
|
165
79
|
deviceInfo: {
|
|
166
|
-
userAgent: "Mozilla/5.0 (
|
|
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: "
|
|
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.
|
|
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: "
|
|
208
|
-
createdAt: daysAgo(
|
|
86
|
+
location: { country: _locale.countryName, city: "Domino City" },
|
|
87
|
+
createdAt: daysAgo(40),
|
|
209
88
|
lastActivity: daysAgo(36),
|
|
210
|
-
expiresAt: daysAgo(
|
|
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
|
-
//
|
|
216
|
-
// Tests: admin revoke session API, security audit UI
|
|
92
|
+
// Admin — revoked suspicious session
|
|
217
93
|
{
|
|
218
|
-
id: "session-
|
|
219
|
-
userId: "user-
|
|
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
|
|
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",
|
|
101
|
+
ip: "198.51.100.42",
|
|
226
102
|
},
|
|
227
|
-
location: { country: "Russia", city: "Moscow" },
|
|
228
|
-
createdAt: daysAgo(
|
|
229
|
-
lastActivity: daysAgo(
|
|
230
|
-
expiresAt: daysAhead(
|
|
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(
|
|
233
|
-
revokedBy: "admin",
|
|
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
|
];
|