@mohasinac/appkit 2.6.1 → 2.6.3

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 (302) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +38 -0
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +75 -0
  3. package/dist/_internal/client/features/layout/RoleGuard.d.ts +15 -0
  4. package/dist/_internal/client/features/layout/RoleGuard.js +25 -0
  5. package/dist/_internal/client/features/layout/index.d.ts +5 -0
  6. package/dist/_internal/client/features/layout/index.js +4 -0
  7. package/dist/_internal/server/features/brands/actions.d.ts +3 -3
  8. package/dist/_internal/server/features/brands/actions.js +72 -5
  9. package/dist/_internal/server/features/brands/data.d.ts +8 -8
  10. package/dist/_internal/server/features/brands/data.js +10 -11
  11. package/dist/_internal/server/features/brands/service.d.ts +2 -2
  12. package/dist/_internal/server/features/brands/service.js +5 -5
  13. package/dist/_internal/server/features/categories/og.d.ts +33 -0
  14. package/dist/_internal/server/features/categories/og.js +75 -0
  15. package/dist/_internal/server/features/checkout/actions.d.ts +24 -0
  16. package/dist/_internal/server/features/checkout/actions.js +442 -13
  17. package/dist/_internal/server/features/checkout/index.d.ts +1 -1
  18. package/dist/_internal/server/features/checkout/index.js +1 -1
  19. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +59 -0
  20. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +99 -0
  21. package/dist/_internal/server/features/grouped/data.js +12 -5
  22. package/dist/_internal/server/features/homepage/data.d.ts +1 -1
  23. package/dist/_internal/server/features/homepage/data.js +2 -2
  24. package/dist/_internal/server/features/media/contextGuards.d.ts +52 -0
  25. package/dist/_internal/server/features/media/contextGuards.js +198 -0
  26. package/dist/_internal/server/features/orders/adapters.js +12 -0
  27. package/dist/_internal/server/features/products/data.d.ts +1 -1
  28. package/dist/_internal/server/features/sublisting-categories/data.d.ts +1 -1
  29. package/dist/_internal/server/features/sublisting-categories/data.js +2 -2
  30. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +24 -0
  31. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +86 -0
  32. package/dist/_internal/server/jobs/handlers/bundleStockSync.d.ts +18 -0
  33. package/dist/_internal/server/jobs/handlers/bundleStockSync.js +80 -0
  34. package/dist/_internal/server/jobs/handlers/index.d.ts +8 -0
  35. package/dist/_internal/server/jobs/handlers/index.js +13 -0
  36. package/dist/_internal/server/jobs/handlers/listingProcessor.js +13 -3
  37. package/dist/_internal/server/jobs/handlers/onProductStockChange.d.ts +17 -0
  38. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +136 -0
  39. package/dist/_internal/server/jobs/handlers/onProductWrite.js +17 -1
  40. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +9 -0
  41. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +29 -0
  42. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +10 -0
  43. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +58 -0
  44. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +10 -0
  45. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +65 -0
  46. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +9 -0
  47. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +45 -0
  48. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +30 -0
  49. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +94 -0
  50. package/dist/_internal/shared/features/brands/schema.d.ts +3 -3
  51. package/dist/_internal/shared/features/cart/schema.d.ts +8 -8
  52. package/dist/_internal/shared/features/cart/schema.js +1 -1
  53. package/dist/_internal/shared/features/categories/bundle-config.d.ts +17 -0
  54. package/dist/_internal/shared/features/categories/bundle-config.js +17 -0
  55. package/dist/_internal/shared/features/layout/config.d.ts +35 -0
  56. package/dist/_internal/shared/features/layout/config.js +58 -0
  57. package/dist/_internal/shared/features/layout/index.d.ts +3 -0
  58. package/dist/_internal/shared/features/layout/index.js +2 -0
  59. package/dist/_internal/shared/features/layout/types.d.ts +137 -0
  60. package/dist/_internal/shared/features/layout/types.js +13 -0
  61. package/dist/_internal/shared/features/products/types.d.ts +1 -1
  62. package/dist/_internal/shared/listing-types/_registry.d.ts +57 -0
  63. package/dist/_internal/shared/listing-types/_registry.js +28 -0
  64. package/dist/_internal/shared/listing-types/auction/config.d.ts +7 -0
  65. package/dist/_internal/shared/listing-types/auction/config.js +8 -0
  66. package/dist/_internal/shared/listing-types/auction/ctas.d.ts +1 -0
  67. package/dist/_internal/shared/listing-types/auction/ctas.js +2 -0
  68. package/dist/_internal/shared/listing-types/auction/og.d.ts +1 -0
  69. package/dist/_internal/shared/listing-types/auction/og.js +1 -0
  70. package/dist/_internal/shared/listing-types/auction/schema.d.ts +1 -0
  71. package/dist/_internal/shared/listing-types/auction/schema.js +1 -0
  72. package/dist/_internal/shared/listing-types/auction/seed-factory.d.ts +1 -0
  73. package/dist/_internal/shared/listing-types/auction/seed-factory.js +1 -0
  74. package/dist/_internal/shared/listing-types/capabilities.d.ts +41 -0
  75. package/dist/_internal/shared/listing-types/capabilities.js +75 -0
  76. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +7 -0
  77. package/dist/_internal/shared/listing-types/pre-order/config.js +8 -0
  78. package/dist/_internal/shared/listing-types/pre-order/ctas.d.ts +1 -0
  79. package/dist/_internal/shared/listing-types/pre-order/ctas.js +2 -0
  80. package/dist/_internal/shared/listing-types/pre-order/og.d.ts +1 -0
  81. package/dist/_internal/shared/listing-types/pre-order/og.js +1 -0
  82. package/dist/_internal/shared/listing-types/pre-order/schema.d.ts +1 -0
  83. package/dist/_internal/shared/listing-types/pre-order/schema.js +1 -0
  84. package/dist/_internal/shared/listing-types/pre-order/seed-factory.d.ts +1 -0
  85. package/dist/_internal/shared/listing-types/pre-order/seed-factory.js +1 -0
  86. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +7 -0
  87. package/dist/_internal/shared/listing-types/prize-draw/config.js +8 -0
  88. package/dist/_internal/shared/listing-types/prize-draw/ctas.d.ts +1 -0
  89. package/dist/_internal/shared/listing-types/prize-draw/ctas.js +2 -0
  90. package/dist/_internal/shared/listing-types/prize-draw/og.d.ts +1 -0
  91. package/dist/_internal/shared/listing-types/prize-draw/og.js +1 -0
  92. package/dist/_internal/shared/listing-types/prize-draw/schema.d.ts +1 -0
  93. package/dist/_internal/shared/listing-types/prize-draw/schema.js +1 -0
  94. package/dist/_internal/shared/listing-types/prize-draw/seed-factory.d.ts +1 -0
  95. package/dist/_internal/shared/listing-types/prize-draw/seed-factory.js +1 -0
  96. package/dist/_internal/shared/listing-types/standard/config.d.ts +7 -0
  97. package/dist/_internal/shared/listing-types/standard/config.js +8 -0
  98. package/dist/_internal/shared/listing-types/standard/ctas.d.ts +1 -0
  99. package/dist/_internal/shared/listing-types/standard/ctas.js +3 -0
  100. package/dist/_internal/shared/listing-types/standard/og.d.ts +1 -0
  101. package/dist/_internal/shared/listing-types/standard/og.js +1 -0
  102. package/dist/_internal/shared/listing-types/standard/schema.d.ts +1 -0
  103. package/dist/_internal/shared/listing-types/standard/schema.js +1 -0
  104. package/dist/_internal/shared/listing-types/standard/seed-factory.d.ts +1 -0
  105. package/dist/_internal/shared/listing-types/standard/seed-factory.js +1 -0
  106. package/dist/_internal/shared/media/limits.d.ts +33 -0
  107. package/dist/_internal/shared/media/limits.js +97 -0
  108. package/dist/_internal/shared/schema-versions.d.ts +76 -0
  109. package/dist/_internal/shared/schema-versions.js +82 -0
  110. package/dist/client.d.ts +9 -0
  111. package/dist/client.js +7 -0
  112. package/dist/constants/api-endpoints.d.ts +6 -3
  113. package/dist/constants/api-endpoints.js +2 -1
  114. package/dist/errors/messages.d.ts +1 -1
  115. package/dist/errors/messages.js +1 -1
  116. package/dist/features/account/migrations.d.ts +2 -0
  117. package/dist/features/account/migrations.js +10 -0
  118. package/dist/features/admin/components/AdminMediaView.js +1 -1
  119. package/dist/features/admin/components/AdminProductsView.js +7 -3
  120. package/dist/features/admin/migrations.d.ts +2 -0
  121. package/dist/features/admin/migrations.js +10 -0
  122. package/dist/features/admin/types/product.types.d.ts +1 -1
  123. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +1 -1
  124. package/dist/features/auctions/migrations.d.ts +2 -0
  125. package/dist/features/auctions/migrations.js +10 -0
  126. package/dist/features/auctions/schemas/index.d.ts +3 -3
  127. package/dist/features/auctions/schemas/index.js +1 -1
  128. package/dist/features/auth/migrations.d.ts +2 -0
  129. package/dist/features/auth/migrations.js +10 -0
  130. package/dist/features/blog/migrations.d.ts +2 -0
  131. package/dist/features/blog/migrations.js +10 -0
  132. package/dist/features/brands/migrations.d.ts +2 -0
  133. package/dist/features/brands/migrations.js +10 -0
  134. package/dist/features/bundles/components/BundlesByCategoryListing.d.ts +6 -0
  135. package/dist/features/bundles/components/BundlesByCategoryListing.js +50 -0
  136. package/dist/features/bundles/components/index.d.ts +2 -0
  137. package/dist/features/bundles/components/index.js +1 -0
  138. package/dist/features/bundles/migrations.d.ts +2 -0
  139. package/dist/features/bundles/migrations.js +10 -0
  140. package/dist/features/bundles/schemas/index.d.ts +1 -0
  141. package/dist/features/bundles/schemas/index.js +1 -0
  142. package/dist/features/bundles/schemas/zod.d.ts +377 -0
  143. package/dist/features/bundles/schemas/zod.js +71 -0
  144. package/dist/features/cart/migrations.d.ts +2 -0
  145. package/dist/features/cart/migrations.js +10 -0
  146. package/dist/features/cart/schemas/firestore.d.ts +2 -2
  147. package/dist/features/categories/components/BrandDetailPageView.js +35 -4
  148. package/dist/features/categories/components/BrandDetailTabs.d.ts +5 -1
  149. package/dist/features/categories/components/BrandDetailTabs.js +22 -8
  150. package/dist/features/categories/components/CategoryBundlesListing.d.ts +6 -0
  151. package/dist/features/categories/components/CategoryBundlesListing.js +74 -0
  152. package/dist/features/categories/components/CategoryDetailPageView.js +29 -4
  153. package/dist/features/categories/components/CategoryDetailTabs.d.ts +5 -1
  154. package/dist/features/categories/components/CategoryDetailTabs.js +22 -8
  155. package/dist/features/categories/migrations.d.ts +2 -0
  156. package/dist/features/categories/migrations.js +10 -0
  157. package/dist/features/categories/repository/categories.repository.d.ts +29 -0
  158. package/dist/features/categories/repository/categories.repository.js +83 -0
  159. package/dist/features/categories/schemas/firestore.d.ts +59 -2
  160. package/dist/features/categories/schemas/firestore.js +6 -0
  161. package/dist/features/categories/types/index.d.ts +11 -3
  162. package/dist/features/events/migrations.d.ts +2 -0
  163. package/dist/features/events/migrations.js +10 -0
  164. package/dist/features/faq/migrations.d.ts +2 -0
  165. package/dist/features/faq/migrations.js +10 -0
  166. package/dist/features/grouped/migrations.d.ts +2 -0
  167. package/dist/features/grouped/migrations.js +10 -0
  168. package/dist/features/grouped/schemas/firestore.d.ts +29 -10
  169. package/dist/features/grouped/schemas/firestore.js +10 -5
  170. package/dist/features/history/migrations.d.ts +2 -0
  171. package/dist/features/history/migrations.js +10 -0
  172. package/dist/features/homepage/hooks/useFeaturedAuctions.js +2 -2
  173. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +2 -2
  174. package/dist/features/homepage/lib/section-renderer.js +5 -3
  175. package/dist/features/media/AvatarUpload.js +6 -28
  176. package/dist/features/media/hooks/useMedia.d.ts +31 -15
  177. package/dist/features/media/hooks/useMedia.js +48 -13
  178. package/dist/features/media/upload/ImageUpload.js +1 -1
  179. package/dist/features/media/upload/MediaUploadField.js +1 -1
  180. package/dist/features/messages/migrations.d.ts +2 -0
  181. package/dist/features/messages/migrations.js +10 -0
  182. package/dist/features/orders/components/OrdersList.js +10 -1
  183. package/dist/features/orders/migrations.d.ts +2 -0
  184. package/dist/features/orders/migrations.js +10 -0
  185. package/dist/features/orders/repository/orders.repository.d.ts +16 -0
  186. package/dist/features/orders/repository/orders.repository.js +49 -0
  187. package/dist/features/orders/schemas/firestore.d.ts +8 -0
  188. package/dist/features/orders/types/index.d.ts +12 -0
  189. package/dist/features/orders/utils/order-splitter.d.ts +2 -2
  190. package/dist/features/orders/utils/order-splitter.js +5 -0
  191. package/dist/features/payments/migrations.d.ts +2 -0
  192. package/dist/features/payments/migrations.js +10 -0
  193. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -1
  194. package/dist/features/products/actions/product-actions.d.ts +1 -1
  195. package/dist/features/products/api/[id]/route.js +34 -0
  196. package/dist/features/products/api/route.js +1 -19
  197. package/dist/features/products/components/CompareOverlay.d.ts +1 -1
  198. package/dist/features/products/components/MarketplacePrizeDrawCard.d.ts +24 -0
  199. package/dist/features/products/components/MarketplacePrizeDrawCard.js +102 -0
  200. package/dist/features/products/components/PrizeDrawCollage.d.ts +32 -0
  201. package/dist/features/products/components/PrizeDrawCollage.js +22 -0
  202. package/dist/features/products/components/PrizeDrawDetailPageView.d.ts +27 -0
  203. package/dist/features/products/components/PrizeDrawDetailPageView.js +118 -0
  204. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +19 -0
  205. package/dist/features/products/components/PrizeDrawEntryActions.js +48 -0
  206. package/dist/features/products/components/PrizeDrawItemsEditor.d.ts +13 -0
  207. package/dist/features/products/components/PrizeDrawItemsEditor.js +97 -0
  208. package/dist/features/products/components/PrizeDrawsIndexListing.d.ts +8 -0
  209. package/dist/features/products/components/PrizeDrawsIndexListing.js +128 -0
  210. package/dist/features/products/components/PrizeDrawsListingView.d.ts +15 -0
  211. package/dist/features/products/components/PrizeDrawsListingView.js +49 -0
  212. package/dist/features/products/components/PrizeRevealModal.d.ts +34 -0
  213. package/dist/features/products/components/PrizeRevealModal.js +124 -0
  214. package/dist/features/products/components/ProductDetailPageView.js +13 -1
  215. package/dist/features/products/components/ProductForm.js +35 -2
  216. package/dist/features/products/components/ProductGrid.js +3 -1
  217. package/dist/features/products/components/index.d.ts +16 -0
  218. package/dist/features/products/components/index.js +8 -0
  219. package/dist/features/products/constants/listing-tabs.d.ts +113 -0
  220. package/dist/features/products/constants/listing-tabs.js +43 -0
  221. package/dist/features/products/index.d.ts +1 -0
  222. package/dist/features/products/index.js +1 -0
  223. package/dist/features/products/migrations.d.ts +2 -0
  224. package/dist/features/products/migrations.js +10 -0
  225. package/dist/features/products/repository/products.repository.d.ts +11 -7
  226. package/dist/features/products/repository/products.repository.js +49 -24
  227. package/dist/features/products/schemas/firestore.d.ts +3 -3
  228. package/dist/features/products/schemas/firestore.js +2 -2
  229. package/dist/features/products/schemas/index.d.ts +5 -5
  230. package/dist/features/products/schemas/index.js +3 -1
  231. package/dist/features/products/schemas/product-features.validators.d.ts +6 -6
  232. package/dist/features/products/types/index.d.ts +17 -1
  233. package/dist/features/products/utils/listing-type.d.ts +7 -4
  234. package/dist/features/products/utils/listing-type.js +8 -4
  235. package/dist/features/promotions/actions/coupon-actions.d.ts +1 -1
  236. package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
  237. package/dist/features/promotions/migrations.d.ts +2 -0
  238. package/dist/features/promotions/migrations.js +10 -0
  239. package/dist/features/promotions/repository/coupons.repository.d.ts +1 -1
  240. package/dist/features/promotions/schemas/index.d.ts +2 -2
  241. package/dist/features/reviews/migrations.d.ts +2 -0
  242. package/dist/features/reviews/migrations.js +10 -0
  243. package/dist/features/scams/migrations.d.ts +2 -0
  244. package/dist/features/scams/migrations.js +10 -0
  245. package/dist/features/search/api/route.d.ts +1 -1
  246. package/dist/features/search/api/route.js +3 -3
  247. package/dist/features/search/components/Search.d.ts +1 -1
  248. package/dist/features/search/schemas/index.d.ts +3 -3
  249. package/dist/features/search/schemas/index.js +3 -1
  250. package/dist/features/search/types/index.d.ts +2 -2
  251. package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
  252. package/dist/features/seller/components/SellerProductsView.js +20 -6
  253. package/dist/features/seller/migrations.d.ts +2 -0
  254. package/dist/features/seller/migrations.js +10 -0
  255. package/dist/features/seller/schemas/index.d.ts +2 -2
  256. package/dist/features/stores/components/StoreBundlesPageView.d.ts +12 -0
  257. package/dist/features/stores/components/StoreBundlesPageView.js +24 -0
  258. package/dist/features/stores/components/StoreDetailLayoutView.js +15 -3
  259. package/dist/features/stores/components/StorePrizeDrawsPageView.d.ts +11 -0
  260. package/dist/features/stores/components/StorePrizeDrawsPageView.js +27 -0
  261. package/dist/features/stores/components/index.d.ts +2 -0
  262. package/dist/features/stores/migrations.d.ts +2 -0
  263. package/dist/features/stores/migrations.js +10 -0
  264. package/dist/features/stores/schemas/index.d.ts +2 -2
  265. package/dist/features/stores/types/index.d.ts +1 -1
  266. package/dist/features/sublisting/migrations.d.ts +2 -0
  267. package/dist/features/sublisting/migrations.js +10 -0
  268. package/dist/features/sublisting/schemas/firestore.d.ts +2 -0
  269. package/dist/features/support/migrations.d.ts +2 -0
  270. package/dist/features/support/migrations.js +10 -0
  271. package/dist/features/wishlist/migrations.d.ts +2 -0
  272. package/dist/features/wishlist/migrations.js +10 -0
  273. package/dist/features/wishlist/types/index.d.ts +1 -1
  274. package/dist/index.d.ts +26 -18
  275. package/dist/index.js +41 -24
  276. package/dist/jobs.d.ts +1 -1
  277. package/dist/jobs.js +4 -0
  278. package/dist/next/routing/route-map.d.ts +4 -0
  279. package/dist/next/routing/route-map.js +2 -0
  280. package/dist/providers/db-firebase/admin-app-lite.js +21 -0
  281. package/dist/providers/db-firebase/filter-aliases.d.ts +2 -2
  282. package/dist/repositories/index.d.ts +0 -5
  283. package/dist/repositories/index.js +5 -4
  284. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  285. package/dist/seed/categories-seed-data.js +1105 -6
  286. package/dist/seed/faq-seed-data.js +160 -0
  287. package/dist/seed/grouped-listings-seed-data.js +32 -32
  288. package/dist/seed/homepage-sections-seed-data.js +52 -6
  289. package/dist/seed/index.d.ts +1 -3
  290. package/dist/seed/index.js +4 -3
  291. package/dist/seed/manifest.js +8 -13
  292. package/dist/seed/products-prize-draws-seed-data.d.ts +17 -0
  293. package/dist/seed/products-prize-draws-seed-data.js +313 -0
  294. package/dist/seo/json-ld.d.ts +1 -1
  295. package/dist/server-entry.d.ts +2 -2
  296. package/dist/server-entry.js +5 -3
  297. package/dist/server.d.ts +9 -2
  298. package/dist/server.js +11 -5
  299. package/dist/tailwind-utilities.css +1 -1
  300. package/dist/validation/schemas.d.ts +8 -8
  301. package/package.json +1 -1
  302. package/scripts/seed-cli.mjs +2 -4
