@mohasinac/appkit 4.1.3 → 4.3.0

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 (276) hide show
  1. package/dist/_internal/server/features/auth/actions.d.ts +0 -1
  2. package/dist/_internal/server/features/auth/actions.js +0 -1
  3. package/dist/_internal/server/features/bundles/data.d.ts +22 -4
  4. package/dist/_internal/server/features/bundles/data.js +41 -4
  5. package/dist/_internal/server/features/bundles/index.d.ts +1 -1
  6. package/dist/_internal/server/features/bundles/index.js +1 -1
  7. package/dist/_internal/server/features/checkout/actions.d.ts +15 -0
  8. package/dist/_internal/server/features/checkout/actions.js +249 -257
  9. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -16
  10. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -30
  11. package/dist/_internal/server/features/orders/adapters.js +1 -14
  12. package/dist/_internal/server/features/products/actions.js +8 -3
  13. package/dist/_internal/server/features/products/service.d.ts +15 -0
  14. package/dist/_internal/server/features/products/service.js +41 -0
  15. package/dist/_internal/server/functions/firestore.d.ts +3 -1
  16. package/dist/_internal/server/functions/firestore.js +17 -1
  17. package/dist/_internal/server/functions/scheduled.d.ts +3 -5
  18. package/dist/_internal/server/functions/scheduled.js +14 -30
  19. package/dist/_internal/server/jobs/core/bundleStockSync.js +25 -7
  20. package/dist/_internal/server/jobs/core/countersReconcile.js +7 -1
  21. package/dist/_internal/server/jobs/core/index.d.ts +4 -4
  22. package/dist/_internal/server/jobs/core/index.js +4 -4
  23. package/dist/_internal/server/jobs/core/jobRunners.js +10 -0
  24. package/dist/_internal/server/jobs/core/newsletterExport.d.ts +15 -0
  25. package/dist/_internal/server/jobs/core/newsletterExport.js +43 -0
  26. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +2 -0
  27. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +1 -0
  28. package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.d.ts +19 -0
  29. package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.js +30 -0
  30. package/dist/_internal/server/jobs/core/paymentWindowTimeout.d.ts +2 -2
  31. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +3 -2
  32. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +1 -0
  33. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.d.ts +20 -0
  34. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +113 -0
  35. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.d.ts +14 -0
  36. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +74 -0
  37. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.d.ts +22 -0
  38. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +68 -0
  39. package/dist/_internal/server/jobs/core/revenueRollup.d.ts +13 -0
  40. package/dist/_internal/server/jobs/core/revenueRollup.js +22 -0
  41. package/dist/_internal/server/jobs/core/whatsappNotify.d.ts +35 -0
  42. package/dist/_internal/server/jobs/core/whatsappNotify.js +82 -0
  43. package/dist/_internal/server/jobs/handlers/index.d.ts +4 -4
  44. package/dist/_internal/server/jobs/handlers/index.js +9 -6
  45. package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.d.ts +3 -0
  46. package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.js +11 -0
  47. package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.d.ts +2 -0
  48. package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.js +2 -0
  49. package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.d.ts +3 -0
  50. package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.js +4 -0
  51. package/dist/_internal/server/jobs/handlers/revenueRollup.d.ts +2 -0
  52. package/dist/_internal/server/jobs/handlers/revenueRollup.js +2 -0
  53. package/dist/_internal/shared/actions/action-registry.js +40 -10
  54. package/dist/_internal/shared/checkout/rules/_defaults.js +1 -2
  55. package/dist/_internal/shared/checkout/rules/_limits.d.ts +3 -0
  56. package/dist/_internal/shared/checkout/rules/_limits.js +3 -0
  57. package/dist/_internal/shared/checkout/rules/_registry.d.ts +2 -1
  58. package/dist/_internal/shared/checkout/rules/_registry.js +2 -2
  59. package/dist/_internal/shared/checkout/rules/classified.rule.js +0 -1
  60. package/dist/_internal/shared/checkout/rules/index.d.ts +1 -1
  61. package/dist/_internal/shared/checkout/rules/index.js +1 -1
  62. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +20 -1
  63. package/dist/_internal/shared/checkout/rules/types.d.ts +17 -7
  64. package/dist/_internal/shared/features/categories/bundle-copy.d.ts +2 -0
  65. package/dist/_internal/shared/features/categories/bundle-copy.js +2 -0
  66. package/dist/_internal/shared/features/categories/bundle-pricing.d.ts +23 -0
  67. package/dist/_internal/shared/features/categories/bundle-pricing.js +25 -0
  68. package/dist/_internal/shared/features/checkout/config.d.ts +7 -0
  69. package/dist/_internal/shared/features/checkout/config.js +7 -0
  70. package/dist/_internal/shared/fees/calculator.d.ts +26 -0
  71. package/dist/_internal/shared/fees/calculator.js +25 -0
  72. package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -1
  73. package/dist/constants/api-endpoints.d.ts +6 -9
  74. package/dist/constants/api-endpoints.js +5 -5
  75. package/dist/constants/field-names.d.ts +17 -1
  76. package/dist/constants/field-names.js +17 -1
  77. package/dist/features/about/components/FeesView.js +18 -0
  78. package/dist/features/account/hooks/useNotifications.js +5 -0
  79. package/dist/features/admin/actions/admin-actions.js +6 -0
  80. package/dist/features/admin/actions/notification-actions.d.ts +4 -1
  81. package/dist/features/admin/actions/notification-actions.js +57 -12
  82. package/dist/features/admin/components/AdminAdsView.js +1 -1
  83. package/dist/features/admin/components/AdminBlogEditorView.js +1 -1
  84. package/dist/features/admin/components/AdminNewsletterView.js +42 -11
  85. package/dist/features/admin/components/AdminPrizeDrawsView.js +3 -3
  86. package/dist/features/admin/components/AdminSiteSettingsView.js +115 -11
  87. package/dist/features/admin/components/AdminTesterChecklistView.js +74 -22
  88. package/dist/features/admin/hooks/useAdminListing.d.ts +4 -0
  89. package/dist/features/admin/hooks/useAdminListing.js +4 -2
  90. package/dist/features/admin/repository/analytics-rollup.repository.d.ts +25 -0
  91. package/dist/features/admin/repository/analytics-rollup.repository.js +31 -0
  92. package/dist/features/admin/repository/site-settings.repository.js +8 -1
  93. package/dist/features/admin/schemas/firestore.d.ts +54 -5
  94. package/dist/features/admin/schemas/firestore.js +63 -26
  95. package/dist/features/auctions/actions/bid-actions.js +3 -1
  96. package/dist/features/auctions/components/AuctionBidsTable.d.ts +6 -1
  97. package/dist/features/auctions/components/AuctionBidsTable.js +8 -4
  98. package/dist/features/auctions/components/AuctionDetailPageView.js +10 -13
  99. package/dist/features/auctions/components/CollapsibleBidHistory.d.ts +23 -2
  100. package/dist/features/auctions/components/CollapsibleBidHistory.js +21 -3
  101. package/dist/features/auctions/components/LiveBidPrice.d.ts +19 -0
  102. package/dist/features/auctions/components/LiveBidPrice.js +17 -0
  103. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -1
  104. package/dist/features/auctions/components/PlaceBidFormClient.js +16 -1
  105. package/dist/features/auctions/hooks/useBids.d.ts +33 -0
  106. package/dist/features/auctions/hooks/useBids.js +32 -0
  107. package/dist/features/auctions/hooks/useLiveAuctionBid.d.ts +20 -0
  108. package/dist/features/auctions/hooks/useLiveAuctionBid.js +23 -0
  109. package/dist/features/auth/checkout-value-otp.d.ts +7 -10
  110. package/dist/features/auth/checkout-value-otp.js +14 -10
  111. package/dist/features/auth/server.d.ts +0 -1
  112. package/dist/features/auth/server.js +0 -1
  113. package/dist/features/blog/api/[slug]/route.d.ts +5 -0
  114. package/dist/features/blog/api/[slug]/route.js +12 -3
  115. package/dist/features/blog/components/BlogPostView.d.ts +2 -0
  116. package/dist/features/blog/components/BlogPostView.js +5 -4
  117. package/dist/features/blog/hooks/useBlog.d.ts +2 -0
  118. package/dist/features/blog/hooks/useBlog.js +2 -0
  119. package/dist/features/blog/repository/blog.repository.d.ts +7 -0
  120. package/dist/features/blog/repository/blog.repository.js +44 -0
  121. package/dist/features/blog/schemas/firestore.d.ts +3 -0
  122. package/dist/features/blog/schemas/firestore.js +1 -0
  123. package/dist/features/blog/types/index.d.ts +2 -0
  124. package/dist/features/cart/components/index.d.ts +0 -2
  125. package/dist/features/cart/components/index.js +0 -1
  126. package/dist/features/cart/hooks/useCartCount.js +22 -5
  127. package/dist/features/cart/hooks/useGuestCart.js +11 -1
  128. package/dist/features/cart/utils/guest-cart.d.ts +4 -0
  129. package/dist/features/cart/utils/guest-cart.js +10 -0
  130. package/dist/features/cart/utils/pending-ops.d.ts +17 -0
  131. package/dist/features/cart/utils/pending-ops.js +46 -5
  132. package/dist/features/categories/components/BrandDetailPageView.js +6 -2
  133. package/dist/features/categories/components/BundleDetailView.js +4 -2
  134. package/dist/features/categories/components/CategoryDetailPageView.js +10 -2
  135. package/dist/features/categories/schemas/firestore.d.ts +7 -0
  136. package/dist/features/checkout/actions/index.d.ts +0 -1
  137. package/dist/features/checkout/actions/index.js +0 -1
  138. package/dist/features/checkout/schemas/firestore.d.ts +2 -2
  139. package/dist/features/events/actions/event-actions.d.ts +2 -0
  140. package/dist/features/events/actions/event-actions.js +5 -0
  141. package/dist/features/events/components/EventCard.js +1 -2
  142. package/dist/features/events/components/RelatedEventsCarousel.d.ts +15 -0
  143. package/dist/features/events/components/RelatedEventsCarousel.js +13 -0
  144. package/dist/features/events/components/index.d.ts +2 -0
  145. package/dist/features/events/components/index.js +1 -0
  146. package/dist/features/events/repository/events.repository.d.ts +6 -0
  147. package/dist/features/events/repository/events.repository.js +21 -0
  148. package/dist/features/history/repository/user-history.repository.d.ts +1 -1
  149. package/dist/features/history/utils/guest-history.d.ts +1 -1
  150. package/dist/features/homepage/components/FeaturedBundlesSection.js +4 -2
  151. package/dist/features/homepage/components/FeaturedProductsSection.js +2 -2
  152. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  153. package/dist/features/homepage/components/WelcomeSection.js +1 -1
  154. package/dist/features/layout/AppLayoutShell.js +1 -1
  155. package/dist/features/layout/BackToTop.d.ts +9 -5
  156. package/dist/features/layout/BackToTop.js +17 -21
  157. package/dist/features/layout/NavbarLayout.js +1 -1
  158. package/dist/features/layout/TitleBarLayout.js +2 -2
  159. package/dist/features/media/MediaVideo.d.ts +7 -0
  160. package/dist/features/media/MediaVideo.js +36 -5
  161. package/dist/features/orders/actions/refund-actions.js +1 -0
  162. package/dist/features/orders/components/OrdersList.js +1 -5
  163. package/dist/features/orders/schemas/firestore.d.ts +16 -8
  164. package/dist/features/orders/schemas/index.d.ts +3 -32
  165. package/dist/features/orders/schemas/index.js +1 -4
  166. package/dist/features/orders/types/index.d.ts +6 -9
  167. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +1 -1
  168. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +2 -1
  169. package/dist/features/products/actions/product-actions.js +13 -10
  170. package/dist/features/products/components/MarketplaceBundleCard.d.ts +1 -1
  171. package/dist/features/products/components/MarketplaceBundleCard.js +7 -4
  172. package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
  173. package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
  174. package/dist/features/products/components/PrizeDrawWinnerMappingView.d.ts +14 -0
  175. package/dist/features/products/components/PrizeDrawWinnerMappingView.js +37 -0
  176. package/dist/features/products/components/PrizeRevealModal.d.ts +10 -23
  177. package/dist/features/products/components/PrizeRevealModal.js +18 -147
  178. package/dist/features/products/components/ProductDetailPageView.js +72 -30
  179. package/dist/features/products/components/ProductForm.js +7 -14
  180. package/dist/features/products/components/ProductGalleryClient.d.ts +10 -1
  181. package/dist/features/products/components/ProductGalleryClient.js +29 -10
  182. package/dist/features/products/components/ProductsIndexListing.js +2 -1
  183. package/dist/features/products/components/RelatedProductsCarousel.js +2 -2
  184. package/dist/features/products/components/ShowGroupSection.js +2 -2
  185. package/dist/features/products/components/SublistingCarouselSection.js +1 -1
  186. package/dist/features/products/components/index.d.ts +4 -2
  187. package/dist/features/products/components/index.js +1 -0
  188. package/dist/features/products/constants/action-defs.d.ts +28 -4
  189. package/dist/features/products/constants/action-defs.js +76 -3
  190. package/dist/features/products/repository/products.repository.d.ts +6 -0
  191. package/dist/features/products/repository/products.repository.js +20 -1
  192. package/dist/features/products/schemas/firestore.d.ts +26 -2
  193. package/dist/features/products/schemas/index.d.ts +11 -3
  194. package/dist/features/products/schemas/index.js +10 -2
  195. package/dist/features/products/types/index.d.ts +2 -1
  196. package/dist/features/reviews/actions/review-actions.js +1 -0
  197. package/dist/features/reviews/components/ReviewDetailPageView.js +8 -1
  198. package/dist/features/reviews/components/ReviewDetailShell.js +2 -1
  199. package/dist/features/reviews/components/ReviewsList.js +2 -1
  200. package/dist/features/reviews/schemas/firestore.d.ts +3 -0
  201. package/dist/features/reviews/schemas/index.d.ts +6 -0
  202. package/dist/features/reviews/schemas/index.js +2 -0
  203. package/dist/features/reviews/types/index.d.ts +3 -0
  204. package/dist/features/scams/actions/scam-actions.d.ts +3 -0
  205. package/dist/features/scams/actions/scam-actions.js +3 -2
  206. package/dist/features/scams/components/ScamProfileView.d.ts +2 -1
  207. package/dist/features/scams/components/ScamProfileView.js +2 -2
  208. package/dist/features/scams/repository/scammer.repository.d.ts +6 -0
  209. package/dist/features/scams/repository/scammer.repository.js +24 -0
  210. package/dist/features/seller/actions/seller-actions.js +8 -0
  211. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  212. package/dist/features/seller/components/SellerPrizeDrawsView.js +4 -0
  213. package/dist/features/stores/components/StoreDetailLayoutView.js +6 -6
  214. package/dist/features/stores/components/StoreNavTabs.d.ts +10 -1
  215. package/dist/features/stores/components/StoreNavTabs.js +21 -9
  216. package/dist/features/tester/actions/index.d.ts +1 -0
  217. package/dist/features/tester/actions/index.js +1 -0
  218. package/dist/features/tester/actions/leaderboard-actions.d.ts +3 -0
  219. package/dist/features/tester/actions/leaderboard-actions.js +5 -0
  220. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +26 -4
  221. package/dist/features/tester/components/AdminTesterFeedbackListView.js +13 -0
  222. package/dist/features/tester/components/BugHunterLeaderboardView.d.ts +23 -0
  223. package/dist/features/tester/components/BugHunterLeaderboardView.js +18 -0
  224. package/dist/features/tester/components/index.d.ts +2 -0
  225. package/dist/features/tester/components/index.js +1 -0
  226. package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +12 -1
  227. package/dist/features/tester/repository/tester-checklist-item.repository.js +80 -0
  228. package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +4 -0
  229. package/dist/features/tester/repository/tester-checklist-response.repository.js +4 -0
  230. package/dist/features/tester/schemas/firestore.d.ts +22 -1
  231. package/dist/features/tester/schemas/firestore.js +8 -0
  232. package/dist/features/tester/seed-data/categories-tester-seed-data.js +42 -7
  233. package/dist/features/tester/seed-data/events-tester-seed-data.js +23 -0
  234. package/dist/features/tester/seed-data/orders-tester-seed-data.js +69 -31
  235. package/dist/features/tester/seed-data/products-tester-seed-data.js +152 -8
  236. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +249 -14
  237. package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +10 -1
  238. package/dist/features/whatsapp-bot/helpers/whatsapp.js +47 -0
  239. package/dist/features/whatsapp-bot/types/index.d.ts +19 -0
  240. package/dist/features/wishlist/hooks/useGuestWishlist.js +11 -1
  241. package/dist/features/wishlist/hooks/useWishlistCount.js +16 -2
  242. package/dist/features/wishlist/utils/guest-wishlist.d.ts +5 -0
  243. package/dist/features/wishlist/utils/guest-wishlist.js +11 -0
  244. package/dist/index.d.ts +23 -24
  245. package/dist/index.js +29 -60
  246. package/dist/jobs.d.ts +1 -1
  247. package/dist/jobs.js +2 -2
  248. package/dist/next/routing/route-map.d.ts +4 -0
  249. package/dist/next/routing/route-map.js +2 -0
  250. package/dist/repositories/index.d.ts +2 -0
  251. package/dist/repositories/index.js +1 -0
  252. package/dist/schemas/registry.d.ts +6 -26
  253. package/dist/seed/bids-seed-data.js +14 -2
  254. package/dist/seed/blog-posts-seed-data.js +2 -1
  255. package/dist/seed/categories-seed-data.js +11 -2
  256. package/dist/seed/events-seed-data.js +11 -11
  257. package/dist/seed/faq-seed-data.js +5 -1
  258. package/dist/seed/products-auctions-seed-data.js +2 -2
  259. package/dist/seed/products-preorders-seed-data.d.ts +2 -1
  260. package/dist/seed/products-prize-draws-seed-data.js +56 -10
  261. package/dist/seed/products-standard-seed-data.js +82 -3
  262. package/dist/seed/scammers-seed-data.js +75 -2
  263. package/dist/seed/site-settings-seed-data.js +12 -2
  264. package/dist/server-entry.d.ts +0 -1
  265. package/dist/server-entry.js +0 -1
  266. package/dist/server.d.ts +6 -22
  267. package/dist/server.js +12 -59
  268. package/dist/styles.css +1 -1
  269. package/dist/tailwind-utilities.css +1 -1
  270. package/dist/ui/components/BaseListingCard.js +1 -1
  271. package/dist/ui/components/ImageLightbox.d.ts +9 -0
  272. package/dist/ui/components/ImageLightbox.js +6 -3
  273. package/dist/ui/components/ListingToolbar.d.ts +18 -1
  274. package/dist/ui/components/ListingToolbar.js +5 -2
  275. package/dist/ui/components/StickyToolbar.js +13 -8
  276. package/package.json +1 -1
