@mohasinac/appkit 2.7.49 → 2.7.52

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 (232) hide show
  1. package/dist/_internal/client/features/layout/SidebarCollapseToggle.d.ts +19 -0
  2. package/dist/_internal/client/features/layout/SidebarCollapseToggle.js +15 -0
  3. package/dist/_internal/client/features/layout/index.d.ts +2 -0
  4. package/dist/_internal/client/features/layout/index.js +1 -0
  5. package/dist/_internal/server/features/checkout/actions.js +25 -2
  6. package/dist/_internal/server/features/promotions/actions.js +3 -1
  7. package/dist/_internal/server/jobs/core/__tests__/couponExpiry.test.d.ts +1 -0
  8. package/dist/_internal/server/jobs/core/__tests__/couponExpiry.test.js +65 -0
  9. package/dist/_internal/server/jobs/core/__tests__/listingProcessor.test.d.ts +1 -0
  10. package/dist/_internal/server/jobs/core/__tests__/listingProcessor.test.js +163 -0
  11. package/dist/_internal/server/jobs/core/__tests__/mediaTmpCleanup.test.d.ts +1 -0
  12. package/dist/_internal/server/jobs/core/__tests__/mediaTmpCleanup.test.js +115 -0
  13. package/dist/_internal/server/jobs/core/__tests__/pendingOrderTimeout.test.d.ts +1 -0
  14. package/dist/_internal/server/jobs/core/__tests__/pendingOrderTimeout.test.js +96 -0
  15. package/dist/_internal/shared/actions/action-registry.js +149 -0
  16. package/dist/client.d.ts +45 -6
  17. package/dist/client.js +27 -4
  18. package/dist/constants/api-endpoints.d.ts +42 -0
  19. package/dist/constants/api-endpoints.js +14 -0
  20. package/dist/features/_guide-cls.d.ts +13 -0
  21. package/dist/features/_guide-cls.js +14 -0
  22. package/dist/features/about/components/HelpPageView.js +29 -26
  23. package/dist/features/account/components/BuyerAccountGuideView.d.ts +1 -0
  24. package/dist/features/account/components/BuyerAccountGuideView.js +39 -0
  25. package/dist/features/account/components/BuyerAuctionsGuideView.d.ts +1 -0
  26. package/dist/features/account/components/BuyerAuctionsGuideView.js +38 -0
  27. package/dist/features/account/components/BuyerOrdersGuideView.d.ts +1 -0
  28. package/dist/features/account/components/BuyerOrdersGuideView.js +48 -0
  29. package/dist/features/account/components/BuyerShoppingGuideView.d.ts +1 -0
  30. package/dist/features/account/components/BuyerShoppingGuideView.js +38 -0
  31. package/dist/features/account/components/UserSidebar.js +2 -1
  32. package/dist/features/admin/components/AdminAnalyticsGuideView.d.ts +1 -0
  33. package/dist/features/admin/components/AdminAnalyticsGuideView.js +24 -0
  34. package/dist/features/admin/components/AdminBlogEditorView.js +102 -75
  35. package/dist/features/admin/components/AdminBundleEditorView.js +20 -14
  36. package/dist/features/admin/components/AdminBundlesView.d.ts +1 -3
  37. package/dist/features/admin/components/AdminBundlesView.js +173 -52
  38. package/dist/features/admin/components/AdminCatalogGuideView.d.ts +1 -0
  39. package/dist/features/admin/components/AdminCatalogGuideView.js +28 -0
  40. package/dist/features/admin/components/AdminContentGuideView.d.ts +1 -0
  41. package/dist/features/admin/components/AdminContentGuideView.js +36 -0
  42. package/dist/features/admin/components/AdminCouponEditorView.js +1 -1
  43. package/dist/features/admin/components/AdminGuideHubView.d.ts +5 -0
  44. package/dist/features/admin/components/AdminGuideHubView.js +79 -0
  45. package/dist/features/admin/components/AdminOrdersGuideView.d.ts +1 -0
  46. package/dist/features/admin/components/AdminOrdersGuideView.js +44 -0
  47. package/dist/features/admin/components/AdminProductsView.js +8 -3
  48. package/dist/features/admin/components/AdminSidebar.js +2 -1
  49. package/dist/features/admin/components/AdminSiteConfigGuideView.d.ts +1 -0
  50. package/dist/features/admin/components/AdminSiteConfigGuideView.js +21 -0
  51. package/dist/features/admin/components/AdminStoresGuideView.d.ts +1 -0
  52. package/dist/features/admin/components/AdminStoresGuideView.js +32 -0
  53. package/dist/features/admin/components/AdminTeamGuideView.d.ts +1 -0
  54. package/dist/features/admin/components/AdminTeamGuideView.js +33 -0
  55. package/dist/features/admin/components/AdminTrustGuideView.d.ts +1 -0
  56. package/dist/features/admin/components/AdminTrustGuideView.js +40 -0
  57. package/dist/features/admin/components/AdminUsersGuideView.d.ts +1 -0
  58. package/dist/features/admin/components/AdminUsersGuideView.js +38 -0
  59. package/dist/features/auth/repository/session.repository.js +16 -1
  60. package/dist/features/cart/hooks/useAddToCart.d.ts +2 -0
  61. package/dist/features/cart/hooks/useAddToCart.js +2 -0
  62. package/dist/features/cart/hooks/useGuestCart.d.ts +2 -0
  63. package/dist/features/cart/utils/guest-cart.d.ts +7 -0
  64. package/dist/features/cart/utils/pending-ops.d.ts +6 -0
  65. package/dist/features/categories/components/CategoryBundlesListing.js +3 -25
  66. package/dist/features/categories/components/CategoryProductsListing.js +6 -10
  67. package/dist/features/categories/components/index.d.ts +0 -2
  68. package/dist/features/categories/components/index.js +0 -1
  69. package/dist/features/categories/schemas/firestore.d.ts +9 -0
  70. package/dist/features/events/components/AdminEventEditorView.js +223 -269
  71. package/dist/features/events/components/EventRaffleWinnerView.d.ts +9 -1
  72. package/dist/features/events/components/EventRaffleWinnerView.js +3 -3
  73. package/dist/features/events/components/SpinWheelView.js +3 -3
  74. package/dist/features/grouped/repository/grouped-listings.repository.d.ts +9 -0
  75. package/dist/features/grouped/repository/grouped-listings.repository.js +12 -0
  76. package/dist/features/layout/BottomNavLayout.d.ts +5 -0
  77. package/dist/features/layout/BottomNavLayout.js +21 -0
  78. package/dist/features/layout/TitleBar.js +7 -1
  79. package/dist/features/layout/TitleBarLayout.d.ts +8 -2
  80. package/dist/features/layout/TitleBarLayout.js +11 -7
  81. package/dist/features/media/upload/MediaUploadField.js +1 -1
  82. package/dist/features/orders/schemas/index.d.ts +2 -2
  83. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +12 -6
  84. package/dist/features/products/components/AuctionsIndexListing.js +3 -1
  85. package/dist/features/products/components/MarketplaceBundleCard.d.ts +21 -0
  86. package/dist/features/products/components/MarketplaceBundleCard.js +56 -0
  87. package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
  88. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +3 -1
  89. package/dist/features/products/components/PrizeDrawEntryActions.js +8 -12
  90. package/dist/features/products/components/ProductDetailActions.d.ts +5 -1
  91. package/dist/features/products/components/ProductDetailActions.js +3 -1
  92. package/dist/features/products/components/ProductDetailPageView.d.ts +2 -0
  93. package/dist/features/products/components/ProductDetailPageView.js +4 -0
  94. package/dist/features/products/components/ProductGrid.js +3 -3
  95. package/dist/features/products/components/ProductsIndexListing.js +18 -9
  96. package/dist/features/products/components/index.d.ts +2 -4
  97. package/dist/features/products/components/index.js +1 -2
  98. package/dist/features/promotions/components/CouponCard.d.ts +11 -1
  99. package/dist/features/promotions/components/CouponCard.js +36 -2
  100. package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +27 -0
  101. package/dist/features/promotions/repository/claimed-coupons.repository.js +115 -0
  102. package/dist/features/promotions/schemas/firestore.d.ts +34 -0
  103. package/dist/features/promotions/schemas/firestore.js +14 -1
  104. package/dist/features/reviews/components/index.d.ts +0 -2
  105. package/dist/features/reviews/components/index.js +0 -1
  106. package/dist/features/seller/components/BrandInlineSelect.js +23 -3
  107. package/dist/features/seller/components/CategoryInlineSelect.js +20 -3
  108. package/dist/features/seller/components/SellerAddressesView.js +3 -2
  109. package/dist/features/seller/components/SellerAnalyticsAlertsView.d.ts +6 -0
  110. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +124 -0
  111. package/dist/features/seller/components/SellerAnalyticsView.d.ts +2 -0
  112. package/dist/features/seller/components/SellerAnalyticsView.js +17 -9
  113. package/dist/features/seller/components/SellerBidsView.js +33 -3
  114. package/dist/features/seller/components/SellerBundlesView.d.ts +5 -0
  115. package/dist/features/seller/components/SellerBundlesView.js +104 -0
  116. package/dist/features/seller/components/SellerClassifiedView.d.ts +5 -0
  117. package/dist/features/seller/components/SellerClassifiedView.js +113 -0
  118. package/dist/features/seller/components/SellerDashboardView.js +19 -7
  119. package/dist/features/seller/components/SellerDigitalCodesView.d.ts +5 -0
  120. package/dist/features/seller/components/SellerDigitalCodesView.js +115 -0
  121. package/dist/features/seller/components/SellerGoogleReviewsView.d.ts +14 -0
  122. package/dist/features/seller/components/SellerGoogleReviewsView.js +95 -0
  123. package/dist/features/seller/components/SellerGroupedListingsView.d.ts +6 -0
  124. package/dist/features/seller/components/SellerGroupedListingsView.js +112 -0
  125. package/dist/features/seller/components/SellerLiveView.d.ts +5 -0
  126. package/dist/features/seller/components/SellerLiveView.js +113 -0
  127. package/dist/features/seller/components/SellerOrdersView.js +53 -2
  128. package/dist/features/seller/components/SellerPayoutMethodsView.d.ts +7 -0
  129. package/dist/features/seller/components/SellerPayoutMethodsView.js +120 -0
  130. package/dist/features/seller/components/SellerPayoutSettingsView.js +50 -12
  131. package/dist/features/seller/components/SellerProductShell.d.ts +3 -1
  132. package/dist/features/seller/components/SellerProductShell.js +35 -11
  133. package/dist/features/seller/components/SellerProductsCards.d.ts +19 -0
  134. package/dist/features/seller/components/SellerProductsCards.js +19 -0
  135. package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +14 -0
  136. package/dist/features/seller/components/SellerProductsFilterDrawer.js +22 -0
  137. package/dist/features/seller/components/SellerProductsView.d.ts +3 -1
  138. package/dist/features/seller/components/SellerProductsView.js +92 -49
  139. package/dist/features/seller/components/SellerReviewsView.js +67 -4
  140. package/dist/features/seller/components/SellerShippingConfigsView.d.ts +7 -0
  141. package/dist/features/seller/components/SellerShippingConfigsView.js +149 -0
  142. package/dist/features/seller/components/SellerShippingView.js +37 -10
  143. package/dist/features/seller/components/SellerSidebar.js +2 -1
  144. package/dist/features/seller/components/SellerStoreCategoriesView.d.ts +9 -0
  145. package/dist/features/seller/components/SellerStoreCategoriesView.js +122 -0
  146. package/dist/features/seller/components/SellerStorefrontView.d.ts +0 -7
  147. package/dist/features/seller/components/SellerStorefrontView.js +26 -29
  148. package/dist/features/seller/components/SellerTemplatesView.d.ts +10 -0
  149. package/dist/features/seller/components/SellerTemplatesView.js +265 -0
  150. package/dist/features/seller/components/index.d.ts +26 -0
  151. package/dist/features/seller/components/index.js +13 -0
  152. package/dist/features/seller/components/seller-products-styles.d.ts +7 -0
  153. package/dist/features/seller/components/seller-products-styles.js +14 -0
  154. package/dist/features/shell/FormShell.d.ts +7 -1
  155. package/dist/features/shell/FormShell.js +5 -2
  156. package/dist/features/store-extensions/index.d.ts +4 -0
  157. package/dist/features/store-extensions/index.js +4 -0
  158. package/dist/features/store-extensions/repository/rbac.repositories.d.ts +23 -0
  159. package/dist/features/store-extensions/repository/rbac.repositories.js +32 -0
  160. package/dist/features/store-extensions/repository/store-extensions.repositories.d.ts +91 -0
  161. package/dist/features/store-extensions/repository/store-extensions.repositories.js +127 -0
  162. package/dist/features/store-extensions/schemas/firestore.d.ts +244 -0
  163. package/dist/features/store-extensions/schemas/firestore.js +158 -0
  164. package/dist/features/store-extensions/schemas/rbac.d.ts +65 -0
  165. package/dist/features/store-extensions/schemas/rbac.js +43 -0
  166. package/dist/features/stores/api/[storeSlug]/reviews/route.js +49 -7
  167. package/dist/features/stores/components/InteractiveStoreCard.js +7 -3
  168. package/dist/features/stores/components/StoreCapabilitiesGuideView.d.ts +3 -0
  169. package/dist/features/stores/components/StoreCapabilitiesGuideView.js +101 -0
  170. package/dist/features/stores/components/StoreFinanceGuideView.d.ts +3 -0
  171. package/dist/features/stores/components/StoreFinanceGuideView.js +79 -0
  172. package/dist/features/stores/components/StoreGuideHubView.d.ts +5 -0
  173. package/dist/features/stores/components/StoreGuideHubView.js +89 -0
  174. package/dist/features/stores/components/StoreListingsGuideView.d.ts +3 -0
  175. package/dist/features/stores/components/StoreListingsGuideView.js +151 -0
  176. package/dist/features/stores/components/StoreOrdersGuideView.d.ts +3 -0
  177. package/dist/features/stores/components/StoreOrdersGuideView.js +122 -0
  178. package/dist/features/stores/components/StoreProductsListing.js +6 -10
  179. package/dist/features/stores/components/StoreReviewsListing.js +100 -23
  180. package/dist/features/stores/components/StoreSettingsGuideView.d.ts +3 -0
  181. package/dist/features/stores/components/StoreSettingsGuideView.js +56 -0
  182. package/dist/features/stores/components/index.d.ts +12 -1
  183. package/dist/features/stores/components/index.js +6 -1
  184. package/dist/features/stores/hooks/useStores.d.ts +5 -0
  185. package/dist/features/stores/hooks/useStores.js +10 -0
  186. package/dist/features/stores/manifest.js +1 -1
  187. package/dist/features/stores/schemas/firestore.d.ts +2 -0
  188. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +13 -2
  189. package/dist/index.d.ts +60 -9
  190. package/dist/index.js +66 -15
  191. package/dist/next/routing/route-map.d.ts +134 -0
  192. package/dist/next/routing/route-map.js +59 -0
  193. package/dist/providers/db-firebase/__tests__/filter-aliases.test.d.ts +1 -0
  194. package/dist/providers/db-firebase/__tests__/filter-aliases.test.js +93 -0
  195. package/dist/providers/db-firebase/sieve.d.ts +49 -0
  196. package/dist/providers/db-firebase/sieve.js +61 -8
  197. package/dist/react/hooks/useFormStatePreservation.d.ts +17 -0
  198. package/dist/react/hooks/useFormStatePreservation.js +62 -0
  199. package/dist/react/hooks/useInlineRowEdit.d.ts +24 -0
  200. package/dist/react/hooks/useInlineRowEdit.js +68 -0
  201. package/dist/react/index.d.ts +4 -0
  202. package/dist/react/index.js +4 -0
  203. package/dist/repositories/index.d.ts +5 -0
  204. package/dist/repositories/index.js +7 -0
  205. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  206. package/dist/seed/claimed-coupons-seed-data.d.ts +13 -0
  207. package/dist/seed/claimed-coupons-seed-data.js +79 -0
  208. package/dist/seed/index.d.ts +2 -0
  209. package/dist/seed/index.js +3 -0
  210. package/dist/seed/manifest.js +17 -0
  211. package/dist/seed/store-extensions-seed-data.d.ts +19 -0
  212. package/dist/seed/store-extensions-seed-data.js +421 -0
  213. package/dist/tailwind-utilities.css +1 -1
  214. package/dist/ui/components/Button.style.css +20 -12
  215. package/dist/ui/components/ClaimCouponButton.d.ts +28 -0
  216. package/dist/ui/components/ClaimCouponButton.js +89 -0
  217. package/dist/ui/components/ListingToolbar.d.ts +8 -1
  218. package/dist/ui/components/ListingToolbar.js +4 -2
  219. package/dist/ui/components/QuickCreateModal.d.ts +15 -0
  220. package/dist/ui/components/QuickCreateModal.js +48 -0
  221. package/dist/ui/components/QuickCreateModal.style.css +84 -0
  222. package/dist/ui/components/StickyBottomBar.d.ts +22 -0
  223. package/dist/ui/components/StickyBottomBar.js +20 -0
  224. package/dist/ui/components/VacationBanner.d.ts +11 -0
  225. package/dist/ui/components/VacationBanner.js +16 -0
  226. package/dist/ui/components/__tests__/BulkActionBar.test.d.ts +1 -0
  227. package/dist/ui/components/__tests__/BulkActionBar.test.js +96 -0
  228. package/dist/ui/components/__tests__/ListingToolbar.test.d.ts +1 -0
  229. package/dist/ui/components/__tests__/ListingToolbar.test.js +125 -0
  230. package/dist/ui/index.d.ts +9 -1
  231. package/dist/ui/index.js +4 -0
  232. package/package.json +8 -2
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Claimed Coupons Seed Data — plan §10.
3
+ *
4
+ * Top-level `claimedCoupons` collection (one doc per user × coupon). These
5
+ * rows populate the /user/coupons wallet with one example per status so the
6
+ * tabs (Active / Expired / Used) all have something to render in demo.
7
+ *
8
+ * Coupon snapshots mirror coupons-seed-data.ts (WELCOME10, POKEMON25,
9
+ * FREESHIP999) so the discount badge labels render correctly. Seed user is
10
+ * `user-mohsin-c` to match the dev-account convention used elsewhere.
11
+ */
12
+ import { createClaimedCouponId } from "../features/promotions/schemas";
13
+ const NOW = new Date();
14
+ const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
15
+ const daysAhead = (n) => new Date(NOW.getTime() + n * 86400000);
16
+ export const claimedCouponsSeedData = [
17
+ // Active — won from a spin wheel, expires in 14 days
18
+ {
19
+ id: createClaimedCouponId("user-mohsin-c", "WELCOME10"),
20
+ userId: "user-mohsin-c",
21
+ couponId: "coupon-welcome10",
22
+ couponCode: "WELCOME10",
23
+ source: "spin",
24
+ couponSnapshot: {
25
+ name: "Welcome 10% Off",
26
+ description: "10% off your first order across the marketplace.",
27
+ type: "percentage",
28
+ scope: "admin",
29
+ discount: { value: 10, maxDiscount: 50000, minPurchase: 99900 },
30
+ restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: false },
31
+ },
32
+ status: "active",
33
+ expiresAt: daysAhead(14),
34
+ claimedAt: daysAgo(2),
35
+ updatedAt: daysAgo(2),
36
+ },
37
+ // Expired — manually claimed 30 days ago, no purchase made
38
+ {
39
+ id: createClaimedCouponId("user-mohsin-c", "POKEMON25"),
40
+ userId: "user-mohsin-c",
41
+ couponId: "coupon-pokemon25",
42
+ couponCode: "POKEMON25",
43
+ source: "manual",
44
+ couponSnapshot: {
45
+ name: "Pokémon 25% Off",
46
+ description: "25% off Pokémon TCG products.",
47
+ type: "percentage",
48
+ scope: "admin",
49
+ discount: { value: 25, maxDiscount: 250000, minPurchase: 199900 },
50
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
51
+ },
52
+ status: "expired",
53
+ expiresAt: daysAgo(5),
54
+ claimedAt: daysAgo(45),
55
+ updatedAt: daysAgo(5),
56
+ },
57
+ // Used — applied to a prior order
58
+ {
59
+ id: createClaimedCouponId("user-mohsin-c", "FREESHIP999"),
60
+ userId: "user-mohsin-c",
61
+ couponId: "coupon-freeship999",
62
+ couponCode: "FREESHIP999",
63
+ source: "manual",
64
+ couponSnapshot: {
65
+ name: "Free Shipping Over ₹999",
66
+ description: "Free shipping on orders above ₹999.",
67
+ type: "free_shipping",
68
+ scope: "admin",
69
+ discount: { value: 0, minPurchase: 99900 },
70
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
71
+ },
72
+ status: "used",
73
+ expiresAt: daysAhead(60),
74
+ usedAt: daysAgo(10),
75
+ usedOrderId: "order-3-20260508-a1b2c3",
76
+ claimedAt: daysAgo(20),
77
+ updatedAt: daysAgo(10),
78
+ },
79
+ ];
@@ -56,6 +56,7 @@ export { bidsSeedData } from "./bids-seed-data";
56
56
  export { couponsSeedData } from "./coupons-seed-data";