@@ -1187,4 +1187,164 @@ export const faqSeedData = [
1187
1187
  createdAt: daysAgo(74),
1188
1188
  updatedAt: daysAgo(4),
1189
1189
  },
1190
+ // ══════════════════════════════════════════════════════════════════════════
1191
+ // BUNDLES + PRIZE DRAWS (SB5-B — 6 FAQs)
1192
+ // ══════════════════════════════════════════════════════════════════════════
1193
+ // Filed under `product_information` because the schema enum doesn't carry
1194
+ // a dedicated "listings" bucket. Tags identify the surface — clients can
1195
+ // filter on tag instead.
1196
+ {
1197
+ id: "faq-what-is-bundle",
1198
+ question: "What is a bundle on LetItRip?",
1199
+ answer: html(`<p>A <strong>bundle</strong> is a curated multi-product listing — 3 to 16 individual items grouped under one fixed price. Sellers use bundles to ship combos that work together: starter packs, themed sets, multi-card lots, or "buy the whole collection" deals. Each item in a bundle must be in the seller's catalogue first; bundles never invent new SKUs.</p><p>Bundles are always one of two listing kinds: <strong>standard bundles</strong> (every item ships immediately) or <strong>pre-order bundles</strong> (every item is upcoming). Auctions and prize draws cannot be bundled — the price-discovery mechanics don't compose.</p><p>When any item inside a bundle sells through another channel, the bundle automatically flips to <em>out of stock</em> — you'll never end up with a half-fulfilled bundle.</p>`),
1200
+ category: "product_information",
1201
+ showOnHomepage: false,
1202
+ showInFooter: false,
1203
+ isPinned: false,
1204
+ order: 30,
1205
+ priority: 6,
1206
+ tags: ["bundle", "listings", "multi-item"],
1207
+ relatedFAQs: ["faq-how-create-bundle", "faq-what-is-prize-draw"],
1208
+ useSiteSettings: true,
1209
+ variables: {},
1210
+ stats: makeStats(0, 0),
1211
+ seo: {
1212
+ slug: "faq-what-is-bundle",
1213
+ metaTitle: "What is a bundle? — LetItRip",
1214
+ metaDescription: "Bundles group 3–16 items into one fixed-price listing. Standard or pre-order, never auctions or prize draws.",
1215
+ },
1216
+ isActive: true,
1217
+ createdBy: "user-admin-letitrip",
1218
+ createdAt: daysAgo(2),
1219
+ updatedAt: daysAgo(2),
1220
+ },
1221
+ {
1222
+ id: "faq-how-create-bundle",
1223
+ question: "How do I create a bundle?",
1224
+ answer: html(`<p>From your store dashboard, open <strong>Listings → Bundles → New bundle</strong>. Steps:</p><ol><li>Title + description for the bundle.</li><li>Pick 3–16 items from your catalogue using the inline picker. All items must share the same listing type (all standard, or all pre-order).</li><li>Set the bundle price — usually lower than the sum of the individual prices.</li><li>(Optional) Set a per-customer limit if you want to cap repeat purchases.</li><li>Save as <em>Draft</em> to keep iterating, or <em>Published</em> to make it live.</li></ol><p>Once published the bundle appears at <code>/bundles/{your-slug}</code> and in the public bundle list. Every product inside the bundle automatically picks up a "In bundle: …" badge linking back to the bundle.</p>`),
1225
+ category: "product_information",
1226
+ showOnHomepage: false,
1227
+ showInFooter: false,
1228
+ isPinned: false,
1229
+ order: 31,
1230
+ priority: 5,
1231
+ tags: ["bundle", "seller", "create-listing"],
1232
+ relatedFAQs: ["faq-what-is-bundle"],
1233
+ useSiteSettings: true,
1234
+ variables: {},
1235
+ stats: makeStats(0, 0),
1236
+ seo: {
1237
+ slug: "faq-how-create-bundle",
1238
+ metaTitle: "How to create a bundle — LetItRip seller guide",
1239
+ metaDescription: "Step-by-step: pick 3–16 items, set the bundle price, publish. Standard or pre-order only.",
1240
+ },
1241
+ isActive: true,
1242
+ createdBy: "user-admin-letitrip",
1243
+ createdAt: daysAgo(2),
1244
+ updatedAt: daysAgo(2),
1245
+ },
1246
+ {
1247
+ id: "faq-what-is-prize-draw",
1248
+ question: "What is a prize draw?",
1249
+ answer: html(`<p>A <strong>prize draw</strong> is a single listing with a fixed pool of distinct items (called a <em>collage</em>) where each paid entry wins exactly one item from the pool at random. The seller sets the price per entry, the maximum number of entries, and a fixed reveal window during which winners discover which item they won.</p><p>Prize draws differ from raffles in that <strong>every paid entry wins</strong> — the only randomness is which item from the pool you get. The pool is finite: once an item is won, it's removed for everyone else. If the pool is exhausted before all entries reveal, the remaining entries are auto-refunded.</p><p>Prize draw payments are <strong>non-refundable</strong> once the reveal window opens (subject to the pool-exhaustion fallback). You'll see an explicit consent prompt at checkout.</p>`),
1250
+ category: "product_information",
1251
+ showOnHomepage: false,
1252
+ showInFooter: false,
1253
+ isPinned: false,
1254
+ order: 32,
1255
+ priority: 7,
1256
+ tags: ["prize-draw", "listings", "non-refundable"],
1257
+ relatedFAQs: [
1258
+ "faq-prize-draw-fairness",
1259
+ "faq-prize-draw-refund",
1260
+ "faq-prize-draw-reveal",
1261
+ ],
1262
+ useSiteSettings: true,
1263
+ variables: {},
1264
+ stats: makeStats(0, 0),
1265
+ seo: {
1266
+ slug: "faq-what-is-prize-draw",
1267
+ metaTitle: "What is a prize draw? — LetItRip",
1268
+ metaDescription: "Each paid entry wins one item from the seller's pool at random. Finite pool, fixed reveal window, non-refundable.",
1269
+ },
1270
+ isActive: true,
1271
+ createdBy: "user-admin-letitrip",
1272
+ createdAt: daysAgo(2),
1273
+ updatedAt: daysAgo(2),
1274
+ },
1275
+ {
1276
+ id: "faq-prize-draw-fairness",
1277
+ question: "How does LetItRip make prize draws fair?",
1278
+ answer: html(`<p>Two guarantees underpin every prize draw:</p><ol><li><strong>Cryptographic randomness.</strong> The winning item is selected by <code>crypto.randomInt()</code> over the current pool of unwon items at the exact moment you click <em>Reveal My Prize</em>. The seller cannot influence which item you receive.</li><li><strong>Open source RNG code.</strong> Every prize draw links to the exact Git commit of the reveal API that ran on your entry. Click <em>View RNG Source Code</em> on the prize draw detail page to inspect the code yourself.</li></ol><p>The pool is finite — once an item is won, it's removed for everyone else. If the pool is exhausted before all entries reveal (rare; usually means the seller mispriced entries vs pool size), the remaining entries are auto-refunded and notified.</p>`),
1279
+ category: "product_information",
1280
+ showOnHomepage: false,
1281
+ showInFooter: false,
1282
+ isPinned: false,
1283
+ order: 33,
1284
+ priority: 7,
1285
+ tags: ["prize-draw", "fairness", "randomness", "rng", "open-source"],
1286
+ relatedFAQs: ["faq-what-is-prize-draw", "faq-prize-draw-refund"],
1287
+ useSiteSettings: true,
1288
+ variables: {},
1289
+ stats: makeStats(0, 0),
1290
+ seo: {
1291
+ slug: "faq-prize-draw-fairness",
1292
+ metaTitle: "Are prize draws fair? — LetItRip RNG explained",
1293
+ metaDescription: "crypto.randomInt over the live pool, source-code linked per draw. Pool exhaustion auto-refunds.",
1294
+ },
1295
+ isActive: true,
1296
+ createdBy: "user-admin-letitrip",
1297
+ createdAt: daysAgo(2),
1298
+ updatedAt: daysAgo(2),
1299
+ },
1300
+ {
1301
+ id: "faq-prize-draw-refund",
1302
+ question: "Can I get a refund on a prize draw entry?",
1303
+ answer: html(`<p>Prize draw entries are <strong>non-refundable once the reveal window opens</strong>. You'll see an explicit consent dialog at checkout — your "Enter Draw" click is the binding action.</p><p>The exceptions, all automatic:</p><ul><li><strong>Pool exhausted before you reveal.</strong> If every item in the pool is won before you click <em>Reveal My Prize</em>, your entry is auto-refunded in full and you're notified.</li><li><strong>Reveal deadline missed.</strong> If you don't reveal within the deadline (default 3 days after the reveal window opens), the system auto-refunds and the item returns to the pool.</li><li><strong>Draw cancelled by the seller.</strong> Sellers may cancel a draw before the reveal window opens — every paid entry is auto-refunded.</li></ul><p>Refunds reverse via Razorpay to your original payment method within 5–7 business days (UPI: 1–2 business days).</p>`),
1304
+ category: "product_information",
1305
+ showOnHomepage: false,
1306
+ showInFooter: false,
1307
+ isPinned: false,
1308
+ order: 34,
1309
+ priority: 7,
1310
+ tags: ["prize-draw", "refund", "non-refundable", "policy"],
1311
+ relatedFAQs: ["faq-what-is-prize-draw", "faq-prize-draw-reveal"],
1312
+ useSiteSettings: true,
1313
+ variables: {},
1314
+ stats: makeStats(0, 0),
1315
+ seo: {
1316
+ slug: "faq-prize-draw-refund",
1317
+ metaTitle: "Prize draw refund policy — LetItRip",
1318
+ metaDescription: "Non-refundable once reveal opens. Pool exhaustion, missed deadlines, and cancellations auto-refund.",
1319
+ },
1320
+ isActive: true,
1321
+ createdBy: "user-admin-letitrip",
1322
+ createdAt: daysAgo(2),
1323
+ updatedAt: daysAgo(2),
1324
+ },
1325
+ {
1326
+ id: "faq-prize-draw-reveal",
1327
+ question: "How does prize draw reveal work?",
1328
+ answer: html(`<p>After you pay for a prize draw entry, the system places your order. You then wait for the reveal to do anything:</p><ol><li><strong>Reveal window opens.</strong> The seller publishes a fixed window (e.g. "Reveal opens June 15, closes June 22"). You get an in-app + email notification when it opens.</li><li><strong>Click "Reveal My Prize".</strong> On your order detail page, click <em>Reveal My Prize</em>. The system picks one of the still-available items at random, marks it as won, and shows you the result with a card-flip animation.</li><li><strong>Reveal deadline.</strong> You have until the deadline (default 3 days after window open, capped at window close) to reveal. Miss the deadline → auto-refund + item goes back into the pool.</li><li><strong>Seller ships.</strong> The seller dispatches your revealed item within their stated timeline. Tracking appears on the order detail page as usual.</li></ol><p>You can re-open the order detail page to see your won item any time — the reveal is permanent.</p>`),
1329
+ category: "product_information",
1330
+ showOnHomepage: false,
1331
+ showInFooter: false,
1332
+ isPinned: false,
1333
+ order: 35,
1334
+ priority: 6,
1335
+ tags: ["prize-draw", "reveal", "deadline", "shipping"],
1336
+ relatedFAQs: ["faq-what-is-prize-draw", "faq-prize-draw-refund"],
1337
+ useSiteSettings: true,
1338
+ variables: {},
1339
+ stats: makeStats(0, 0),
1340
+ seo: {
1341
+ slug: "faq-prize-draw-reveal",
1342
+ metaTitle: "How to reveal a prize draw entry — LetItRip",
1343
+ metaDescription: "Reveal window opens, click 'Reveal My Prize', seller ships. Miss the deadline → auto-refund.",
1344
+ },
1345
+ isActive: true,
1346
+ createdBy: "user-admin-letitrip",
1347
+ createdAt: daysAgo(2),
1348
+ updatedAt: daysAgo(2),
1349
+ },
1190
1350
  ];
