@mohasinac/appkit 2.7.32 → 2.7.33

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.
@@ -0,0 +1 @@
1
+ export { renderFaqOg, renderFaqOgImage, type FaqOgData } from "./og";
@@ -0,0 +1 @@
1
+ export { renderFaqOg, renderFaqOgImage } from "./og";
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from "react";
2
+ export interface FaqOgData {
3
+ categoryLabel: string;
4
+ siteName: string;
5
+ }
6
+ export declare function renderFaqOg(category: string, opts: {
7
+ siteName: string;
8
+ }): ReactElement;
9
+ export declare function renderFaqOgImage(data: FaqOgData): ReactElement;
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function renderFaqOg(category, opts) {
3
+ const label = category
4
+ .replace(/-/g, " ")
5
+ .replace(/\b\w/g, (c) => c.toUpperCase());
6
+ return renderFaqOgImage({ categoryLabel: label, siteName: opts.siteName });
7
+ }
8
+ export function renderFaqOgImage(data) {
9
+ const { categoryLabel, siteName } = data;
10
+ return (_jsxs("div", { style: {
11
+ display: "flex",
12
+ width: "100%",
13
+ height: "100%",
14
+ background: "linear-gradient(135deg, #3570fc 0%, #1343de 100%)",
15
+ fontFamily: "sans-serif",
16
+ alignItems: "center",
17
+ justifyContent: "center",
18
+ padding: "80px",
19
+ position: "relative",
20
+ overflow: "hidden",
21
+ }, children: [_jsx("div", { style: {
22
+ position: "absolute",
23
+ inset: 0,
24
+ opacity: 0.06,
25
+ backgroundImage: "radial-gradient(circle at 25% 25%, white 1px, transparent 0), radial-gradient(circle at 75% 75%, white 1px, transparent 0)",
26
+ backgroundSize: "64px 64px",
27
+ } }), _jsxs("div", { style: {
28
+ position: "relative",
29
+ display: "flex",
30
+ flexDirection: "column",
31
+ alignItems: "center",
32
+ gap: 24,
33
+ textAlign: "center",
34
+ }, children: [_jsxs("div", { style: {
35
+ fontSize: 20,
36
+ color: "rgba(255,255,255,0.7)",
37
+ letterSpacing: 3,
38
+ textTransform: "uppercase",
39
+ }, children: [siteName, " \u00B7 Help Centre"] }), _jsx("div", { style: {
40
+ fontSize: 72,
41
+ fontWeight: 800,
42
+ color: "white",
43
+ lineHeight: 1.1,
44
+ letterSpacing: "-1px",
45
+ }, children: categoryLabel }), _jsx("div", { style: {
46
+ fontSize: 32,
47
+ color: "rgba(255,255,255,0.8)",
48
+ fontWeight: 400,
49
+ }, children: "Frequently Asked Questions" })] })] }));
50
+ }
@@ -1,3 +1,5 @@
1
1
  export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct } from "./data";
2
+ export { getReviewById } from "./og-data";
3
+ export { renderReviewOg, renderReviewOgImage, type ReviewOgData } from "./og";
2
4
  export { createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./actions";
3
5
  export { REVIEWS_PAGE_SIZE, REVIEW_MAX_RATING, REVIEW_MIN_RATING, REVIEW_IMAGES_MAX } from "../../../shared/features/reviews/config";
@@ -1,3 +1,5 @@
1
1
  export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct } from "./data";