57
57
  export type { CouponUsageSeedRecord } from "./coupon-usage-seed-data";
58
58
  export { couponUsageSeedData } from "./coupon-usage-seed-data";
59
+ export { claimedCouponsSeedData } from "./claimed-coupons-seed-data";
59
60
  export { eventsSeedData, eventEntriesSeedData } from "./events-seed-data";
60
61
  export { payoutsSeedData } from "./payouts-seed-data";
61
62
  export { notificationsSeedData } from "./notifications-seed-data";
@@ -73,6 +74,7 @@ export { scammersSeedData } from "./scammers-seed-data";
73
74
  export { supportTicketsSeedData } from "./support-tickets-seed-data";
74
75
  export { productFeaturesSeedData } from "./product-features-seed-data";
75
76
  export { offersSeedData } from "./offers-seed-data";
77
+ export { payoutMethodsSeedData, shippingConfigsSeedData, analyticsCardsSeedData, analyticsAlertsSeedData, storeCategoriesSeedData, listingTemplatesSeedData, moderationQueueSeedData, reportsSeedData, itemRequestsSeedData, storeWhatsAppConfigSeedData, storeGoogleConfigSeedData, } from "./store-extensions-seed-data";
76
78
  export type { SeedManifest, SeedManifestEntry } from "./manifest";