@@ -17,11 +17,11 @@ export const groupedListingsSeedData = [
17
17
  "product-pokemon-sv-etb",
18
18
  "product-pokemon-pikachu-plush-8",
19
19
  ],
20
- bundlePrice: 499900,
21
- originalPrice: 549900,
22
- discountPercent: 9,
20
+ groupTheme: "related",
21
+ minActiveMembers: 2,
22
+ activeMemberCount: 2,
23
+ visibilityStatus: "visible",
23
24
  coverImage: "https://images.unsplash.com/photo-1613771404784-3a5686aa2be3?w=800&h=600&fit=crop",
24
- currency: "INR",
25
25
  isActive: true,
26
26
  isFeatured: true,
27
27
  storeId: "store-pokemon-palace",
@@ -42,11 +42,11 @@ export const groupedListingsSeedData = [
42
42
  "product-hot-wheels-redline-1969-camaro",
43
43
  "product-tomica-limited-datsun",
44
44
  ],
45
- bundlePrice: 599900,
46
- originalPrice: 679900,
47
- discountPercent: 12,
45
+ groupTheme: "related",
46
+ minActiveMembers: 2,
47
+ activeMemberCount: 2,
48
+ visibilityStatus: "visible",
48
49
  coverImage: "https://images.unsplash.com/photo-1581235720704-06d3acfcb36f?w=800&h=600&fit=crop",