2
+ export { getReviewById } from "./og-data";
3
+ export { renderReviewOg, renderReviewOgImage } from "./og";
2
4
  export { createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./actions";
3
5
  export { REVIEWS_PAGE_SIZE, REVIEW_MAX_RATING, REVIEW_MIN_RATING, REVIEW_IMAGES_MAX } from "../../../shared/features/reviews/config";
@@ -0,0 +1 @@
1
+ export declare const getReviewById: (id: string) => Promise<import("../../../..").ReviewDocument | null>;
@@ -0,0 +1,7 @@
1
+ import { cache } from "react";
2
+ import { reviewRepository } from "../../../../repositories";
3
+ export const getReviewById = cache(async (id) => {
4
+ if (!id)
5
+ return null;
6
+ return reviewRepository.findById(id).catch(() => null);
7
+ });
@@ -0,0 +1,19 @@
1
+ import type { ReactElement } from "react";
2
+ export interface ReviewOgData {
3
+ productTitle: string;
4
+ rating: number;
5
+ reviewerInitial: string;
6
+ reviewExcerpt?: string | null;
7
+ }
8
+ interface ReviewDocLike {
9
+ title?: string | null;
10
+ productName?: string | null;
11
+ rating?: number | null;
12
+ userName?: string | null;
13
+ body?: string | null;
14
+ }
15
+ export declare function renderReviewOg(doc: ReviewDocLike | null | undefined, opts: {
16
+ siteName: string;
17
+ }): ReactElement;
18
+ export declare function renderReviewOgImage(data: ReviewOgData, siteName: string): ReactElement;
19
+ export {};
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function stars(n) {
3
+ return "★".repeat(Math.min(5, Math.max(1, Math.round(n))));
4
+ }
5
+ export function renderReviewOg(doc, opts) {
6
+ return renderReviewOgImage({
7
+ productTitle: doc?.productName ?? doc?.title ?? "Collectible",
8
+ rating: doc?.rating ?? 5,
9
+ reviewerInitial: (doc?.userName?.[0] ?? "?").toUpperCase(),
10
+ reviewExcerpt: doc?.body ? doc.body.slice(0, 120) : null,
11
+ }, opts.siteName);
12
+ }
13
+ export function renderReviewOgImage(data, siteName) {
14
+ const { productTitle, rating, reviewerInitial, reviewExcerpt } = data;
15
+ return (_jsxs("div", { style: {
16
+ display: "flex",
17
+ width: "100%",
18
+ height: "100%",
19
+ background: "#0f172a",
20
+ fontFamily: "sans-serif",
21
+ alignItems: "center",
22
+ justifyContent: "center",
23
+ padding: "60px",
24
+ position: "relative",
25
+ }, children: [_jsx("div", { style: {
26
+ position: "absolute",
27
+ inset: 0,
28
+ background: "linear-gradient(135deg, #0f172a 0%, #1e293b 100%)",
29
+ } }), _jsxs("div", { style: {
30
+ position: "relative",
31
+ display: "flex",
32
+ flexDirection: "column",
33
+ width: "100%",
34
+ maxWidth: 1080,
35
+ gap: 32,
36
+ }, children: [_jsxs("div", { style: { fontSize: 18, color: "#94a3b8", letterSpacing: 2, textTransform: "uppercase" }, children: [siteName, " \u00B7 Customer Review"] }), _jsxs("div", { style: {
37
+ display: "flex",
38
+ alignItems: "center",
39
+ gap: 24,
40
+ }, children: [_jsx("div", { style: {
41
+ width: 80,
42
+ height: 80,
43
+ borderRadius: 40,
44
+ background: "linear-gradient(135deg, #3570fc, #e91e8c)",
45
+ display: "flex",
46
+ alignItems: "center",
47
+ justifyContent: "center",
48
+ fontSize: 36,
49
+ fontWeight: 700,
50
+ color: "white",
51
+ flexShrink: 0,
52
+ }, children: reviewerInitial }), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 4 }, children: [_jsx("div", { style: { fontSize: 32, color: "#f59e0b", letterSpacing: 2 }, children: stars(rating) }), _jsxs("div", { style: { fontSize: 20, color: "#64748b" }, children: [rating, "/5"] })] })] }), _jsx("div", { style: {
53
+ fontSize: 48,
54
+ fontWeight: 700,
55
+ color: "#f1f5f9",
56
+ lineHeight: 1.2,
57
+ display: "-webkit-box",
58
+ WebkitLineClamp: 2,
59
+ WebkitBoxOrient: "vertical",
60
+ overflow: "hidden",
61
+ }, children: productTitle }), reviewExcerpt && (_jsxs("div", { style: {
62
+ fontSize: 24,
63
+ color: "#94a3b8",
64
+ lineHeight: 1.5,
65
+ display: "-webkit-box",
66
+ WebkitLineClamp: 2,
67
+ WebkitBoxOrient: "vertical",
68
+ overflow: "hidden",
69
+ }, children: ["\u201C", reviewExcerpt, "\u201D"] }))] })] }));
70
+ }
@@ -1 +1,2 @@
1
1
  export * from "./data";
2
+ export { renderScamOg, renderScamOgImage, type ScamOgData } from "./og";
@@ -1 +1,2 @@
1
1
  export * from "./data";