77
79
  export { SEED_MANIFEST } from "./manifest";
78
80
  export type { FirestoreIndexConfig } from "./firestore-indexes";
@@ -43,6 +43,7 @@ export { cartsSeedData } from "./cart-seed-data";
43
43
  export { bidsSeedData } from "./bids-seed-data";
44
44
  export { couponsSeedData } from "./coupons-seed-data";
45
45
  export { couponUsageSeedData } from "./coupon-usage-seed-data";
46
+ export { claimedCouponsSeedData } from "./claimed-coupons-seed-data";
46
47
  export { eventsSeedData, eventEntriesSeedData } from "./events-seed-data";
47
48
  export { payoutsSeedData } from "./payouts-seed-data";
48
49
  export { notificationsSeedData } from "./notifications-seed-data";
@@ -62,6 +63,8 @@ export { scammersSeedData } from "./scammers-seed-data";
62
63
  export { supportTicketsSeedData } from "./support-tickets-seed-data";
63
64
  export { productFeaturesSeedData } from "./product-features-seed-data";
64
65
  export { offersSeedData } from "./offers-seed-data";
66
+ // S-STORE Extensions (Tier S-STORE) — 11 new collections
67
+ export { payoutMethodsSeedData, shippingConfigsSeedData, analyticsCardsSeedData, analyticsAlertsSeedData, storeCategoriesSeedData, listingTemplatesSeedData, moderationQueueSeedData, reportsSeedData, itemRequestsSeedData, storeWhatsAppConfigSeedData, storeGoogleConfigSeedData, } from "./store-extensions-seed-data";
65
68
  export { SEED_MANIFEST } from "./manifest";