49
- currency: "INR",
50
50
  isActive: true,
51
51
  isFeatured: true,
52
52
  storeId: "store-diecast-depot",
@@ -66,11 +66,11 @@ export const groupedListingsSeedData = [
66
66
  "product-beyblade-x-bx01-dran-sword",
67
67
  "product-beyblade-burst-b200-valkyrie",
68
68
  ],
69
- bundlePrice: 349900,
70
- originalPrice: 399800,
71
- discountPercent: 12,
69
+ groupTheme: "related",
70
+ minActiveMembers: 2,
71
+ activeMemberCount: 2,
72
+ visibilityStatus: "visible",
72
73
  coverImage: "https://images.unsplash.com/photo-1555680202-c86f0e12f086?w=800&h=600&fit=crop",
73
- currency: "INR",
74
74
  isActive: true,
75
75
  isFeatured: true,
76
76
  storeId: "store-beyblade-arena",
@@ -90,11 +90,11 @@ export const groupedListingsSeedData = [
90
90
  "product-nendoroid-rem-rezero",
91
91
  "product-shf-goku-ultra-instinct",
92
92
  ],
93
- bundlePrice: 1099900,
94
- originalPrice: 1199800,
95
- discountPercent: 8,
93
+ groupTheme: "related",
94
+ minActiveMembers: 2,
95
+ activeMemberCount: 2,
96
+ visibilityStatus: "visible",
96
97
  coverImage: "https://images.unsplash.com/photo-1536896407451-6e3dd976edd6?w=800&h=600&fit=crop",