2
+ export { renderScamOg, renderScamOgImage } from "./og";
@@ -0,0 +1,18 @@
1
+ import type { ReactElement } from "react";
2
+ export interface ScamOgData {
3
+ displayName: string;
4
+ scamTypeLabel: string;
5
+ reportCount: number;
6
+ }
7
+ interface ScammerDocLike {
8
+ displayNames?: string[];
9
+ scamType?: string;
10
+ incidents?: unknown[];
11
+ totalReports?: number;
12
+ }
13
+ export declare function renderScamOg(doc: ScammerDocLike | null | undefined, opts: {
14
+ siteName: string;
15
+ scamTypeLabel?: string;
16
+ }): ReactElement;
17
+ export declare function renderScamOgImage(data: ScamOgData, siteName: string): ReactElement;
18
+ export {};
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function renderScamOg(doc, opts) {
3
+ return renderScamOgImage({
4
+ displayName: doc?.displayNames?.[0] ?? "Unknown",
5
+ scamTypeLabel: opts.scamTypeLabel ?? doc?.scamType ?? "Scammer",
6
+ reportCount: doc?.totalReports ?? 0,
7
+ }, opts.siteName);
8
+ }
9
+ export function renderScamOgImage(data, siteName) {
10
+ const { displayName, scamTypeLabel, reportCount } = data;
11
+ return (_jsxs("div", { style: {
12
+ display: "flex",
13
+ width: "100%",
14
+ height: "100%",
15
+ background: "#0f172a",
16
+ fontFamily: "sans-serif",
17
+ alignItems: "center",
18
+ padding: "60px 80px",
19
+ position: "relative",
20
+ overflow: "hidden",
21
+ }, children: [_jsx("div", { style: {
22
+ position: "absolute",
23
+ inset: 0,
24
+ background: "linear-gradient(135deg, #1e0505 0%, #0f172a 60%)",
25
+ } }), _jsxs("div", { style: {
26
+ position: "relative",
27
+ display: "flex",
28
+ flexDirection: "column",
29
+ gap: 28,
30
+ width: "100%",
31
+ }, children: [_jsxs("div", { style: {
32
+ display: "flex",
33
+ alignItems: "center",
34
+ gap: 12,
35
+ }, children: [_jsx("div", { style: {
36
+ background: "#dc2626",
37
+ color: "white",
38
+ padding: "6px 18px",
39
+ borderRadius: 6,
40
+ fontSize: 16,
41
+ fontWeight: 700,
42
+ letterSpacing: 2,
43
+ textTransform: "uppercase",
44
+ }, children: "\u26A0 Verified Scammer" }), _jsxs("div", { style: { fontSize: 18, color: "#94a3b8", letterSpacing: 1 }, children: [siteName, " \u00B7 Scam Registry"] })] }), _jsx("div", { style: {
45
+ fontSize: 72,
46
+ fontWeight: 800,
47
+ color: "#f1f5f9",
48
+ lineHeight: 1.1,
49
+ letterSpacing: "-1px",
50
+ }, children: displayName }), _jsxs("div", { style: { display: "flex", gap: 24, alignItems: "center" }, children: [_jsx("div", { style: {
51
+ background: "#1e293b",
52
+ border: "1px solid #334155",
53
+ borderRadius: 8,
54
+ padding: "10px 20px",
55
+ fontSize: 22,
56
+ color: "#f87171",
57
+ fontWeight: 600,
58
+ }, children: scamTypeLabel }), reportCount > 0 && (_jsxs("div", { style: { fontSize: 22, color: "#64748b" }, children: [reportCount, " ", reportCount === 1 ? "report" : "reports"] }))] }), _jsx("div", { style: { fontSize: 20, color: "#64748b", marginTop: 8 }, children: "Do not transact with this individual. Verified by the LetItRip community." })] })] }));
59
+ }
@@ -385,4 +385,56 @@ export const conversationsSeedData = [
385
385
  createdAt: minsAgo(240),
386
386
  updatedAt: minsAgo(200),
387
387
  },