66
69
  export { mergeFirestoreIndices, generateMergedFirestoreIndexFile, } from "./firestore-indexes";
67
70
  // Test utilities (Firestore emulator + PII assertion)
@@ -5,6 +5,7 @@
5
5
  * Imported by SeedPanel to render previews without loading full seed data.
6
6
  * Auto-derived from the live seed data files — stays in sync automatically.
7
7
  */
8
+ import { payoutMethodsSeedData, shippingConfigsSeedData, analyticsCardsSeedData, analyticsAlertsSeedData, storeCategoriesSeedData, listingTemplatesSeedData, moderationQueueSeedData, reportsSeedData, itemRequestsSeedData, storeWhatsAppConfigSeedData, storeGoogleConfigSeedData, } from "./store-extensions-seed-data";
8
9
  // SB-UNI-C — brandsSeedData merged into categoriesSeedData.
9
10
  import { categoriesSeedData } from "./categories-seed-data";
10
11
  import { usersSeedData } from "./users-seed-data";
@@ -172,4 +173,20 @@ export const SEED_MANIFEST = {
172
173
  ...o,
173
174
  name: o.productTitle ?? o.id,
174
175
  }))),
176
+ // S-STORE foundation collections — entries derived lazily from store-extensions-seed-data
177
+ payoutMethods: pick(asArr(payoutMethodsSeedData)),
178
+ shippingConfigs: pick(asArr(shippingConfigsSeedData)),
179
+ analyticsCards: pick(asArr(analyticsCardsSeedData).map((c) => ({ ...c, name: c.title ?? c.id }))),
180
+ analyticsAlerts: pick(asArr(analyticsAlertsSeedData).map((a) => ({ ...a, name: a.label ?? a.id }))),
181
+ storeCategories: pick(asArr(storeCategoriesSeedData)),
182
+ listingTemplates: pick(asArr(listingTemplatesSeedData).map((t) => ({ ...t, name: t.name ?? t.id }))),
183
+ moderationQueue: pick(asArr(moderationQueueSeedData)),
184
+ reports: pick(asArr(reportsSeedData)),
185
+ itemRequests: pick(asArr(itemRequestsSeedData).map((r) => ({ ...r, name: r.title ?? r.id }))),
186
+ storeWhatsAppConfig: pick(asArr(storeWhatsAppConfigSeedData)),
187
+ storeGoogleConfig: pick(asArr(storeGoogleConfigSeedData)),
188
+ // RBAC + admin notifications — no seed docs yet; manifest stays empty until populated.
189
+ roleOverrides: [],
190
+ customRoles: [],
191
+ adminNotifications: [],
175
192
  };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * S-STORE Extensions Seed Data