97
- currency: "INR",
98
98
  isActive: true,
99
99
  isFeatured: false,
100
100
  storeId: "store-tokyo-toys-india",
@@ -113,11 +113,11 @@ export const groupedListingsSeedData = [
113
113
  "product-gundam-rx78-mg",
114
114
  "product-gundam-wing-zero-rg",
115
115
  ],
116
- bundlePrice: 449900,
117
- originalPrice: 499800,
118
- discountPercent: 10,
116
+ groupTheme: "related",
117
+ minActiveMembers: 2,
118
+ activeMemberCount: 2,
119
+ visibilityStatus: "visible",
119
120
  coverImage: "https://images.unsplash.com/photo-1536896407451-6e3dd976edd6?w=800&h=600&fit=crop",
120
- currency: "INR",
121
121
  isActive: true,
122
122
  isFeatured: false,
123
123
  storeId: "store-tokyo-toys-india",
@@ -137,11 +137,11 @@ export const groupedListingsSeedData = [
137
137
  "product-pokemon-pikachu-plush-8",
138
138
  "product-pokemon-gengar-sitting-cuties",
139
139
  ],
140
- bundlePrice: 249900,
141
- originalPrice: 279800,
142
- discountPercent: 11,
140
+ groupTheme: "related",
141
+ minActiveMembers: 2,
142
+ activeMemberCount: 2,
143
+ visibilityStatus: "visible",
143
144
  coverImage: "https://images.unsplash.com/photo-1613771404784-3a5686aa2be3?w=800&h=600&fit=crop",