@@ -1,9 +1,13 @@
1
1
  /*
2
- * WHY: Shared tester sandbox — a handful of disposable test products spanning standard,
3
- * auction, and pre-order listing types, all owned by store-tester-sandbox, so testers
4
- * can exercise buying/bidding/pre-ordering against real code paths. Auto-expires after
5
- * 7 days (testerSandboxCleanup cascades into any bids on the auction).
6
- * WHAT: Exports productsTesterSeedData 2 standard + 1 auction + 1 pre-order product.
2
+ * WHY: Shared tester sandbox — a handful of disposable test products spanning every listing
3
+ * type (standard, auction, pre-order, prize-draw, classified, digital-code, live, art,
4
+ * stickers), all owned by store-tester-sandbox, so testers can exercise buying/bidding/
5
+ * pre-ordering against real code paths including navigating every entry of the store
6
+ * detail page's listing-type dropdown (see StoreNavTabs). Auto-expires after 7 days
7
+ * (testerSandboxCleanup cascades into any bids on the auction).
8
+ * WHAT: Exports productsTesterSeedData — 2 standard + 2 auction + 1 pre-order + 1 prize-draw +
9
+ * 1 classified + 1 digital-code + 1 live + 1 art + 1 stickers product + 1 product-group
10
+ * ("Set") parent (product-tester-standard-1/2 are its children, linked via groupId).
7
11
  *
8
12
  * EXPORTS:
9
13
  * productsTesterSeedData — Array of Partial<ProductDocument> for the seed runner
@@ -61,6 +65,13 @@ export const productsTesterSeedData = [
61
65
  customSections: [],
62
66
  isPromoted: false,
63
67
  isOnSale: false,
68
+ // Child of the "group-tester-sandbox-bundle" product-group ("Set") parent
69
+ // below — findByGroupId() queries products by this field directly, so
70
+ // without it the parent's groupChildSlugs[] mirror is never actually
71
+ // resolvable and ShowGroupSection renders nothing (members.length <= 1).
72
+ groupId: "group-tester-sandbox-bundle",
73
+ groupParentSlug: "group-tester-sandbox-bundle",
74
+ groupTitle: "Tester Sandbox Bundle",
64
75
  createdAt: new Date(),
65
76
  updatedAt: new Date(),
66
77
  }),
@@ -87,6 +98,35 @@ export const productsTesterSeedData = [
87
98
  customSections: [],
88
99
  isPromoted: false,
89
100
  isOnSale: false,
101
+ groupId: "group-tester-sandbox-bundle",
102
+ groupParentSlug: "group-tester-sandbox-bundle",
103
+ groupTitle: "Tester Sandbox Bundle",
104
+ createdAt: new Date(),
105
+ updatedAt: new Date(),
106
+ }),
107
+ withTokens({
108
+ id: "product-tester-standard-sold",
109
+ slug: "product-tester-standard-sold",
110
+ title: "Test Collectible — Sold Out (Hidden by Default)",
111
+ description: "Disposable test product deliberately seeded as sold out — exists to verify the public/admin/seller \"Show sold\" toggle actually hides it by default and reveals it when toggled on. Auto-expires in 7 days.",
112
+ categorySlugs: COLLECTIBLES_CATEGORY_SLUGS,
113
+ categoryNames: COLLECTIBLES_CATEGORY_NAMES,
114
+ brandSlug: "brand-tester-sandbox",
115
+ brand: "TestBrand",
116
+ price: 179,
117
+ currency: "INR",
118
+ stockQuantity: 0,
119
+ availableQuantity: 0,
120
+ isSold: true,
121
+ mainImage: seedExtMedia("https://picsum.photos/seed/product-image-tester-standard-sold-20260101/900/900"),
122
+ images: [seedExtMedia("https://picsum.photos/seed/product-image-tester-standard-sold-20260101/900/900")],
123
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
124
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
125
+ listingType: "standard",
126
+ customFields: [],
127
+ customSections: [],
128
+ isPromoted: false,
129
+ isOnSale: false,
90
130
  createdAt: new Date(),
91
131
  updatedAt: new Date(),
92
132
  }),
@@ -170,6 +210,13 @@ export const productsTesterSeedData = [
170
210
  images: [seedExtMedia("https://picsum.photos/seed/preorder-image-tester-sandbox-1-20260101/900/900")],
171
211
  mainImage: seedExtMedia("https://picsum.photos/seed/preorder-image-tester-sandbox-1-20260101/900/900"),
172
212
  isSold: false,
213
+ // stockQuantity must be set (not just availableQuantity) — the public
214
+ // listing route's default "hide sold" filter is a Firestore inequality
215
+ // on stockQuantity, and Firestore excludes documents missing that field
216
+ // entirely from an inequality query, not just ones where it's 0. Without
217
+ // this the pre-order would be permanently invisible on the default
218
+ // /pre-orders listing (2026-08-19 index-sweep session).
219
+ stockQuantity: 5,
173
220
  availableQuantity: 5,
174
221
  customFields: [],
175
222
  customSections: [],
@@ -208,13 +255,14 @@ export const productsTesterSeedData = [
208
255
  isPromoted: false,
209
256
  isOnSale: false,
210
257
  prizeDrawMode: "reveal",
258
+ prizeRevealMode: "instant",
211
259
  pricePerEntry: 50,
212
260
  prizeMaxEntries: 3,
213
261
  prizeCurrentEntries: 0,
262
+ prizeDrawDurationDays: 7,
214
263
  prizeRevealWindowStart: new Date(),
215
264
  prizeRevealWindowEnd: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),
216
265
  prizeRevealStatus: "open",
217
- prizeRevealDeadlineDays: 7,
218
266
  prizeDrawItems: [
219
267
  { itemNumber: 1, title: "Test Prize — Grand", description: "Disposable test grand prize.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-1-20260101/600/600")], condition: "new", estimatedValue: 500, isWon: false },
220
268
  { itemNumber: 2, title: "Test Prize — Runner-up", description: "Disposable test runner-up prize.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-2-20260101/600/600")], condition: "new", estimatedValue: 150, isWon: false },
@@ -223,6 +271,46 @@ export const productsTesterSeedData = [
223
271
  createdAt: new Date(),
224
272
  updatedAt: new Date(),
225
273
  }),
274
+ withTokens({
275
+ id: "prizedraw-tester-sandbox-closed",
276
+ slug: "prizedraw-tester-sandbox-closed",
277
+ title: "Test Prize Draw — Already Closed",
278
+ description: "Disposable test prize-draw, window already closed — exists to verify the admin/seller \"Show closed\" toggle actually hides it by default and reveals it when toggled on. Auto-expires in 7 days.",
279
+ categorySlugs: COLLECTIBLES_CATEGORY_SLUGS,
280
+ categoryNames: COLLECTIBLES_CATEGORY_NAMES,
281
+ brandSlug: "brand-tester-sandbox",
282
+ brand: "TestBrand",
283
+ price: 50,
284
+ currency: "INR",
285
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
286
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
287
+ listingType: "prize-draw",
288
+ images: [seedExtMedia("https://picsum.photos/seed/prizedraw-image-tester-sandbox-closed-20260101/900/900")],
289
+ mainImage: seedExtMedia("https://picsum.photos/seed/prizedraw-image-tester-sandbox-closed-20260101/900/900"),
290
+ isSold: true,
291
+ stockQuantity: 0,
292
+ availableQuantity: 0,
293
+ customFields: [],
294
+ customSections: [],
295
+ isPromoted: false,
296
+ isOnSale: false,
297
+ prizeDrawMode: "reveal",
298
+ prizeRevealMode: "scheduled",
299
+ pricePerEntry: 50,
300
+ prizeMaxEntries: 3,
301
+ prizeCurrentEntries: 3,
302
+ prizeDrawDurationDays: 13,
303
+ prizeRevealWindowStart: new Date(Date.now() - 14 * 24 * 60 * 60 * 1000),
304
+ prizeRevealWindowEnd: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000),
305
+ prizeRevealStatus: "closed",
306
+ prizeDrawItems: [
307
+ { itemNumber: 1, title: "Test Prize — Grand", description: "Disposable test grand prize.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-closed-1-20260101/600/600")], condition: "new", estimatedValue: 500, isWon: true },
308
+ { itemNumber: 2, title: "Test Prize — Runner-up", description: "Disposable test runner-up prize.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-closed-2-20260101/600/600")], condition: "new", estimatedValue: 150, isWon: true },
309
+ { itemNumber: 3, title: "Test Prize — Consolation", description: "Disposable test consolation prize.", images: [seedExtMedia("https://picsum.photos/seed/prizedraw-item-closed-3-20260101/600/600")], condition: "new", estimatedValue: 20, isWon: true },
310
+ ],
311
+ createdAt: new Date(),
312
+ updatedAt: new Date(),
313
+ }),
226
314
  withTokens({
227
315
  id: "classified-tester-sandbox-1",
228
316
  slug: "classified-tester-sandbox-1",
@@ -323,11 +411,67 @@ export const productsTesterSeedData = [
323
411
  createdAt: new Date(),
324
412
  updatedAt: new Date(),
325
413
  }),
414
+ withTokens({
415
+ id: "art-tester-sandbox-1",
416
+ slug: "art-tester-sandbox-1",
417
+ title: "Test Art Print — Frame Me!",
418
+ description: "Disposable test art listing for the tester QA program. Auto-expires in 7 days.",
419
+ categorySlugs: COLLECTIBLES_CATEGORY_SLUGS,
420
+ categoryNames: COLLECTIBLES_CATEGORY_NAMES,
421
+ brandSlug: "brand-tester-sandbox",
422
+ brand: "TestBrand",
423
+ price: 349,
424
+ currency: "INR",
425
+ stockQuantity: 5,
426
+ availableQuantity: 5,
427
+ isSold: false,
428
+ mainImage: seedExtMedia("https://picsum.photos/seed/art-image-tester-sandbox-1-20260101/900/900"),
429
+ images: [seedExtMedia("https://picsum.photos/seed/art-image-tester-sandbox-1-20260101/900/900")],
430
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
431
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
432
+ listingType: "art",
433
+ customFields: [],
434
+ customSections: [],
435
+ isPromoted: false,
436
+ isOnSale: false,
437
+ createdAt: new Date(),
438
+ updatedAt: new Date(),
439
+ }),
440
+ withTokens({
441
+ id: "stickers-tester-sandbox-1",
442
+ slug: "stickers-tester-sandbox-1",
443
+ title: "Test Sticker Pack — Peel Me!",
444
+ description: "Disposable test stickers listing for the tester QA program. Auto-expires in 7 days.",
445
+ categorySlugs: GADGETS_CATEGORY_SLUGS,
446
+ categoryNames: GADGETS_CATEGORY_NAMES,
447
+ brandSlug: "brand-tester-sandbox",
448
+ brand: "TestBrand",
449
+ price: 79,
450
+ currency: "INR",
451
+ stockQuantity: 25,
452
+ availableQuantity: 25,
453
+ isSold: false,
454
+ mainImage: seedExtMedia("https://picsum.photos/seed/stickers-image-tester-sandbox-1-20260101/900/900"),
455
+ images: [seedExtMedia("https://picsum.photos/seed/stickers-image-tester-sandbox-1-20260101/900/900")],
456
+ status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
457
+ condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
458
+ listingType: "stickers",
459
+ customFields: [],
460
+ customSections: [],
461
+ isPromoted: false,
462
+ isOnSale: false,
463
+ createdAt: new Date(),
464
+ updatedAt: new Date(),
465
+ }),
326
466
  withTokens({
327
467
  id: "group-tester-sandbox-bundle",
328
468
  slug: "group-tester-sandbox-bundle",
329
- title: "Test BundleStandard #1 + Standard #2",
330
- description: "Disposable test bundle bundling the two tester-sandbox standard products. Auto-expires in 7 days.",
469
+ // Product-group ("Set") parentTier GP, unrelated to the Bundles
470
+ // feature (categoryType:"bundle") despite the legacy "bundle" id/slug.
471
+ // Kept stable rather than renamed since nothing outside this file's
472
+ // internal group wiring depends on the "bundle" name.
473
+ title: "Test Product Set — Standard #1 + Standard #2",
474
+ description: "Disposable test product-group parent linking the two tester-sandbox standard products as a \"Set\". Auto-expires in 7 days.",
331
475
  categorySlugs: GADGETS_CATEGORY_SLUGS,
332
476
  categoryNames: GADGETS_CATEGORY_NAMES,
333
477
  brandSlug: "brand-tester-sandbox",