3
+ *
4
+ * Compact sample documents for the 11 new Tier S-STORE collections.
5
+ * Used by SeedPanel ("Store" group). Full demo dataset rewrite ships
6
+ * with S-STORE-11.
7
+ */
8
+ import type { AnalyticsAlertDocument, AnalyticsCardDocument, ItemRequestDocument, ListingTemplateDocument, ModerationQueueDocument, PayoutMethodDocument, ReportDocument, ShippingConfigDocument, StoreCategoryDocument, StoreGoogleConfigDocument, StoreWhatsAppConfigDocument } from "../features/store-extensions/schemas/firestore";
9
+ export declare const payoutMethodsSeedData: Partial<PayoutMethodDocument>[];
10
+ export declare const shippingConfigsSeedData: Partial<ShippingConfigDocument>[];
11
+ export declare const analyticsCardsSeedData: Partial<AnalyticsCardDocument>[];
12
+ export declare const analyticsAlertsSeedData: Partial<AnalyticsAlertDocument>[];
13
+ export declare const storeCategoriesSeedData: Partial<StoreCategoryDocument>[];
14
+ export declare const listingTemplatesSeedData: Partial<ListingTemplateDocument>[];
15
+ export declare const moderationQueueSeedData: Partial<ModerationQueueDocument>[];
16
+ export declare const reportsSeedData: Partial<ReportDocument>[];
17
+ export declare const itemRequestsSeedData: Partial<ItemRequestDocument>[];
18
+ export declare const storeWhatsAppConfigSeedData: Partial<StoreWhatsAppConfigDocument>[];
19
+ export declare const storeGoogleConfigSeedData: Partial<StoreGoogleConfigDocument>[];
@@ -0,0 +1,421 @@
1
+ /**
2
+ * S-STORE Extensions Seed Data
3
+ *
4
+ * Compact sample documents for the 11 new Tier S-STORE collections.
5
+ * Used by SeedPanel ("Store" group). Full demo dataset rewrite ships
6
+ * with S-STORE-11.
7
+ */
8
+ const NOW = new Date();
9
+ // ───── payoutMethods (6 records) ──────────────────────────────────────────
10
+ export const payoutMethodsSeedData = [
11
+ {
12
+ id: "payout-method-pokemon-palace-upi-default",
13
+ sellerId: "user-pokemon-palace-owner",
14
+ storeId: "store-pokemon-palace",
15
+ type: "upi",
16
+ label: "Primary UPI",
17
+ upiVpa: "pokemonpalace@upi",
18
+ isDefault: true,
19
+ isActive: true,
20
+ },
21
+ {
22
+ id: "payout-method-pokemon-palace-bank",
23
+ sellerId: "user-pokemon-palace-owner",
24
+ storeId: "store-pokemon-palace",
25
+ type: "bank",
26
+ label: "HDFC Current Account",
27
+ accountNumber: "50200012345678",
28
+ ifscCode: "HDFC0001234",
29
+ accountHolderName: "Pokemon Palace LLP",
30
+ bankName: "HDFC Bank",
31
+ isDefault: false,
32
+ isActive: true,
33
+ },
34
+ {
35
+ id: "payout-method-diecast-depot-upi",
36
+ sellerId: "user-diecast-depot-owner",
37
+ storeId: "store-diecast-depot",
38
+ type: "upi",
39
+ label: "Default UPI",
40
+ upiVpa: "diecastdepot@okhdfc",
41
+ isDefault: true,
42
+ isActive: true,
43
+ },
44
+ {
45
+ id: "payout-method-tokyo-toys-upi",
46
+ sellerId: "user-tokyo-toys-owner",
47
+ storeId: "store-tokyo-toys-india",
48
+ type: "upi",
49
+ label: "Tokyo Toys UPI",
50
+ upiVpa: "tokyotoys@ybl",
51
+ isDefault: true,
52
+ isActive: true,
53
+ },
54
+ {
55
+ id: "payout-method-cardgame-hub-bank",
56
+ sellerId: "user-cardgame-hub-owner",
57
+ storeId: "store-cardgame-hub",
58
+ type: "bank",
59
+ label: "ICICI Current Account",
60
+ accountNumber: "001234567890",
61
+ ifscCode: "ICIC0000012",
62
+ accountHolderName: "Cardgame Hub Pvt Ltd",
63
+ bankName: "ICICI Bank",
64
+ isDefault: true,
65
+ isActive: true,
66
+ },
67
+ {
68
+ id: "payout-method-beyblade-arena-upi",
69
+ sellerId: "user-beyblade-arena-owner",
70
+ storeId: "store-beyblade-arena",
71
+ type: "upi",
72
+ label: "Arena UPI",
73
+ upiVpa: "beyarena@paytm",
74
+ isDefault: true,
75
+ isActive: true,
76
+ },
77
+ ];
78
+ // ───── shippingConfigs (8 records) ────────────────────────────────────────
79
+ export const shippingConfigsSeedData = [
80
+ {
81
+ id: "ship-config-pokemon-palace-free",
82
+ storeId: "store-pokemon-palace",
83
+ label: "Free over Rs 999",
84
+ method: "free",
85
+ freeAbovePaise: 99900,
86
+ estimatedDays: 5,
87
+ isDefault: true,
88
+ isActive: true,
89
+ },
90
+ {
91
+ id: "ship-config-pokemon-palace-express",
92
+ storeId: "store-pokemon-palace",
93
+ label: "Express (2 days)",
94
+ method: "express",
95
+ flatRateInPaise: 19900,
96
+ expressSurchargeInPaise: 9900,
97
+ estimatedDays: 2,
98
+ isDefault: false,
99
+ isActive: true,
100
+ },
101
+ {
102
+ id: "ship-config-diecast-flat",
103
+ storeId: "store-diecast-depot",
104
+ label: "Flat Rs 99",
105
+ method: "flat",
106
+ flatRateInPaise: 9900,
107
+ estimatedDays: 4,
108
+ isDefault: true,
109
+ isActive: true,
110
+ },
111
+ {
112
+ id: "ship-config-diecast-pickup",
113
+ storeId: "store-diecast-depot",
114
+ label: "Pickup (Bangalore)",
115
+ method: "pickup",
116
+ estimatedDays: 0,
117
+ isDefault: false,
118
+ isActive: true,
119
+ },
120
+ {
121
+ id: "ship-config-tokyo-toys-weight",
122
+ storeId: "store-tokyo-toys-india",
123
+ label: "By weight",
124
+ method: "weight",
125
+ pricePerKgInPaise: 12000,
126
+ estimatedDays: 6,
127
+ isDefault: true,
128
+ isActive: true,
129
+ },
130
+ {
131
+ id: "ship-config-cardgame-free-1500",
132
+ storeId: "store-cardgame-hub",
133
+ label: "Free over Rs 1500",
134
+ method: "free",
135
+ freeAbovePaise: 150000,
136
+ estimatedDays: 5,
137
+ isDefault: true,
138
+ isActive: true,
139
+ },
140
+ {
141
+ id: "ship-config-beyblade-flat",
142
+ storeId: "store-beyblade-arena",
143
+ label: "Flat Rs 79",
144
+ method: "flat",
145
+ flatRateInPaise: 7900,
146
+ estimatedDays: 4,
147
+ isDefault: true,
148
+ isActive: true,
149
+ },
150
+ {
151
+ id: "ship-config-gundam-galaxy-express",
152
+ storeId: "store-gundam-galaxy",
153
+ label: "Express Premium",
154
+ method: "express",
155
+ flatRateInPaise: 29900,
156
+ estimatedDays: 3,
157
+ isDefault: true,
158
+ isActive: true,
159
+ },
160
+ ];
161
+ // ───── analyticsCards (9 records) ─────────────────────────────────────────
162
+ export const analyticsCardsSeedData = [
163
+ { id: "ac-seller-revenue-30d", scope: "seller", ownerId: "user-pokemon-palace-owner", title: "Revenue · 30d", type: "metric", metric: "revenue:30d", filters: {}, position: 0, isBuiltIn: true, isVisible: true },
164
+ { id: "ac-seller-orders-30d", scope: "seller", ownerId: "user-pokemon-palace-owner", title: "Orders · 30d", type: "metric", metric: "orders:30d", filters: {}, position: 1, isBuiltIn: true, isVisible: true },
165
+ { id: "ac-seller-aov", scope: "seller", ownerId: "user-pokemon-palace-owner", title: "Avg Order Value", type: "metric", metric: "aov:30d", filters: {}, position: 2, isBuiltIn: true, isVisible: true },
166
+ { id: "ac-seller-traffic", scope: "seller", ownerId: "user-pokemon-palace-owner", title: "Storefront Traffic", type: "line", metric: "store-views:30d", filters: {}, position: 3, isBuiltIn: true, isVisible: true },
167
+ { id: "ac-seller-top-products", scope: "seller", ownerId: "user-pokemon-palace-owner", title: "Top Products", type: "table", metric: "top-products:30d", filters: {}, position: 4, isBuiltIn: true, isVisible: true },
168
+ { id: "ac-admin-platform-gmv", scope: "admin", ownerId: "user-admin-letitrip", title: "Platform GMV", type: "metric", metric: "platform-gmv:30d", filters: {}, position: 0, isBuiltIn: true, isVisible: true },
169
+ { id: "ac-admin-active-stores", scope: "admin", ownerId: "user-admin-letitrip", title: "Active Stores", type: "metric", metric: "active-stores", filters: {}, position: 1, isBuiltIn: true, isVisible: true },
170
+ { id: "ac-admin-pending-mod", scope: "admin", ownerId: "user-admin-letitrip", title: "Pending Moderation", type: "metric", metric: "moderation-pending", filters: {}, position: 2, isBuiltIn: true, isVisible: true },
171
+ { id: "ac-admin-open-reports", scope: "admin", ownerId: "user-admin-letitrip", title: "Open Reports", type: "metric", metric: "reports-open", filters: {}, position: 3, isBuiltIn: true, isVisible: true },
172
+ ];
173
+ // ───── analyticsAlerts (4 records) ────────────────────────────────────────
174
+ export const analyticsAlertsSeedData = [
175
+ { id: "alert-low-stock-pokemon", scope: "seller", ownerId: "user-pokemon-palace-owner", label: "Low stock", metric: "min-stock", operator: "<", threshold: 5, windowHours: 24, isActive: true, notifyChannels: ["in-app", "email"] },
176
+ { id: "alert-no-sales-pokemon", scope: "seller", ownerId: "user-pokemon-palace-owner", label: "Zero sales 48h", metric: "orders-window", operator: "==", threshold: 0, windowHours: 48, isActive: true, notifyChannels: ["in-app"] },
177
+ { id: "alert-platform-error-rate", scope: "admin", ownerId: "user-admin-letitrip", label: "API error rate > 5%", metric: "api-error-rate", operator: ">", threshold: 0.05, windowHours: 1, isActive: true, notifyChannels: ["in-app", "email", "whatsapp"] },
178
+ { id: "alert-fraud-surge", scope: "admin", ownerId: "user-admin-letitrip", label: "Fraud reports surge", metric: "reports-1h", operator: ">", threshold: 10, windowHours: 1, isActive: true, notifyChannels: ["in-app", "email"] },
179
+ ];
180
+ // ───── storeCategories (6 records) ────────────────────────────────────────
181
+ export const storeCategoriesSeedData = [
182
+ { id: "scat-pokemon-1st-edition", storeId: "store-pokemon-palace", label: "1st Edition Holos", slug: "1st-edition-holos", displayOrder: 0, productIds: [], isActive: true, description: "Vintage 1st-edition Pokémon holos.", coverImageUrl: "https://picsum.photos/seed/scat-pokemon-1e/640/360" },
183
+ { id: "scat-pokemon-japanese", storeId: "store-pokemon-palace", label: "Japanese Imports", slug: "japanese-imports", displayOrder: 1, productIds: [], isActive: true, coverImageUrl: "https://picsum.photos/seed/scat-pokemon-jp/640/360" },
184
+ { id: "scat-diecast-redline", storeId: "store-diecast-depot", label: "Hot Wheels Redline", slug: "hot-wheels-redline", displayOrder: 0, productIds: [], isActive: true, coverImageUrl: "https://picsum.photos/seed/scat-redline/640/360" },
185
+ { id: "scat-diecast-tomica", storeId: "store-diecast-depot", label: "Tomica Premium", slug: "tomica-premium", displayOrder: 1, productIds: [], isActive: true, coverImageUrl: "https://picsum.photos/seed/scat-tomica/640/360" },
186
+ { id: "scat-beyblade-burst", storeId: "store-beyblade-arena", label: "Burst Series", slug: "burst-series", displayOrder: 0, productIds: [], isActive: true, coverImageUrl: "https://picsum.photos/seed/scat-bey/640/360" },
187
+ { id: "scat-gundam-rg", storeId: "store-gundam-galaxy", label: "Real Grade Kits", slug: "real-grade", displayOrder: 0, productIds: [], isActive: true, coverImageUrl: "https://picsum.photos/seed/scat-gundam/640/360" },
188
+ ];
189
+ // ───── listingTemplates (5 records) ───────────────────────────────────────
190
+ export const listingTemplatesSeedData = [
191
+ {
192
+ id: "tmpl-standard-pokemon-card",
193
+ storeId: "store-pokemon-palace",
194
+ ownerId: "user-pokemon-palace-owner",
195
+ name: "Pokémon Card · Standard",
196
+ description: "Default fields for a graded Pokémon card listing.",
197
+ listingType: "standard",
198
+ defaults: { condition: "mint", currency: "INR", tags: ["pokemon", "tcg"] },
199
+ isShared: true,
200
+ isActive: true,
201
+ usageCount: 14,
202
+ },
203
+ {
204
+ id: "tmpl-auction-vintage-pokemon",
205
+ storeId: "store-pokemon-palace",
206
+ ownerId: "user-pokemon-palace-owner",
207
+ name: "Vintage Pokémon Auction",
208
+ listingType: "auction",
209
+ defaults: { reserveMultiplier: 1.2, auctionDays: 7, currency: "INR" },
210
+ isShared: false,
211
+ isActive: true,
212
+ usageCount: 5,
213
+ },
214
+ {
215
+ id: "tmpl-preorder-bandai",
216
+ storeId: "store-tokyo-toys-india",
217
+ ownerId: "user-tokyo-toys-owner",
218
+ name: "Bandai Pre-Order",
219
+ listingType: "pre-order",
220
+ defaults: { releaseLeadDays: 90, depositPercent: 30 },
221
+ isShared: false,
222
+ isActive: true,
223
+ usageCount: 9,
224
+ },
225
+ {
226
+ id: "tmpl-bundle-starter",
227
+ storeId: "store-diecast-depot",
228
+ ownerId: "user-diecast-depot-owner",
229
+ name: "Starter Bundle",
230
+ listingType: "bundle",
231
+ defaults: { minItems: 3, maxItems: 10, autoDiscountPercent: 12 },
232
+ isShared: true,
233
+ isActive: true,
234
+ usageCount: 2,
235
+ },
236
+ {
237
+ id: "tmpl-digital-code-steam",
238
+ storeId: "store-cardgame-hub",
239
+ ownerId: "user-cardgame-hub-owner",
240
+ name: "Steam Key Listing",
241
+ listingType: "digital-code",
242
+ defaults: { vendor: "steam", region: "in" },
243
+ isShared: false,
244
+ isActive: true,
245
+ usageCount: 1,
246
+ },
247
+ ];
248
+ // ───── moderationQueue (5 records) ────────────────────────────────────────
249
+ export const moderationQueueSeedData = [
250
+ { id: "mod-video-pokemon-charizard", mediaType: "video", mediaUrl: "/media/product-video-charizard-psa9-20260518.mp4", entityType: "product", entityId: "product-pokemon-charizard-psa9", ownerId: "user-pokemon-palace-owner", storeId: "store-pokemon-palace", status: "pending", submittedAt: new Date(NOW.getTime() - 3600000) },
251
+ { id: "mod-video-beyblade-burst", mediaType: "video", mediaUrl: "/media/product-video-beyblade-burst-20260518.mp4", entityType: "product", entityId: "product-beyblade-burst-evolution", ownerId: "user-beyblade-arena-owner", storeId: "store-beyblade-arena", status: "pending", submittedAt: new Date(NOW.getTime() - 7200000) },
252
+ { id: "mod-review-hot-wheels", mediaType: "rich-text", entityType: "review", entityId: "review-hot-wheels-redline-1", ownerId: "user-ravi-kumar", status: "approved", reviewerId: "user-admin-letitrip", reviewedAt: new Date(NOW.getTime() - 86400000), submittedAt: new Date(NOW.getTime() - 90000000) },
253
+ { id: "mod-image-diecast-banner", mediaType: "image", mediaUrl: "/media/store-banner-diecast-depot-20260518.jpg", entityType: "storefront", entityId: "store-diecast-depot", ownerId: "user-diecast-depot-owner", storeId: "store-diecast-depot", status: "auto-approved", submittedAt: new Date(NOW.getTime() - 172800000) },
254
+ { id: "mod-blog-grading-guide", mediaType: "rich-text", entityType: "blog", entityId: "blog-how-to-grade-pokemon-cards", ownerId: "user-admin-letitrip", status: "approved", reviewerId: "user-admin-letitrip", reviewedAt: new Date(NOW.getTime() - 432000000), submittedAt: new Date(NOW.getTime() - 438000000) },
255
+ { id: "mod-video-tomica-unbox", mediaType: "video", mediaUrl: "/media/product-video-tomica-tlv-bmw-20260518.mp4", entityType: "product", entityId: "product-tomica-tlv-bmw-2002", ownerId: "user-diecast-depot-owner", storeId: "store-diecast-depot", status: "pending", submittedAt: new Date(NOW.getTime() - 1800000) },
256
+ { id: "mod-video-rg-build-time", mediaType: "video", mediaUrl: "/media/product-video-rg-nu-gundam-20260518.mp4", entityType: "product", entityId: "product-rg-nu-gundam-real-grade", ownerId: "user-gundam-galaxy-owner", storeId: "store-gundam-galaxy", status: "pending", submittedAt: new Date(NOW.getTime() - 5400000) },
257
+ { id: "mod-event-cover", mediaType: "image", mediaUrl: "/media/event-cover-summer-tcg-meetup-20260518.jpg", entityType: "event", entityId: "event-summer-tcg-meetup", ownerId: "user-admin-letitrip", status: "approved", reviewerId: "user-admin-letitrip", reviewedAt: new Date(NOW.getTime() - 86400000), submittedAt: new Date(NOW.getTime() - 90000000) },
258
+ { id: "mod-storefront-bey-banner", mediaType: "image", mediaUrl: "/media/store-banner-beyblade-arena-20260518.jpg", entityType: "storefront", entityId: "store-beyblade-arena", ownerId: "user-beyblade-arena-owner", storeId: "store-beyblade-arena", status: "rejected", reason: "Banner has off-brand watermark.", reviewerId: "user-admin-letitrip", reviewedAt: new Date(NOW.getTime() - 172800000), submittedAt: new Date(NOW.getTime() - 180000000) },
259
+ { id: "mod-review-bootleg-flag", mediaType: "rich-text", entityType: "review", entityId: "review-bootleg-flag", ownerId: "user-anonymous-2", status: "pending", submittedAt: new Date(NOW.getTime() - 600000) },
260
+ { id: "mod-blog-collectibles-trends", mediaType: "rich-text", entityType: "blog", entityId: "blog-2026-collectibles-trends", ownerId: "user-admin-letitrip", status: "auto-approved", submittedAt: new Date(NOW.getTime() - 14400000) },
261
+ ];
262
+ // ───── reports (4 records) ────────────────────────────────────────────────
263
+ export const reportsSeedData = [
264
+ { id: "report-counterfeit-charizard", entityType: "product", entityId: "product-suspect-charizard", reporterId: "user-ravi-kumar", reason: "counterfeit", detail: "Card edges look reprinted; texture inconsistent.", evidenceUrls: [], status: "pending" },
265
+ { id: "report-scam-store-fly-by-night", entityType: "store", entityId: "store-suspect-fly-by-night", reporterId: "user-priya-sharma", reason: "scam", detail: "Reports of orders not shipped after 4 weeks.", evidenceUrls: [], status: "under-review", assignedTo: "user-admin-letitrip" },
266
+ { id: "report-spam-review-bey", entityType: "review", entityId: "review-bey-spammy", reporterId: "user-arjun-rao", reason: "spam", detail: "Promotional link in review.", evidenceUrls: [], status: "actioned", resolution: "Review hidden.", resolvedAt: new Date(NOW.getTime() - 86400000) },
267
+ { id: "report-harassment-comment", entityType: "comment", entityId: "comment-bad-actor-1", reporterId: "user-mohsin-c", reason: "harassment", detail: "Targeted abuse in blog comments.", evidenceUrls: [], status: "dismissed", resolvedAt: new Date(NOW.getTime() - 172800000) },
268
+ { id: "report-prohibited-replica-listing", entityType: "product", entityId: "product-suspect-replica-rolex", reporterId: "user-mohsin-c", reason: "prohibited", detail: "Replica branded merchandise.", evidenceUrls: [], status: "pending" },
269
+ { id: "report-ip-violation-fan-art-print", entityType: "product", entityId: "product-bootleg-pokemon-print", reporterId: "user-priya-sharma", reason: "ip-violation", detail: "Unauthorised Pokémon art prints.", evidenceUrls: [], status: "under-review", assignedTo: "user-admin-letitrip" },
270
+ { id: "report-spam-listing-mass-post", entityType: "store", entityId: "store-spammer-mass", reporterId: "user-arjun-rao", reason: "spam", detail: "Same product listed 50+ times.", evidenceUrls: [], status: "pending" },
271
+ { id: "report-inappropriate-blog", entityType: "blog", entityId: "blog-controversial-post", reporterId: "user-anonymous-1", reason: "inappropriate", detail: "Off-topic political content.", evidenceUrls: [], status: "dismissed", resolvedAt: new Date(NOW.getTime() - 259200000) },
272
+ ];
273
+ // ───── itemRequests (3 records) ───────────────────────────────────────────
274
+ export const itemRequestsSeedData = [
275
+ {
276
+ id: "irq-charizard-shadowless",
277
+ opUserId: "user-ravi-kumar",
278
+ opDisplayName: "Ravi Kumar",
279
+ title: "Looking for Shadowless Charizard PSA 8+",
280
+ description: "Hunting a Shadowless Base Set Charizard, grade 8 or above. Budget Rs 2,50,000.",
281
+ category: "trading-cards",
282
+ brand: "pokemon",
283
+ maxBudgetInPaise: 25000000,
284
+ imageUrls: ["https://picsum.photos/seed/irq-1/640/480"],
285
+ status: "open",
286
+ replyCount: 2,
287
+ replies: [],
288
+ approvedAt: new Date(NOW.getTime() - 86400000),
289
+ approvedBy: "user-admin-letitrip",
290
+ },
291
+ {
292
+ id: "irq-tomica-redline-bmw",
293
+ opUserId: "user-arjun-rao",
294
+ opDisplayName: "Arjun Rao",
295
+ title: "Tomica Limited Vintage BMW 2002",
296
+ description: "Mint condition only. Box must be intact.",
297
+ category: "diecast-vehicles",
298
+ brand: "tomica",
299
+ maxBudgetInPaise: 850000,
300
+ imageUrls: ["https://picsum.photos/seed/irq-2/640/480"],
301
+ status: "open",
302
+ replyCount: 0,
303
+ replies: [],
304
+ approvedAt: new Date(NOW.getTime() - 43200000),
305
+ approvedBy: "user-admin-letitrip",
306
+ },
307
+ {
308
+ id: "irq-pending-funko-grail",
309
+ opUserId: "user-priya-sharma",
310
+ opDisplayName: "Priya Sharma",
311
+ title: "Funko Pop SDCC Exclusive Glow Batman",
312
+ description: "Searching for the 2013 SDCC Glow-in-Dark Batman exclusive.",
313
+ category: "action-figures",
314
+ brand: "funko",
315
+ imageUrls: ["https://picsum.photos/seed/irq-3/640/480"],
316
+ status: "pending-approval",
317
+ replyCount: 0,
318
+ replies: [],
319
+ },
320
+ {
321
+ id: "irq-bey-spriggan-bb-105",
322
+ opUserId: "user-arjun-rao",
323
+ opDisplayName: "Arjun Rao",
324
+ title: "Beyblade Spriggan BB-105 boxed",
325
+ description: "Need original-box Spriggan from the Metal Fight series. Mint launcher.",
326
+ category: "spinning-tops",
327
+ brand: "takara-tomy",
328
+ maxBudgetInPaise: 450000,
329
+ imageUrls: ["https://picsum.photos/seed/irq-4/640/480"],
330
+ status: "open",
331
+ replyCount: 1,
332
+ replies: [],
333
+ approvedAt: new Date(NOW.getTime() - 28800000),
334
+ approvedBy: "user-admin-letitrip",
335
+ },
336
+ {
337
+ id: "irq-rg-nu-gundam",
338
+ opUserId: "user-mohsin-c",
339
+ opDisplayName: "Mohsin C",
340
+ title: "RG 1/144 Nu Gundam mint sealed",
341
+ description: "Sealed runner. Will pay shipping insurance.",
342
+ category: "model-kits",
343
+ brand: "bandai",
344
+ maxBudgetInPaise: 320000,
345
+ imageUrls: ["https://picsum.photos/seed/irq-5/640/480"],
346
+ status: "fulfilled",
347
+ replyCount: 4,
348
+ replies: [],
349
+ approvedAt: new Date(NOW.getTime() - 7 * 86400000),
350
+ approvedBy: "user-admin-letitrip",
351
+ closedAt: new Date(NOW.getTime() - 2 * 86400000),
352
+ },
353
+ {
354
+ id: "irq-tcg-base-set-booster",
355
+ opUserId: "user-ravi-kumar",
356
+ opDisplayName: "Ravi Kumar",
357
+ title: "Pokémon Base Set booster pack — unopened",
358
+ description: "Any printing. Western or Japanese OK. Sealed only.",
359
+ category: "trading-cards",
360
+ brand: "pokemon",
361
+ maxBudgetInPaise: 1500000,
362
+ imageUrls: ["https://picsum.photos/seed/irq-6/640/480"],
363
+ status: "open",
364
+ replyCount: 0,
365
+ replies: [],
366
+ approvedAt: new Date(NOW.getTime() - 14400000),
367
+ approvedBy: "user-admin-letitrip",
368
+ },
369
+ {
370
+ id: "irq-rejected-replica-watch",
371
+ opUserId: "user-anonymous-flagged",
372
+ opDisplayName: "Anonymous",
373
+ title: "Replica luxury watches",
374
+ description: "Looking for replica watches at discount.",
375
+ category: "other",
376
+ imageUrls: ["https://picsum.photos/seed/irq-7/640/480"],
377
+ status: "rejected",
378
+ replyCount: 0,
379
+ replies: [],
380
+ },
381
+ ];
382
+ // ───── storeWhatsAppConfig (2 records) ────────────────────────────────────
383
+ export const storeWhatsAppConfigSeedData = [
384
+ {
385
+ id: "whatsapp-pokemon-palace",
386
+ storeId: "store-pokemon-palace",
387
+ isConnected: true,
388
+ isPaid: true,
389
+ phoneNumber: "+919876543210",
390
+ businessProfileName: "Pokémon Palace",
391
+ catalogUrl: "https://wa.me/c/919876543210",
392
+ autoReply: "Hi! Thanks for messaging Pokémon Palace. We respond within 2 hours.",
393
+ welcomeMessage: "Welcome to Pokémon Palace! Browse our catalog above.",
394
+ onboardingStatus: "approved",
395
+ },
396
+ {
397
+ id: "whatsapp-tokyo-toys",
398
+ storeId: "store-tokyo-toys-india",
399
+ isConnected: false,
400
+ isPaid: false,
401
+ onboardingStatus: "pending",
402
+ },
403
+ ];
404
+ // ───── storeGoogleConfig (2 records) ──────────────────────────────────────
405
+ export const storeGoogleConfigSeedData = [
406
+ {
407
+ id: "google-pokemon-palace",
408
+ storeId: "store-pokemon-palace",
409
+ isConnected: true,
410
+ placeId: "ChIJpokemonpalace12345",
411
+ businessName: "Pokémon Palace",
412
+ averageRating: 4.7,
413
+ totalReviews: 124,
414
+ lastSyncedAt: new Date(NOW.getTime() - 3600000),
415
+ },
416
+ {
417
+ id: "google-diecast-depot",
418
+ storeId: "store-diecast-depot",
419
+ isConnected: false,
420
+ },
421
+ ];