144
- currency: "INR",
145
145
  isActive: true,
146
146
  isFeatured: false,
147
147
  storeId: "store-pokemon-palace",
@@ -161,11 +161,11 @@ export const groupedListingsSeedData = [
161
161
  "product-yugioh-25th-tin",
162
162
  "product-yugioh-structure-albaz",
163
163
  ],
164
- bundlePrice: 369900,
165
- originalPrice: 389800,
166
- discountPercent: 5,
164
+ groupTheme: "related",
165
+ minActiveMembers: 2,
166
+ activeMemberCount: 2,
167
+ visibilityStatus: "visible",
167
168
  coverImage: "https://images.unsplash.com/photo-1612036782180-6f0b6cd846fe?w=800&h=600&fit=crop",
168
- currency: "INR",
169
169
  isActive: true,
170
170
  isFeatured: false,
171
171
  storeId: "store-cardgame-hub",
@@ -185,11 +185,11 @@ export const groupedListingsSeedData = [
185
185
  "product-funko-pop-naruto-sage",
186
186
  "product-mcfarlane-batman-dark-knight",
187
187
  ],
188
- bundlePrice: 449900,
189
- originalPrice: 499800,
190
- discountPercent: 10,
188
+ groupTheme: "related",
189
+ minActiveMembers: 2,
190
+ activeMemberCount: 2,
191
+ visibilityStatus: "visible",
191
192
  coverImage: "https://images.unsplash.com/photo-1536896407451-6e3dd976edd6?w=800&h=600&fit=crop",
192
- currency: "INR",
193
193
  isActive: true,
194
194
  isFeatured: false,
195
195
  storeId: "store-tokyo-toys-india",
@@ -409,12 +409,13 @@ export const homepageSectionsSeedData = [
409
409
  updatedAt: daysAgo(15),
410
410
  },
411
411
  // ── 20. featured-bundles (SB11) ──────────────────────────────────────────