388
+ // â"€â"€ 9. Admin as buyer â€" MAFEX Miles Morales post-purchase tracking query â"€â"€
389
+ {
390
+ id: "conv-mafex-admin-priya-009",
391
+ buyerId: "user-admin-letitrip",
392
+ buyerDisplayName: "LetItRip Admin",
393
+ sellerDisplayName: "Priya Anand",
394
+ storeId: "store-tokyo-toys-india",
395
+ storeName: "Tokyo Toys India",
396
+ productId: "product-mafex-miles-morales-spiderman",
397
+ productTitle: "MAFEX No.240: Miles Morales Spider-Man (Across the Spider-Verse)",
398
+ messages: [
399
+ {
400
+ id: "msg-009-1",
401
+ senderId: "user-admin-letitrip",
402
+ senderRole: "buyer",
403
+ body: "Hi! My order for MAFEX Miles Morales shipped 2 days ago - tracking shows it left your city but has not updated since. Can you check with Shiprocket?",
404
+ isRead: true,
405
+ sentAt: daysAgo(3),
406
+ },
407
+ {
408
+ id: "msg-009-2",
409
+ senderId: "user-priya-anand",
410
+ senderRole: "seller",
411
+ body: "Hi! Yes, I raised a ticket with Shiprocket about that. They confirmed it is in transit at the Mumbai sorting facility - tracking updates can lag by 24-48 hours. Should arrive tomorrow or day after. Apologies for the delay in the scan!",
412
+ isRead: true,
413
+ sentAt: daysAgo(3),
414
+ },
415
+ {
416
+ id: "msg-009-3",
417
+ senderId: "user-admin-letitrip",
418
+ senderRole: "buyer",
419
+ body: "Thanks for following up. Will keep an eye on it. The figure is for a platform demo so I do need it by Friday - hope it clears in time.",
420
+ isRead: true,
421
+ sentAt: daysAgo(2),
422
+ },
423
+ {
424
+ id: "msg-009-4",
425
+ senderId: "user-priya-anand",
426
+ senderRole: "seller",
427
+ body: "Completely understand. I have asked Shiprocket to flag it for priority delivery. If it does not arrive by Thursday let me know and I will arrange a direct courier at no extra charge.",
428
+ isRead: false,
429
+ sentAt: daysAgo(2),
430
+ },
431
+ ],
432
+ lastMessage: "Completely understand. I have asked Shiprocket to flag it for priority delivery. If it does not arrive by Thursday let me know and I will arrange a direct courier at no extra charge.",
433
+ lastMessageAt: daysAgo(2),
434
+ unreadBuyer: 1,
435
+ unreadSeller: 0,
436
+ status: "active",
437
+ createdAt: daysAgo(3),
438
+ updatedAt: daysAgo(2),
439
+ },
388
440
  ];
@@ -204,6 +204,16 @@ export const notificationsSeedData = [
204
204
  { user: "user-anjali-verma", type: "WELCOME", title: "Welcome, Anjali!", message: "Use NEWUSER5 for ₹50 off your first order.", read: false, hours: 4 },
205
205
  { user: "user-pooja-sharma", type: "PROMOTION", title: "Wishlist sale — items in your wishlist are 15% off", message: "3 items in your wishlist are now on sale. Tap to view.", read: false, hours: 9 },
206
206
  ]),
207
+ // ── Admin role — system + operational notifications ─────────────────────
208
+ ...buildNotificationBatch([
209
+ { user: "user-admin-letitrip", type: "SYSTEM", title: "New seller registration: Gunpla Hub India", message: "Arjun Mehta has applied to open store Gunpla Hub India. Review their profile and approve or reject via the admin panel.", read: false, hours: 2 },
210
+ { user: "user-admin-letitrip", type: "SYSTEM", title: "Flagged listing: possible counterfeit Funko Pop", message: "Listing product-funko-pop-gojo-satoru was reported by 3 users for suspected counterfeit. Please review before the next buy cycle.", read: false, hours: 6 },
211
+ { user: "user-admin-letitrip", type: "SYSTEM", title: "Payout batch #12 processed — 6 stores, Rs 1.24L", message: "Payout batch for May Week 2 completed. 6 stores paid, 1 failed (IFSC mismatch — store-vintage-vault). Manual retry required.", read: true, hours: 24 },
212
+ { user: "user-admin-letitrip", type: "SYSTEM", title: "Support ticket escalated: order missing (high)", message: "Ticket ticket-rahul-order-001 was escalated from Simran Kaur. Buyer Rahul Sharma claims delivery was empty — courier claim filed. Needs admin review.", read: true, hours: 48 },
213
+ { user: "user-admin-letitrip", type: "SYSTEM", title: "Platform summary: week of May 12", message: "Week of May 12: 47 new orders (Rs 3.8L GMV), 12 new users, 2 new seller registrations, 0 chargebacks, 99.8% uptime. Full report in admin dashboard.", read: true, hours: 96 },
214
+ { user: "user-admin-letitrip", type: "REVIEW_APPROVED", title: "New 5-star review on LetItRip Official", message: "Naman Gupta left a 5-star review on figma Link (TotK): Best figma I own. Perfect packaging, zero damage.", read: true, hours: 36 },
215
+ { user: "user-admin-letitrip", type: "ORDER_SHIPPED", title: "Your Mew PSA 10 order has shipped", message: "Vintage Vault has dispatched your Mew 1st Edition PSA 10. Tracking: DTDC112233445. Estimated delivery in 3 business days.", read: true, hours: 240 },
216
+ ]),
207
217
  ];
208
218
  /**
209
219
  * Compact constructor for the P29 expansion. Keeps each row a single line of
@@ -24,7 +24,7 @@ export const sessionsSeedData = [
24
24
  // -- Active: Admin — Chrome Desktop (Windows) ----------------------------
25
25
  {
26
26
  id: "session-admin-chrome-desktop-001",
27
- userId: "user-admin-user-admin",
27
+ userId: "user-admin-letitrip",
28
28
  deviceInfo: {
29
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",
30
30
  browser: "Chrome 122",
@@ -351,4 +351,38 @@ export const sessionsSeedData = [
351
351
  expiresAt: daysAhead(19),
352
352
  isActive: true,
353
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,
387
+ },
354
388
  ];
@@ -32,7 +32,7 @@ export const usersSeedData = [
32
32
  showWishlist: false,
33
33
  bio: "LetItRip platform administrator.",
34
34
  },
35
- stats: { totalOrders: 4, auctionsWon: 1, itemsSold: 142, reviewsCount: 0 },
35
+ stats: { totalOrders: 7, auctionsWon: 1, itemsSold: 142, reviewsCount: 0 },
36
36
  metadata: {
37
37
  lastSignInTime: daysAgo(1),
38
38
  creationTime: daysAgo(400).toISOString(),
@@ -56,11 +56,15 @@ export const wishlistsSeedData = [
56
56
  { productId: "preorder-beyblade-x-bx10-booster", productType: "preorder", addedAt: daysAgo(3) },
57
57
  { productId: "preorder-shf-broly-super-hero", productType: "preorder", addedAt: daysAgo(1) },
58
58
  ]),
59
- // Admin's personal wishlist — rare high-value collectibles
59
+ // Admin's personal wishlist — mix of listing types to test all flows
60
60
  makeDoc("user-admin-letitrip", [
61
61
  { productId: "product-mafex-miles-morales-spiderman", productType: "product", addedAt: daysAgo(60) },
62
62
  { productId: "product-figma-link-totk", productType: "product", addedAt: daysAgo(45) },
63
63
  { productId: "auction-pokemon-mew-1st-edition-psa10", productType: "auction", addedAt: daysAgo(20) },
64
64
  { productId: "product-alter-rem-wedding-scale", productType: "product", addedAt: daysAgo(8) },
65
+ { productId: "prize-pokemon-mystery-box-june", productType: "product", addedAt: daysAgo(5) },
66
+ { productId: "prize-hot-wheels-treasure-hunt", productType: "product", addedAt: daysAgo(4) },
67
+ { productId: "preorder-gundam-pg-unicorn-ver15", productType: "preorder", addedAt: daysAgo(3) },
68
+ { productId: "auction-pokemon-charizard-base1-psa9", productType: "auction", addedAt: daysAgo(2) },
65
69
  ]),
66
70
  ];
@@ -55,7 +55,9 @@ export { getCouponByCode, applyCouponAction, createCouponAction, updateCouponAct
55
55
  export { getWishlistForUser, isProductInWishlist, addToWishlistAction, removeFromWishlistAction, mergeGuestWishlistAction, WISHLIST_MAX, WISHLIST_GUEST_STORAGE_KEY, WishlistCapError, } from "./_internal/server/features/wishlist/index";
56
56
  export { getHistoryForUser, trackProductViewAction, mergeGuestHistoryAction, HISTORY_MAX, HISTORY_GUEST_STORAGE_KEY, } from "./_internal/server/features/history/index";
57
57
  export { getHomepageInitial, getHomepageSections, getHeroCarouselSlides, } from "./_internal/server/features/homepage/index";
58
- export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
58
+ export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, getReviewById, renderReviewOg, renderReviewOgImage, type ReviewOgData, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
59
+ export { renderFaqOg, renderFaqOgImage, type FaqOgData, } from "./_internal/server/features/faqs/index";
60
+ export { renderScamOg, renderScamOgImage, type ScamOgData, getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached, } from "./_internal/server/features/scams/index";
59
61
  export { getSearchResults, searchAction, type SearchQuery, } from "./_internal/server/features/search/index";
60
62
  export { getCategoryForDetail, listRootCategories, listFeaturedCategories, listMenuCategories, getCategoryTree, listSitemapCategories, CATEGORIES_PAGE_SIZE, CATEGORIES_ROOT_TIER, CATEGORIES_MAX_DEPTH, CATEGORIES_SITEMAP_LIMIT, CATEGORIES_FEATURED_LIMIT, CATEGORIES_MENU_LIMIT, } from "./_internal/server/features/categories/index";
61
63
  export { getGroupedListingForDetail, getGroupedListingWithItems, listGroupedListings, listFeaturedGroupedListings, listSitemapGroupedListings, GROUPED_LISTINGS_PAGE_SIZE, GROUPED_LISTINGS_FEATURED_LIMIT, GROUPED_LISTINGS_SITEMAP_LIMIT, type GroupedListingWithItems, type ListGroupedListingsParams, type SitemapGroupedListing, } from "./_internal/server/features/grouped/index";
@@ -76,7 +76,9 @@ export { getHistoryForUser, trackProductViewAction, mergeGuestHistoryAction, HIS
76
76
  // S5: homepage data layer
77
77
  export { getHomepageInitial, getHomepageSections, getHeroCarouselSlides, } from "./_internal/server/features/homepage/index";
78
78
  // S5: reviews data layer + actions
79
- export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
79
+ export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, getReviewById, renderReviewOg, renderReviewOgImage, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
80
+ export { renderFaqOg, renderFaqOgImage, } from "./_internal/server/features/faqs/index";
81
+ export { renderScamOg, renderScamOgImage, getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached, } from "./_internal/server/features/scams/index";
80
82
  // S5: search data layer + action
81
83
  export { getSearchResults, searchAction, } from "./_internal/server/features/search/index";
82
84
  // S3: categories data layer
package/dist/server.d.ts CHANGED
@@ -470,6 +470,10 @@ export { renderBlogOg, renderBlogOgImage, type BlogOgData } from "./_internal/se
470
470
  export { renderEventOg, renderEventOgImage, type EventOgData } from "./_internal/server/features/events/og";
471
471
  export { renderSublistingCategoryOg, renderSublistingCategoryOgImage, type SublistingCategoryOgData } from "./_internal/server/features/sublisting-categories/og";
472
472
  export { renderProfileOg, renderPrivateProfileOgImage, renderUserProfileOgImage, type UserProfileOgData } from "./_internal/server/features/profile/og";
473
+ export { renderReviewOg, renderReviewOgImage, type ReviewOgData } from "./_internal/server/features/reviews/og";
474
+ export { renderFaqOg, renderFaqOgImage, type FaqOgData } from "./_internal/server/features/faqs/og";
475
+ export { renderScamOg, renderScamOgImage, type ScamOgData } from "./_internal/server/features/scams/og";
476
+ export { getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached } from "./_internal/server/features/scams/data";
473
477
  export { orderDocumentToOrder } from "./_internal/server/features/orders/adapters";
474
478
  export { LISTING_TYPE_CAPABILITIES, capabilityFor, canAddToCart, canBid, supportsShipping, requiresVendorVerified, requiresJurisdictionCheck, hasInstantFulfillment, assertNever, } from "./_internal/shared/listing-types/capabilities";
475
479
  export type { ListingTypeCapability } from "./_internal/shared/listing-types/capabilities";
package/dist/server.js CHANGED
@@ -1345,6 +1345,10 @@ export { renderBlogOg, renderBlogOgImage } from "./_internal/server/features/blo
1345
1345
  export { renderEventOg, renderEventOgImage } from "./_internal/server/features/events/og";
1346
1346
  export { renderSublistingCategoryOg, renderSublistingCategoryOgImage } from "./_internal/server/features/sublisting-categories/og";
1347
1347
  export { renderProfileOg, renderPrivateProfileOgImage, renderUserProfileOgImage } from "./_internal/server/features/profile/og";
1348
+ export { renderReviewOg, renderReviewOgImage } from "./_internal/server/features/reviews/og";
1349
+ export { renderFaqOg, renderFaqOgImage } from "./_internal/server/features/faqs/og";
1350
+ export { renderScamOg, renderScamOgImage } from "./_internal/server/features/scams/og";
1351
+ export { getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached } from "./_internal/server/features/scams/data";
1348
1352
  // Adapters
1349
1353
  export { orderDocumentToOrder } from "./_internal/server/features/orders/adapters";
1350
1354
  // Listing-type capability registry — SB-UNI X1.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mohasinac/appkit",
3
- "version": "2.7.32",
3
+ "version": "2.7.33",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"