412
- // Disabled until bundles collection lands (S19+). Section type union covers it now.
412
+ // Enabled bundles collection live since S4 (SB3 closeout). 3 bundles
413
+ // seeded in bundles-seed-data.ts; section renders them on the homepage.
413
414
  {
414
415
  id: "section-featured-bundles",
415
416
  type: "featured-bundles",
416
417
  order: 20,
417
- enabled: false,
418
+ enabled: true,
418
419
  config: {
419
420
  title: "Curated Bundles",
420
421
  subtitle: "Everything you need in one deal",
@@ -426,12 +427,13 @@ export const homepageSectionsSeedData = [
426
427
  updatedAt: daysAgo(2),
427
428
  },
428
429
  // ── 21. prize-draws (SB11) ───────────────────────────────────────────────
429
- // Disabled until products gain listingType="prize-draw" + prizeRevealStatus (S19+).
430
+ // Enabled listingType="prize-draw" schema + prizeRevealStatus fields are
431
+ // live (SB1-B). Seed prize-draw product docs ship in S7-PrizeDraws.
430
432
  {
431
433
  id: "section-prize-draws",
432
434
  type: "prize-draws",
433
435
  order: 21,
434
- enabled: false,
436
+ enabled: true,
435
437
  config: {
436
438
  title: "Prize Draws",
437
439
  subtitle: "Enter for a chance to win rare collectibles",
@@ -443,12 +445,56 @@ export const homepageSectionsSeedData = [
443
445
  createdAt: daysAgo(2),
444
446
  updatedAt: daysAgo(2),
445
447
  },
446
- // ── 22. event-raffles (SB11) ─────────────────────────────────────────────
448
+ // ── 22a. brand-filtered products: Hot Wheels (SB5-D) ─────────────────────
449
+ // Uses the standard `products` section type with a brand filter — no
450
+ // separate "brand-products" type needed (filterByBrand is on the config).
451
+ {
452
+ id: "section-brand-hot-wheels",
453
+ type: "products",
454
+ order: 22,
455
+ enabled: true,
456
+ config: {
457
+ title: "Hot Wheels Spotlight",
458
+ subtitle: "Vintage Redlines, Super TH hunts, and current mainline",
459
+ maxProducts: 12,
460
+ rows: 2,
461
+ itemsPerRow: 3,
462
+ mobileItemsPerRow: 1,
463
+ autoScroll: false,
464
+ scrollInterval: 0,
465
+ filterByBrand: "brand-hot-wheels",
466
+ sortBy: "featured",
467
+ },
468
+ createdAt: daysAgo(2),
469
+ updatedAt: daysAgo(2),
470
+ },
471
+ // ── 22b. brand-filtered products: Pokémon Company (SB5-D) ────────────────
472
+ {
473
+ id: "section-brand-pokemon",
474
+ type: "products",
475
+ order: 23,
476
+ enabled: true,
477
+ config: {
478
+ title: "Pokémon TCG Hub",
479
+ subtitle: "Latest sets, vintage holos, and PSA-graded slabs",
480
+ maxProducts: 12,
481
+ rows: 2,
482
+ itemsPerRow: 3,
483
+ mobileItemsPerRow: 1,
484
+ autoScroll: false,
485
+ scrollInterval: 0,
486
+ filterByBrand: "brand-pokemon-company",
487
+ sortBy: "featured",
488
+ },
489
+ createdAt: daysAgo(2),
490
+ updatedAt: daysAgo(2),
491
+ },
492
+ // ── 24. event-raffles (SB11) ─────────────────────────────────────────────
447
493
  // Disabled until events gain hasRaffle flag (S19+).
448
494
  {
449
495
  id: "section-event-raffles",
450
496
  type: "event-raffles",
451
- order: 22,
497
+ order: 24,
452
498
  enabled: false,
453
499
  config: {
454
500
  title: "Live Raffles & Spin Wheels",
@@ -39,7 +39,6 @@ export { makePayout, makeFullPayout, PAYOUT_FIXTURES, } from "./factories/payout
39
39
  export { DEFAULT_CATEGORIES } from "./defaults/categories";
40
40
  export { DEFAULT_FAQS } from "./defaults/faqs";
41
41
  export { DEFAULT_HOMEPAGE_SECTIONS } from "./defaults/homepage-sections";
42
- export { brandsSeedData } from "./brands-seed-data";
43
42
  export { usersSeedData } from "./users-seed-data";
44
43
  export { sessionsSeedData, SESSION_COLLECTION } from "./sessions-seed-data";
45
44
  export { addressesSeedData } from "./addresses-seed-data";
@@ -49,6 +48,7 @@ export { categoriesSeedData } from "./categories-seed-data";
49
48
  export { productsStandardSeedData } from "./products-standard-seed-data";
50
49
  export { productsAuctionsSeedData } from "./products-auctions-seed-data";
51
50
  export { productsPreOrdersSeedData } from "./products-preorders-seed-data";
51
+ export { productsPrizeDrawsSeedData } from "./products-prize-draws-seed-data";
52
52
  export { ordersSeedData } from "./orders-seed-data";
53
53
  export { reviewsSeedData } from "./reviews-seed-data";
54
54
  export { cartsSeedData } from "./cart-seed-data";
@@ -68,9 +68,7 @@ export { carouselsSeedData } from "./carousels-seed-data";
68
68
  export { wishlistsSeedData } from "./wishlists-seed-data";
69
69
  export { historySeedData } from "./history-seed-data";
70
70
  export { conversationsSeedData } from "./conversations-seed-data";
71
- export { sublistingCategoriesSeedData } from "./sublisting-categories-seed-data";
72
71
  export { groupedListingsSeedData } from "./grouped-listings-seed-data";
73
- export { bundlesSeedData } from "./bundles-seed-data";
74
72
  export { scammersSeedData } from "./scammers-seed-data";
75
73
  export { productFeaturesSeedData } from "./product-features-seed-data";
76
74
  export type { SeedManifest, SeedManifestEntry } from "./manifest";
@@ -26,7 +26,7 @@ export { DEFAULT_CATEGORIES } from "./defaults/categories";
26
26
  export { DEFAULT_FAQS } from "./defaults/faqs";
27
27
  export { DEFAULT_HOMEPAGE_SECTIONS } from "./defaults/homepage-sections";
28
28
  // Migrated seed datasets from consumer repositories
29
- export { brandsSeedData } from "./brands-seed-data";
29
+ // SB-UNI-C brandsSeedData merged into categoriesSeedData with categoryType:"brand".
30
30
  export { usersSeedData } from "./users-seed-data";
31
31
  export { sessionsSeedData, SESSION_COLLECTION } from "./sessions-seed-data";
32
32
  export { addressesSeedData } from "./addresses-seed-data";
@@ -36,6 +36,7 @@ export { categoriesSeedData } from "./categories-seed-data";
36
36
  export { productsStandardSeedData } from "./products-standard-seed-data";
37
37
  export { productsAuctionsSeedData } from "./products-auctions-seed-data";
38
38
  export { productsPreOrdersSeedData } from "./products-preorders-seed-data";
39
+ export { productsPrizeDrawsSeedData } from "./products-prize-draws-seed-data";
39
40
  export { ordersSeedData } from "./orders-seed-data";
40
41
  export { reviewsSeedData } from "./reviews-seed-data";
41
42
  export { cartsSeedData } from "./cart-seed-data";
@@ -54,9 +55,9 @@ export { carouselsSeedData } from "./carousels-seed-data";
54
55
  export { wishlistsSeedData } from "./wishlists-seed-data";
55
56
  export { historySeedData } from "./history-seed-data";
56
57
  export { conversationsSeedData } from "./conversations-seed-data";
57
- export { sublistingCategoriesSeedData } from "./sublisting-categories-seed-data";
58
+ // SB-UNI-B sublistingCategoriesSeedData merged into categoriesSeedData with categoryType:"sublisting".
58
59
  export { groupedListingsSeedData } from "./grouped-listings-seed-data";
59
- export { bundlesSeedData } from "./bundles-seed-data";
60
+ // SB-UNI-V bundlesSeedData merged into categoriesSeedData with categoryType:"bundle".
60
61
  export { scammersSeedData } from "./scammers-seed-data";
61
62
  export { productFeaturesSeedData } from "./product-features-seed-data";
62
63
  export { SEED_MANIFEST } from "./manifest";
@@ -5,13 +5,14 @@
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 { brandsSeedData } from "./brands-seed-data";
8
+ // SB-UNI-C brandsSeedData merged into categoriesSeedData.
9
9
  import { categoriesSeedData } from "./categories-seed-data";
10
10
  import { usersSeedData } from "./users-seed-data";
11
11
  import { storesSeedData } from "./stores-seed-data";
12
12
  import { productsStandardSeedData } from "./products-standard-seed-data";
13
13
  import { productsAuctionsSeedData } from "./products-auctions-seed-data";
14
14
  import { productsPreOrdersSeedData } from "./products-preorders-seed-data";
15
+ import { productsPrizeDrawsSeedData } from "./products-prize-draws-seed-data";
15
16
  import { ordersSeedData } from "./orders-seed-data";
16
17
  import { reviewsSeedData } from "./reviews-seed-data";
17
18
  import { bidsSeedData } from "./bids-seed-data";
@@ -32,9 +33,9 @@ import { cartsSeedData } from "./cart-seed-data";
32
33
  import { wishlistsSeedData } from "./wishlists-seed-data";
33
34
  import { historySeedData } from "./history-seed-data";
34
35
  import { conversationsSeedData } from "./conversations-seed-data";
35
- import { sublistingCategoriesSeedData } from "./sublisting-categories-seed-data";
36
+ // SB-UNI-B sublistingCategoriesSeedData absorbed into categoriesSeedData.
36
37
  import { groupedListingsSeedData } from "./grouped-listings-seed-data";
37
- import { bundlesSeedData } from "./bundles-seed-data";
38
+ // SB-UNI-V bundlesSeedData absorbed into categoriesSeedData.
38
39
  import { scammersSeedData } from "./scammers-seed-data";
39
40
  import { productFeaturesSeedData } from "./product-features-seed-data";
40
41
  function asArr(items) {
@@ -50,7 +51,6 @@ function pick(items, nameKey = "name") {
50
51
  }));
51
52
  }
52
53
  export const SEED_MANIFEST = {
53
- brands: pick(asArr(brandsSeedData)),
54
54
  categories: pick(asArr(categoriesSeedData)),
55
55
  users: pick(asArr(usersSeedData).map((u) => ({
56
56
  ...u,
@@ -64,6 +64,7 @@ export const SEED_MANIFEST = {
64
64
  ...asArr(productsStandardSeedData),
65
65
  ...asArr(productsAuctionsSeedData),
66
66
  ...asArr(productsPreOrdersSeedData),
67
+ ...asArr(productsPrizeDrawsSeedData),
67
68
  ].map((p) => ({
68
69
  ...p,
69
70
  // SB1-G Phase 4 — canonical listingType drives the manifest "type" tag.
@@ -71,7 +72,9 @@ export const SEED_MANIFEST = {
71
72
  ? "auction"
72
73
  : p.listingType === "pre-order"
73
74
  ? "preorder"
74
- : "standard",
75
+ : p.listingType === "prize-draw"
76
+ ? "prize-draw"
77
+ : "standard",
75
78
  })), "title"),
76
79
  orders: pick(asArr(ordersSeedData)),
77
80
  reviews: pick(asArr(reviewsSeedData), "title"),
@@ -139,18 +142,10 @@ export const SEED_MANIFEST = {
139
142
  ...c,
140
143
  name: c.productTitle ?? c.id,
141
144
  }))),
142
- sublistingCategories: pick(asArr(sublistingCategoriesSeedData).map((s) => ({
143
- ...s,
144
- name: s.title ?? s.id,
145
- }))),
146
145
  groupedListings: pick(asArr(groupedListingsSeedData).map((g) => ({
147
146
  ...g,
148
147
  name: g.title ?? g.id,
149
148
  }))),
150
- bundles: pick(asArr(bundlesSeedData).map((b) => ({
151
- ...b,
152
- name: b.title ?? b.id,
153
- }))),
154
149
  scammerProfiles: pick(asArr(scammersSeedData).map((s) => ({
155
150
  ...s,
156
151
  name: s.displayNames?.[0] ?? s.id,
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Prize-Draw Products Seed Data — Collectibles Edition (SB5-E)
3
+ *
4
+ * Stored as ProductDocument with listingType: "prize-draw". Each draw lists
5
+ * 3–16 PrizeDrawItem entries; one is revealed per paid order via crypto.randomInt
6
+ * during the reveal window (see /api/prize-draws/[id]/reveal, SB4-H).
7
+ *
8
+ * Prices in INR paise (₹1 = 100 paise).
9
+ */
10
+ import type { ProductDocument } from "../features/products/schemas";
11
+ /**
12
+ * SB1-G Phase 4 — every prize-draw is stamped with `listingType: "prize-draw"`.
13
+ * Mirrors the wrapper pattern used in
14
+ * `products-standard-seed-data.ts` / `products-auctions-seed-data.ts` /
15
+ * `products-preorders-seed-data.ts`.
16
+ */
17
+ export declare const productsPrizeDrawsSeedData: Partial<ProductDocument>[];