@mohasinac/appkit 2.6.3 → 2.6.5

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 (615) hide show
  1. package/dist/_internal/server/features/account/data.js +2 -2
  2. package/dist/_internal/server/features/bundles/data.d.ts +26 -6
  3. package/dist/_internal/server/features/bundles/data.js +41 -6
  4. package/dist/_internal/server/features/bundles/index.d.ts +3 -2
  5. package/dist/_internal/server/features/bundles/index.js +4 -2
  6. package/dist/_internal/server/features/bundles/metadata.d.ts +20 -0
  7. package/dist/_internal/server/features/bundles/metadata.js +46 -0
  8. package/dist/_internal/server/features/bundles/og.d.ts +38 -0
  9. package/dist/_internal/server/features/bundles/og.js +122 -0
  10. package/dist/_internal/server/features/checkout/actions.js +192 -133
  11. package/dist/_internal/server/features/checkout/bundle-expansion.d.ts +57 -0
  12. package/dist/_internal/server/features/checkout/bundle-expansion.js +70 -0
  13. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -15
  14. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -21
  15. package/dist/_internal/server/features/media/contextGuards.js +15 -1
  16. package/dist/_internal/server/features/payouts/actions.d.ts +19 -0
  17. package/dist/_internal/server/features/payouts/actions.js +38 -0
  18. package/dist/_internal/server/features/products/data.js +1 -2
  19. package/dist/_internal/server/features/raffle/actions.d.ts +11 -0
  20. package/dist/_internal/server/features/raffle/actions.js +31 -0
  21. package/dist/_internal/server/features/refunds/actions.d.ts +31 -0
  22. package/dist/_internal/server/features/refunds/actions.js +77 -0
  23. package/dist/_internal/server/jobs/core/adminAnalytics.d.ts +28 -0
  24. package/dist/_internal/server/jobs/core/adminAnalytics.js +98 -0
  25. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +19 -0
  26. package/dist/_internal/server/jobs/core/assignSpinPrize.js +81 -0
  27. package/dist/_internal/server/jobs/core/auctionSettlement.d.ts +2 -0
  28. package/dist/_internal/server/jobs/core/auctionSettlement.js +70 -0
  29. package/dist/_internal/server/jobs/core/autoPayoutEligibility.d.ts +2 -0
  30. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +109 -0
  31. package/dist/_internal/server/jobs/core/bundleStockSync.d.ts +10 -0
  32. package/dist/_internal/server/jobs/core/bundleStockSync.js +71 -0
  33. package/dist/_internal/server/jobs/core/cartPrune.d.ts +2 -0
  34. package/dist/_internal/server/jobs/core/cartPrune.js +13 -0
  35. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.d.ts +2 -0
  36. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +45 -0
  37. package/dist/_internal/server/jobs/core/countersReconcile.d.ts +2 -0
  38. package/dist/_internal/server/jobs/core/countersReconcile.js +107 -0
  39. package/dist/_internal/server/jobs/core/couponExpiry.d.ts +2 -0
  40. package/dist/_internal/server/jobs/core/couponExpiry.js +13 -0
  41. package/dist/_internal/server/jobs/core/dailyDataCleanup.d.ts +2 -0
  42. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +20 -0
  43. package/dist/_internal/server/jobs/core/index.d.ts +44 -0
  44. package/dist/_internal/server/jobs/core/index.js +47 -0
  45. package/dist/_internal/server/jobs/core/listingProcessor.d.ts +30 -0
  46. package/dist/_internal/server/jobs/core/listingProcessor.js +138 -0
  47. package/dist/_internal/server/jobs/core/mediaTmpCleanup.d.ts +14 -0
  48. package/dist/_internal/server/jobs/core/mediaTmpCleanup.js +68 -0
  49. package/dist/_internal/server/jobs/core/notificationPrune.d.ts +2 -0
  50. package/dist/_internal/server/jobs/core/notificationPrune.js +13 -0
  51. package/dist/_internal/server/jobs/core/offerExpiry.d.ts +2 -0
  52. package/dist/_internal/server/jobs/core/offerExpiry.js +50 -0
  53. package/dist/_internal/server/jobs/core/onBidPlaced.d.ts +15 -0
  54. package/dist/_internal/server/jobs/core/onBidPlaced.js +59 -0
  55. package/dist/_internal/server/jobs/core/onCategoryWrite.d.ts +14 -0
  56. package/dist/_internal/server/jobs/core/onCategoryWrite.js +134 -0
  57. package/dist/_internal/server/jobs/core/onOrderCreate.d.ts +18 -0
  58. package/dist/_internal/server/jobs/core/onOrderCreate.js +78 -0
  59. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +19 -0
  60. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +139 -0
  61. package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +23 -0
  62. package/dist/_internal/server/jobs/core/onProductStockChange.js +130 -0
  63. package/dist/_internal/server/jobs/core/onProductWrite.d.ts +12 -0
  64. package/dist/_internal/server/jobs/core/onProductWrite.js +94 -0
  65. package/dist/_internal/server/jobs/core/onReviewWrite.d.ts +7 -0
  66. package/dist/_internal/server/jobs/core/onReviewWrite.js +49 -0
  67. package/dist/_internal/server/jobs/core/onStoreWrite.d.ts +12 -0
  68. package/dist/_internal/server/jobs/core/onStoreWrite.js +7 -0
  69. package/dist/_internal/server/jobs/core/payoutBatch.d.ts +8 -0
  70. package/dist/_internal/server/jobs/core/payoutBatch.js +102 -0
  71. package/dist/_internal/server/jobs/core/pendingOrderTimeout.d.ts +2 -0
  72. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +27 -0
  73. package/dist/_internal/server/jobs/core/positionsReconcile.d.ts +7 -0
  74. package/dist/_internal/server/jobs/core/positionsReconcile.js +87 -0
  75. package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +2 -0
  76. package/dist/_internal/server/jobs/core/prizeRevealClose.js +22 -0
  77. package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +2 -0
  78. package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +50 -0
  79. package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +2 -0
  80. package/dist/_internal/server/jobs/core/prizeRevealOpen.js +56 -0
  81. package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +2 -0
  82. package/dist/_internal/server/jobs/core/prizeRevealReminder.js +38 -0
  83. package/dist/_internal/server/jobs/core/productStatsSync.d.ts +8 -0
  84. package/dist/_internal/server/jobs/core/productStatsSync.js +36 -0
  85. package/dist/_internal/server/jobs/core/promotions.d.ts +12 -0
  86. package/dist/_internal/server/jobs/core/promotions.js +43 -0
  87. package/dist/_internal/server/jobs/core/storeAnalytics.d.ts +30 -0
  88. package/dist/_internal/server/jobs/core/storeAnalytics.js +109 -0
  89. package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +19 -0
  90. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +86 -0
  91. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.d.ts +6 -0
  92. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +85 -0
  93. package/dist/_internal/server/jobs/handlers/adminAnalytics.d.ts +2 -26
  94. package/dist/_internal/server/jobs/handlers/adminAnalytics.js +2 -98
  95. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +1 -22
  96. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +2 -86
  97. package/dist/_internal/server/jobs/handlers/auctionSettlement.js +2 -70
  98. package/dist/_internal/server/jobs/handlers/autoPayoutEligibility.js +2 -110
  99. package/dist/_internal/server/jobs/handlers/bundleStockSync.d.ts +0 -16
  100. package/dist/_internal/server/jobs/handlers/bundleStockSync.js +2 -80
  101. package/dist/_internal/server/jobs/handlers/cartPrune.js +2 -13
  102. package/dist/_internal/server/jobs/handlers/cleanupRtdbEvents.js +2 -45
  103. package/dist/_internal/server/jobs/handlers/countersReconcile.js +2 -109
  104. package/dist/_internal/server/jobs/handlers/couponExpiry.js +2 -13
  105. package/dist/_internal/server/jobs/handlers/dailyDataCleanup.js +2 -20
  106. package/dist/_internal/server/jobs/handlers/listingProcessor.d.ts +3 -28
  107. package/dist/_internal/server/jobs/handlers/listingProcessor.js +3 -138
  108. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.d.ts +0 -12
  109. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.js +2 -69
  110. package/dist/_internal/server/jobs/handlers/notificationPrune.js +2 -13
  111. package/dist/_internal/server/jobs/handlers/offerExpiry.js +2 -50
  112. package/dist/_internal/server/jobs/handlers/onBidPlaced.d.ts +1 -10
  113. package/dist/_internal/server/jobs/handlers/onBidPlaced.js +2 -56
  114. package/dist/_internal/server/jobs/handlers/onCategoryWrite.d.ts +1 -8
  115. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +6 -134
  116. package/dist/_internal/server/jobs/handlers/onOrderCreate.d.ts +1 -12
  117. package/dist/_internal/server/jobs/handlers/onOrderCreate.js +2 -76
  118. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.d.ts +1 -12
  119. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +2 -139
  120. package/dist/_internal/server/jobs/handlers/onProductStockChange.d.ts +0 -13
  121. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +7 -134
  122. package/dist/_internal/server/jobs/handlers/onProductWrite.d.ts +1 -6
  123. package/dist/_internal/server/jobs/handlers/onProductWrite.js +6 -106
  124. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +2 -49
  125. package/dist/_internal/server/jobs/handlers/onStoreWrite.d.ts +1 -8
  126. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +7 -8
  127. package/dist/_internal/server/jobs/handlers/payoutBatch.d.ts +0 -9
  128. package/dist/_internal/server/jobs/handlers/payoutBatch.js +2 -104
  129. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.d.ts +0 -6
  130. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.js +2 -33
  131. package/dist/_internal/server/jobs/handlers/positionsReconcile.d.ts +0 -5
  132. package/dist/_internal/server/jobs/handlers/positionsReconcile.js +2 -87
  133. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -7
  134. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +2 -29
  135. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -8
  136. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +2 -58
  137. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -8
  138. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +2 -65
  139. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -7
  140. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +2 -45
  141. package/dist/_internal/server/jobs/handlers/productStatsSync.d.ts +0 -6
  142. package/dist/_internal/server/jobs/handlers/productStatsSync.js +2 -36
  143. package/dist/_internal/server/jobs/handlers/promotions.d.ts +2 -10
  144. package/dist/_internal/server/jobs/handlers/promotions.js +2 -43
  145. package/dist/_internal/server/jobs/handlers/storeAnalytics.d.ts +2 -28
  146. package/dist/_internal/server/jobs/handlers/storeAnalytics.js +2 -109
  147. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +1 -28
  148. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +2 -94
  149. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.d.ts +0 -6
  150. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +2 -87
  151. package/dist/_internal/server/jobs/index.d.ts +1 -0
  152. package/dist/_internal/server/jobs/index.js +1 -0
  153. package/dist/_internal/server/jobs/runtime/adapters/firebase.js +21 -0
  154. package/dist/_internal/shared/actions/action-registry.d.ts +84 -0
  155. package/dist/_internal/shared/actions/action-registry.js +160 -0
  156. package/dist/_internal/shared/checkout/rules/_defaults.d.ts +3 -0
  157. package/dist/_internal/shared/checkout/rules/_defaults.js +22 -0
  158. package/dist/_internal/shared/checkout/rules/_limits.d.ts +19 -0
  159. package/dist/_internal/shared/checkout/rules/_limits.js +19 -0
  160. package/dist/_internal/shared/checkout/rules/_registry.d.ts +44 -0
  161. package/dist/_internal/shared/checkout/rules/_registry.js +87 -0
  162. package/dist/_internal/shared/checkout/rules/auction.rule.d.ts +2 -0
  163. package/dist/_internal/shared/checkout/rules/auction.rule.js +10 -0
  164. package/dist/_internal/shared/checkout/rules/bundle.rule.d.ts +11 -0
  165. package/dist/_internal/shared/checkout/rules/bundle.rule.js +6 -0
  166. package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -0
  167. package/dist/_internal/shared/checkout/rules/classified.rule.js +9 -0
  168. package/dist/_internal/shared/checkout/rules/digital-code.rule.d.ts +8 -0
  169. package/dist/_internal/shared/checkout/rules/digital-code.rule.js +6 -0
  170. package/dist/_internal/shared/checkout/rules/index.d.ts +12 -0
  171. package/dist/_internal/shared/checkout/rules/index.js +12 -0
  172. package/dist/_internal/shared/checkout/rules/live.rule.d.ts +10 -0
  173. package/dist/_internal/shared/checkout/rules/live.rule.js +6 -0
  174. package/dist/_internal/shared/checkout/rules/offer.rule.d.ts +2 -0
  175. package/dist/_internal/shared/checkout/rules/offer.rule.js +9 -0
  176. package/dist/_internal/shared/checkout/rules/preorder.rule.d.ts +2 -0
  177. package/dist/_internal/shared/checkout/rules/preorder.rule.js +28 -0
  178. package/dist/_internal/shared/checkout/rules/prize-draw.rule.d.ts +2 -0
  179. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +65 -0
  180. package/dist/_internal/shared/checkout/rules/standard.rule.d.ts +2 -0
  181. package/dist/_internal/shared/checkout/rules/standard.rule.js +5 -0
  182. package/dist/_internal/shared/checkout/rules/types.d.ts +125 -0
  183. package/dist/_internal/shared/checkout/rules/types.js +13 -0
  184. package/dist/_internal/shared/features/cart/schema.d.ts +6 -6
  185. package/dist/_internal/shared/features/categories/bundle-copy.d.ts +123 -0
  186. package/dist/_internal/shared/features/categories/bundle-copy.js +134 -0
  187. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +318 -0
  188. package/dist/_internal/shared/features/categories/bundle-schemas.js +55 -0
  189. package/dist/_internal/shared/features/events/schema.d.ts +4 -4
  190. package/dist/_internal/shared/features/orders/refund-copy.d.ts +36 -0
  191. package/dist/_internal/shared/features/orders/refund-copy.js +40 -0
  192. package/dist/_internal/shared/features/orders/schema.d.ts +4 -4
  193. package/dist/_internal/shared/features/products/schema.d.ts +8 -8
  194. package/dist/_internal/shared/listing-types/_registry.d.ts +27 -0
  195. package/dist/_internal/shared/listing-types/_registry.js +8 -0
  196. package/dist/_internal/shared/listing-types/action-tracker.d.ts +41 -0
  197. package/dist/_internal/shared/listing-types/action-tracker.js +70 -0
  198. package/dist/_internal/shared/listing-types/capabilities.js +25 -0
  199. package/dist/_internal/shared/listing-types/cart-shipping.d.ts +37 -0
  200. package/dist/_internal/shared/listing-types/cart-shipping.js +46 -0
  201. package/dist/_internal/shared/listing-types/classified/config.d.ts +7 -0
  202. package/dist/_internal/shared/listing-types/classified/config.js +8 -0
  203. package/dist/_internal/shared/listing-types/classified/ctas.d.ts +1 -0
  204. package/dist/_internal/shared/listing-types/classified/ctas.js +3 -0
  205. package/dist/_internal/shared/listing-types/classified/og.d.ts +1 -0
  206. package/dist/_internal/shared/listing-types/classified/og.js +1 -0
  207. package/dist/_internal/shared/listing-types/classified/schema.d.ts +1 -0
  208. package/dist/_internal/shared/listing-types/classified/schema.js +1 -0
  209. package/dist/_internal/shared/listing-types/classified/seed-factory.d.ts +1 -0
  210. package/dist/_internal/shared/listing-types/classified/seed-factory.js +1 -0
  211. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +7 -0
  212. package/dist/_internal/shared/listing-types/digital-code/config.js +8 -0
  213. package/dist/_internal/shared/listing-types/digital-code/ctas.d.ts +1 -0
  214. package/dist/_internal/shared/listing-types/digital-code/ctas.js +3 -0
  215. package/dist/_internal/shared/listing-types/digital-code/og.d.ts +1 -0
  216. package/dist/_internal/shared/listing-types/digital-code/og.js +1 -0
  217. package/dist/_internal/shared/listing-types/digital-code/schema.d.ts +1 -0
  218. package/dist/_internal/shared/listing-types/digital-code/schema.js +1 -0
  219. package/dist/_internal/shared/listing-types/digital-code/seed-factory.d.ts +1 -0
  220. package/dist/_internal/shared/listing-types/digital-code/seed-factory.js +1 -0
  221. package/dist/_internal/shared/listing-types/feature-flags.d.ts +34 -0
  222. package/dist/_internal/shared/listing-types/feature-flags.js +45 -0
  223. package/dist/_internal/shared/listing-types/live/config.d.ts +7 -0
  224. package/dist/_internal/shared/listing-types/live/config.js +8 -0
  225. package/dist/_internal/shared/listing-types/live/ctas.d.ts +1 -0
  226. package/dist/_internal/shared/listing-types/live/ctas.js +3 -0
  227. package/dist/_internal/shared/listing-types/live/og.d.ts +1 -0
  228. package/dist/_internal/shared/listing-types/live/og.js +1 -0
  229. package/dist/_internal/shared/listing-types/live/schema.d.ts +1 -0
  230. package/dist/_internal/shared/listing-types/live/schema.js +1 -0
  231. package/dist/_internal/shared/listing-types/live/seed-factory.d.ts +1 -0
  232. package/dist/_internal/shared/listing-types/live/seed-factory.js +1 -0
  233. package/dist/_internal/shared/media/limits.js +8 -0
  234. package/dist/client.d.ts +10 -5
  235. package/dist/client.js +16 -3
  236. package/dist/configs/next.js +7 -0
  237. package/dist/constants/api-endpoints.d.ts +6 -0
  238. package/dist/constants/api-endpoints.js +4 -0
  239. package/dist/core/hooks/useSyncManager.js +13 -1
  240. package/dist/core/unit-of-work.d.ts +1 -1
  241. package/dist/core/unit-of-work.js +2 -2
  242. package/dist/features/account/actions/address-actions.d.ts +1 -1
  243. package/dist/features/account/actions/address-actions.js +15 -7
  244. package/dist/features/account/schemas/firestore.d.ts +8 -43
  245. package/dist/features/account/schemas/firestore.js +8 -54
  246. package/dist/features/account/schemas/index.d.ts +6 -6
  247. package/dist/features/account/server.d.ts +1 -1
  248. package/dist/features/account/server.js +3 -1
  249. package/dist/features/addresses/index.d.ts +2 -0
  250. package/dist/features/addresses/index.js +2 -0
  251. package/dist/features/addresses/repository/addresses.repository.d.ts +29 -0
  252. package/dist/features/addresses/repository/addresses.repository.js +157 -0
  253. package/dist/features/addresses/schemas/firestore.d.ts +53 -0
  254. package/dist/features/addresses/schemas/firestore.js +68 -0
  255. package/dist/features/{bundles → addresses}/schemas/index.d.ts +0 -1
  256. package/dist/features/{bundles → addresses}/schemas/index.js +0 -1
  257. package/dist/features/addresses/server.d.ts +2 -0
  258. package/dist/features/addresses/server.js +2 -0
  259. package/dist/features/admin/components/AdminAllEventEntriesView.js +4 -3
  260. package/dist/features/admin/components/AdminBidsView.js +4 -3
  261. package/dist/features/admin/components/AdminBlogView.js +8 -3
  262. package/dist/features/admin/components/AdminBundleEditorView.d.ts +9 -0
  263. package/dist/features/admin/components/AdminBundleEditorView.js +209 -0
  264. package/dist/features/admin/components/AdminBundlesView.d.ts +9 -0
  265. package/dist/features/admin/components/AdminBundlesView.js +59 -0
  266. package/dist/features/admin/components/AdminCartsView.js +13 -3
  267. package/dist/features/admin/components/AdminContactView.js +4 -3
  268. package/dist/features/admin/components/AdminCouponsView.js +32 -13
  269. package/dist/features/admin/components/AdminNewsletterView.js +4 -3
  270. package/dist/features/admin/components/AdminOrdersView.js +15 -7
  271. package/dist/features/admin/components/AdminPayoutsView.js +4 -3
  272. package/dist/features/admin/components/AdminPrizeDrawsView.d.ts +4 -0
  273. package/dist/features/admin/components/AdminPrizeDrawsView.js +135 -0
  274. package/dist/features/admin/components/AdminProductsView.js +6 -5
  275. package/dist/features/admin/components/AdminReviewsView.js +5 -4
  276. package/dist/features/admin/components/AdminStoresView.js +4 -3
  277. package/dist/features/admin/components/AdminUsersView.js +15 -5
  278. package/dist/features/admin/components/AdminWishlistsView.js +10 -1
  279. package/dist/features/admin/components/DataTable.d.ts +5 -1
  280. package/dist/features/admin/components/DataTable.js +24 -20
  281. package/dist/features/admin/components/index.d.ts +6 -0
  282. package/dist/features/admin/components/index.js +5 -0
  283. package/dist/features/admin/constants/filter-tabs.d.ts +435 -0
  284. package/dist/features/admin/constants/filter-tabs.js +216 -0
  285. package/dist/features/admin/hooks/useAdminListingData.d.ts +1 -0
  286. package/dist/features/admin/hooks/useAdminListingData.js +1 -0
  287. package/dist/features/admin/schemas/firestore.d.ts +15 -0
  288. package/dist/features/admin/schemas/firestore.js +18 -0
  289. package/dist/features/admin/types/product.types.d.ts +2 -2
  290. package/dist/features/auctions/components/AuctionCard.d.ts +4 -1
  291. package/dist/features/auctions/components/AuctionCard.js +5 -3
  292. package/dist/features/auctions/components/AuctionDetailPageView.js +1 -1
  293. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +2 -2
  294. package/dist/features/auctions/components/PlaceBidFormClient.js +12 -2
  295. package/dist/features/auctions/schemas/index.d.ts +2 -2
  296. package/dist/features/auth/index.d.ts +1 -0
  297. package/dist/features/auth/index.js +1 -0
  298. package/dist/features/auth/role-predicates.d.ts +16 -0
  299. package/dist/features/auth/role-predicates.js +15 -0
  300. package/dist/features/blog/components/BlogFeaturedCard.d.ts +4 -1
  301. package/dist/features/blog/components/BlogFeaturedCard.js +5 -3
  302. package/dist/features/cart/actions/cart-actions.d.ts +1 -0
  303. package/dist/features/cart/actions/cart-actions.js +16 -0
  304. package/dist/features/cart/components/CartView.d.ts +19 -1
  305. package/dist/features/cart/components/CartView.js +2 -2
  306. package/dist/features/cart/components/ShippingPicker.d.ts +13 -0
  307. package/dist/features/cart/components/ShippingPicker.js +48 -0
  308. package/dist/features/cart/components/index.d.ts +3 -1
  309. package/dist/features/cart/components/index.js +1 -0
  310. package/dist/features/cart/hooks/useCartCount.js +7 -1
  311. package/dist/features/cart/repository/cart.repository.d.ts +1 -0
  312. package/dist/features/cart/repository/cart.repository.js +35 -0
  313. package/dist/features/cart/schemas/firestore.d.ts +27 -2
  314. package/dist/features/categories/components/BundleAddToCartCta.d.ts +16 -0
  315. package/dist/features/categories/components/BundleAddToCartCta.js +54 -0
  316. package/dist/features/categories/components/BundleBuyNowCta.d.ts +8 -0
  317. package/dist/features/categories/components/BundleBuyNowCta.js +37 -0
  318. package/dist/features/categories/components/BundleDetailView.d.ts +22 -0
  319. package/dist/features/categories/components/BundleDetailView.js +31 -0
  320. package/dist/features/categories/components/BundleDynamicRuleEditor.d.ts +18 -0
  321. package/dist/features/categories/components/BundleDynamicRuleEditor.js +60 -0
  322. package/dist/features/categories/components/BundleItemsPicker.d.ts +26 -0
  323. package/dist/features/categories/components/BundleItemsPicker.js +135 -0
  324. package/dist/features/categories/components/BundlesListView.d.ts +13 -0
  325. package/dist/features/categories/components/BundlesListView.js +27 -0
  326. package/dist/features/categories/components/index.d.ts +12 -0
  327. package/dist/features/categories/components/index.js +9 -0
  328. package/dist/features/checkout/actions/checkout-actions.js +10 -3
  329. package/dist/features/events/components/AdminEventEditorView.js +108 -2
  330. package/dist/features/events/components/AdminEventsView.js +16 -4
  331. package/dist/features/events/components/EventCard.d.ts +4 -1
  332. package/dist/features/events/components/EventCard.js +7 -3
  333. package/dist/features/events/components/EventRaffleWinnerView.d.ts +21 -0
  334. package/dist/features/events/components/EventRaffleWinnerView.js +18 -0
  335. package/dist/features/events/components/SpinWheelView.d.ts +27 -0
  336. package/dist/features/events/components/SpinWheelView.js +64 -0
  337. package/dist/features/events/components/index.d.ts +4 -0
  338. package/dist/features/events/components/index.js +2 -0
  339. package/dist/features/events/schemas/firestore.d.ts +27 -1
  340. package/dist/features/events/schemas/firestore.js +7 -0
  341. package/dist/features/events/types/index.d.ts +27 -1
  342. package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +16 -0
  343. package/dist/features/homepage/components/FeaturedBundlesSection.js +24 -0
  344. package/dist/features/homepage/components/MarketplaceHomepageView.js +4 -1
  345. package/dist/features/homepage/components/WhatsAppCommunitySection.js +2 -2
  346. package/dist/features/homepage/lib/section-renderer.d.ts +2 -0
  347. package/dist/features/homepage/lib/section-renderer.js +5 -5
  348. package/dist/features/layout/NavbarLayout.d.ts +3 -1
  349. package/dist/features/layout/NavbarLayout.js +32 -3
  350. package/dist/features/layout/TitleBarLayout.d.ts +6 -3
  351. package/dist/features/layout/TitleBarLayout.js +22 -7
  352. package/dist/features/media/upload/MediaUploadField.d.ts +15 -1
  353. package/dist/features/media/upload/MediaUploadField.js +22 -1
  354. package/dist/features/orders/components/MarketplaceOrderCard.js +4 -2
  355. package/dist/features/orders/components/OrderSiblingPayments.d.ts +8 -0
  356. package/dist/features/orders/components/OrderSiblingPayments.js +16 -0
  357. package/dist/features/orders/components/RefundHistoryTable.d.ts +6 -0
  358. package/dist/features/orders/components/RefundHistoryTable.js +23 -0
  359. package/dist/features/orders/components/RefundRequestView.d.ts +8 -0
  360. package/dist/features/orders/components/RefundRequestView.js +42 -0
  361. package/dist/features/orders/components/index.d.ts +6 -0
  362. package/dist/features/orders/components/index.js +3 -0
  363. package/dist/features/orders/index.d.ts +1 -0
  364. package/dist/features/orders/index.js +2 -0
  365. package/dist/features/orders/repository/orders.repository.d.ts +20 -1
  366. package/dist/features/orders/repository/orders.repository.js +30 -1
  367. package/dist/features/orders/schemas/firestore.d.ts +63 -13
  368. package/dist/features/orders/schemas/firestore.js +5 -5
  369. package/dist/features/orders/schemas/index.d.ts +4 -4
  370. package/dist/features/orders/types/index.d.ts +12 -2
  371. package/dist/features/orders/utils/bundle-grouping.d.ts +48 -0
  372. package/dist/features/orders/utils/bundle-grouping.js +54 -0
  373. package/dist/features/orders/utils/order-splitter.d.ts +9 -10
  374. package/dist/features/orders/utils/order-splitter.js +24 -30
  375. package/dist/features/payments/repository/payout.repository.d.ts +17 -1
  376. package/dist/features/payments/repository/payout.repository.js +47 -0
  377. package/dist/features/payments/schemas/firestore.d.ts +26 -0
  378. package/dist/features/pre-orders/components/PreorderCard.d.ts +4 -1
  379. package/dist/features/pre-orders/components/PreorderCard.js +8 -6
  380. package/dist/features/products/actions/product-actions.d.ts +1 -1
  381. package/dist/features/products/actions/product-actions.js +1 -1
  382. package/dist/features/products/components/CompareOverlay.d.ts +2 -2
  383. package/dist/features/products/components/CompareOverlay.js +4 -4
  384. package/dist/features/products/components/InteractiveProductCard.js +7 -12
  385. package/dist/features/products/components/NonRefundableConsentModal.d.ts +1 -1
  386. package/dist/features/products/components/NonRefundableConsentModal.js +0 -10
  387. package/dist/features/products/components/ProductGrid.js +28 -12
  388. package/dist/features/products/components/ShowGroupSection.js +3 -3
  389. package/dist/features/products/components/SublistingCarouselSection.js +2 -2
  390. package/dist/features/products/components/index.d.ts +0 -4
  391. package/dist/features/products/components/index.js +5 -2
  392. package/dist/features/products/index.d.ts +1 -1
  393. package/dist/features/products/index.js +3 -1
  394. package/dist/features/products/repository/products.repository.js +4 -0
  395. package/dist/features/products/schemas/catalog-product.d.ts +70 -0
  396. package/dist/features/products/schemas/catalog-product.js +50 -0
  397. package/dist/features/products/schemas/firestore.d.ts +110 -2
  398. package/dist/features/products/schemas/firestore.js +30 -0
  399. package/dist/features/products/schemas/index.d.ts +8 -8
  400. package/dist/features/products/types/index.d.ts +1 -1
  401. package/dist/features/products/utils/listing-type.d.ts +9 -0
  402. package/dist/features/products/utils/listing-type.js +4 -0
  403. package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
  404. package/dist/features/promotions/actions/coupon-actions.js +1 -1
  405. package/dist/features/promotions/components/CouponCard.d.ts +28 -10
  406. package/dist/features/promotions/components/CouponCard.js +116 -14
  407. package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
  408. package/dist/features/promotions/repository/coupons.repository.d.ts +1 -1
  409. package/dist/features/reviews/schemas/index.d.ts +2 -2
  410. package/dist/features/search/schemas/index.d.ts +2 -2
  411. package/dist/features/search/types/index.d.ts +2 -2
  412. package/dist/features/seller/components/SellerAuctionsView.js +4 -5
  413. package/dist/features/seller/components/SellerBidsView.js +5 -13
  414. package/dist/features/seller/components/SellerCouponsView.js +31 -67
  415. package/dist/features/seller/components/SellerOffersView.js +4 -5
  416. package/dist/features/seller/components/SellerOrdersView.js +4 -5
  417. package/dist/features/seller/components/SellerPayoutsView.js +4 -5
  418. package/dist/features/seller/components/SellerPreOrdersView.d.ts +4 -0
  419. package/dist/features/seller/components/SellerPreOrdersView.js +141 -0
  420. package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +4 -0
  421. package/dist/features/seller/components/SellerPrizeDrawsView.js +138 -0
  422. package/dist/features/seller/components/SellerProductsView.js +4 -8
  423. package/dist/features/seller/components/index.d.ts +4 -0
  424. package/dist/features/seller/components/index.js +2 -0
  425. package/dist/features/seller/schemas/index.d.ts +2 -2
  426. package/dist/features/stores/actions/store-address-actions.d.ts +10 -6
  427. package/dist/features/stores/actions/store-address-actions.js +8 -7
  428. package/dist/features/stores/components/InteractiveStoreCard.js +3 -10
  429. package/dist/features/stores/components/StoreDetailLayoutView.js +20 -5
  430. package/dist/features/stores/schemas/firestore.d.ts +45 -38
  431. package/dist/features/stores/schemas/firestore.js +2 -49
  432. package/dist/features/stores/server.d.ts +0 -1
  433. package/dist/features/stores/server.js +2 -1
  434. package/dist/features/wishlist/hooks/useWishlistCount.d.ts +7 -9
  435. package/dist/features/wishlist/hooks/useWishlistCount.js +67 -86
  436. package/dist/features/wishlist/types/index.d.ts +1 -1
  437. package/dist/index.d.ts +56 -9
  438. package/dist/index.js +66 -11
  439. package/dist/next/routing/route-map.d.ts +6 -0
  440. package/dist/next/routing/route-map.js +4 -0
  441. package/dist/providers/db-firebase/admin.d.ts +6 -2
  442. package/dist/providers/db-firebase/admin.js +23 -0
  443. package/dist/repositories/index.d.ts +1 -2
  444. package/dist/repositories/index.js +5 -2
  445. package/dist/security/authorization.d.ts +2 -1
  446. package/dist/security/authorization.js +3 -2
  447. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  448. package/dist/seed/bids-seed-data.d.ts +2 -2
  449. package/dist/seed/bids-seed-data.js +77 -2
  450. package/dist/seed/cart-seed-data.d.ts +10 -10
  451. package/dist/seed/cart-seed-data.js +15 -15
  452. package/dist/seed/events-seed-data.js +77 -0
  453. package/dist/seed/manifest.js +16 -8
  454. package/dist/seed/orders-seed-data.js +41 -2
  455. package/dist/seed/payouts-seed-data.js +18 -2
  456. package/dist/seed/stores-seed-data.js +55 -0
  457. package/dist/server-entry.d.ts +1 -0
  458. package/dist/server-entry.js +2 -0
  459. package/dist/server.d.ts +4 -0
  460. package/dist/server.js +8 -0
  461. package/dist/tailwind-utilities.css +1 -1
  462. package/dist/ui/components/FilterChipGroup.d.ts +39 -0
  463. package/dist/ui/components/FilterChipGroup.js +15 -0
  464. package/dist/ui/components/HorizontalScroller.js +32 -7
  465. package/dist/ui/components/HorizontalScroller.style.css +6 -0
  466. package/dist/ui/components/SiteLogo.js +1 -1
  467. package/dist/ui/index.d.ts +2 -0
  468. package/dist/ui/index.js +2 -0
  469. package/dist/utils/id-generators.d.ts +11 -0
  470. package/dist/utils/id-generators.js +16 -0
  471. package/package.json +1 -1
  472. package/dist/_internal/shared/features/bundles/config.d.ts +0 -6
  473. package/dist/_internal/shared/features/bundles/config.js +0 -6
  474. package/dist/_internal/shared/schema-versions.d.ts +0 -76
  475. package/dist/_internal/shared/schema-versions.js +0 -82
  476. package/dist/features/account/migrations.d.ts +0 -2
  477. package/dist/features/account/migrations.js +0 -10
  478. package/dist/features/admin/migrations.d.ts +0 -2
  479. package/dist/features/admin/migrations.js +0 -10
  480. package/dist/features/auctions/migrations.d.ts +0 -2
  481. package/dist/features/auctions/migrations.js +0 -10
  482. package/dist/features/auth/migrations.d.ts +0 -2
  483. package/dist/features/auth/migrations.js +0 -10
  484. package/dist/features/blog/migrations.d.ts +0 -2
  485. package/dist/features/blog/migrations.js +0 -10
  486. package/dist/features/brands/actions/brand-actions.d.ts +0 -2
  487. package/dist/features/brands/actions/brand-actions.js +0 -5
  488. package/dist/features/brands/index.d.ts +0 -3
  489. package/dist/features/brands/index.js +0 -3
  490. package/dist/features/brands/migrations.d.ts +0 -2
  491. package/dist/features/brands/migrations.js +0 -10
  492. package/dist/features/brands/repository/brands.repository.d.ts +0 -13
  493. package/dist/features/brands/repository/brands.repository.js +0 -60
  494. package/dist/features/brands/schemas/index.d.ts +0 -33
  495. package/dist/features/brands/schemas/index.js +0 -15
  496. package/dist/features/brands/server.d.ts +0 -7
  497. package/dist/features/brands/server.js +0 -7
  498. package/dist/features/bundles/components/AdminBundleEditorView.d.ts +0 -8
  499. package/dist/features/bundles/components/AdminBundleEditorView.js +0 -7
  500. package/dist/features/bundles/components/BundleDetailPageView.d.ts +0 -9
  501. package/dist/features/bundles/components/BundleDetailPageView.js +0 -45
  502. package/dist/features/bundles/components/BundleForm.d.ts +0 -12
  503. package/dist/features/bundles/components/BundleForm.js +0 -126
  504. package/dist/features/bundles/components/BundleItemsPicker.d.ts +0 -9
  505. package/dist/features/bundles/components/BundleItemsPicker.js +0 -77
  506. package/dist/features/bundles/components/BundlesByCategoryListing.d.ts +0 -6
  507. package/dist/features/bundles/components/BundlesByCategoryListing.js +0 -50
  508. package/dist/features/bundles/components/BundlesListingView.d.ts +0 -17
  509. package/dist/features/bundles/components/BundlesListingView.js +0 -50
  510. package/dist/features/bundles/components/FeaturedBundlesSection.d.ts +0 -5
  511. package/dist/features/bundles/components/FeaturedBundlesSection.js +0 -55
  512. package/dist/features/bundles/components/SellerBundleCreateView.d.ts +0 -8
  513. package/dist/features/bundles/components/SellerBundleCreateView.js +0 -7
  514. package/dist/features/bundles/components/SellerBundleEditView.d.ts +0 -9
  515. package/dist/features/bundles/components/SellerBundleEditView.js +0 -7
  516. package/dist/features/bundles/components/index.d.ts +0 -18
  517. package/dist/features/bundles/components/index.js +0 -9
  518. package/dist/features/bundles/constants/index.d.ts +0 -32
  519. package/dist/features/bundles/constants/index.js +0 -35
  520. package/dist/features/bundles/index.d.ts +0 -2
  521. package/dist/features/bundles/index.js +0 -2
  522. package/dist/features/bundles/migrations.d.ts +0 -2
  523. package/dist/features/bundles/migrations.js +0 -10
  524. package/dist/features/bundles/repository/bundles.repository.d.ts +0 -36
  525. package/dist/features/bundles/repository/bundles.repository.js +0 -148
  526. package/dist/features/bundles/repository/index.d.ts +0 -1
  527. package/dist/features/bundles/repository/index.js +0 -1
  528. package/dist/features/bundles/schemas/firestore.d.ts +0 -88
  529. package/dist/features/bundles/schemas/firestore.js +0 -29
  530. package/dist/features/bundles/schemas/zod.d.ts +0 -377
  531. package/dist/features/bundles/schemas/zod.js +0 -71
  532. package/dist/features/cart/migrations.d.ts +0 -2
  533. package/dist/features/cart/migrations.js +0 -10
  534. package/dist/features/categories/migrations.d.ts +0 -2
  535. package/dist/features/categories/migrations.js +0 -10
  536. package/dist/features/events/migrations.d.ts +0 -2
  537. package/dist/features/events/migrations.js +0 -10
  538. package/dist/features/faq/migrations.d.ts +0 -2
  539. package/dist/features/faq/migrations.js +0 -10
  540. package/dist/features/grouped/migrations.d.ts +0 -2
  541. package/dist/features/grouped/migrations.js +0 -10
  542. package/dist/features/history/migrations.d.ts +0 -2
  543. package/dist/features/history/migrations.js +0 -10
  544. package/dist/features/messages/migrations.d.ts +0 -2
  545. package/dist/features/messages/migrations.js +0 -10
  546. package/dist/features/orders/migrations.d.ts +0 -2
  547. package/dist/features/orders/migrations.js +0 -10
  548. package/dist/features/payments/migrations.d.ts +0 -2
  549. package/dist/features/payments/migrations.js +0 -10
  550. package/dist/features/products/migrations.d.ts +0 -2
  551. package/dist/features/products/migrations.js +0 -10
  552. package/dist/features/products/repository/sublisting-categories.repository.d.ts +0 -16
  553. package/dist/features/products/repository/sublisting-categories.repository.js +0 -126
  554. package/dist/features/products/schemas/sublisting-categories.d.ts +0 -45
  555. package/dist/features/products/schemas/sublisting-categories.js +0 -16
  556. package/dist/features/promotions/migrations.d.ts +0 -2
  557. package/dist/features/promotions/migrations.js +0 -10
  558. package/dist/features/reviews/migrations.d.ts +0 -2
  559. package/dist/features/reviews/migrations.js +0 -10
  560. package/dist/features/scams/migrations.d.ts +0 -2
  561. package/dist/features/scams/migrations.js +0 -10
  562. package/dist/features/seller/migrations.d.ts +0 -2
  563. package/dist/features/seller/migrations.js +0 -10
  564. package/dist/features/stores/migrations.d.ts +0 -2
  565. package/dist/features/stores/migrations.js +0 -10
  566. package/dist/features/sublisting/migrations.d.ts +0 -2
  567. package/dist/features/sublisting/migrations.js +0 -10
  568. package/dist/features/sublisting/schemas/firestore.d.ts +0 -32
  569. package/dist/features/sublisting/schemas/firestore.js +0 -19
  570. package/dist/features/support/migrations.d.ts +0 -2
  571. package/dist/features/support/migrations.js +0 -10
  572. package/dist/features/wishlist/migrations.d.ts +0 -2
  573. package/dist/features/wishlist/migrations.js +0 -10
  574. package/dist/seed/_bundle-constants.d.ts +0 -14
  575. package/dist/seed/_bundle-constants.js +0 -14
  576. package/dist/seed/anime-figures-seed-data.d.ts +0 -8
  577. package/dist/seed/anime-figures-seed-data.js +0 -1033
  578. package/dist/seed/beyblade-seed-data.d.ts +0 -7
  579. package/dist/seed/beyblade-seed-data.js +0 -1129
  580. package/dist/seed/brands-seed-data.d.ts +0 -7
  581. package/dist/seed/brands-seed-data.js +0 -410
  582. package/dist/seed/bundles-seed-data.d.ts +0 -13
  583. package/dist/seed/bundles-seed-data.js +0 -229
  584. package/dist/seed/cosplay-accessories-seed-data.d.ts +0 -8
  585. package/dist/seed/cosplay-accessories-seed-data.js +0 -647
  586. package/dist/seed/hot-wheels-seed-data.d.ts +0 -7
  587. package/dist/seed/hot-wheels-seed-data.js +0 -1612
  588. package/dist/seed/letitrip-official-seed-data.d.ts +0 -8
  589. package/dist/seed/letitrip-official-seed-data.js +0 -399
  590. package/dist/seed/pokemon-carousel-slides-seed-data.d.ts +0 -8
  591. package/dist/seed/pokemon-carousel-slides-seed-data.js +0 -322
  592. package/dist/seed/pokemon-categories-seed-data.d.ts +0 -24
  593. package/dist/seed/pokemon-categories-seed-data.js +0 -547
  594. package/dist/seed/pokemon-coupons-seed-data.d.ts +0 -6
  595. package/dist/seed/pokemon-coupons-seed-data.js +0 -465
  596. package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +0 -7
  597. package/dist/seed/pokemon-homepage-sections-seed-data.js +0 -241
  598. package/dist/seed/pokemon-products-seed-data.d.ts +0 -9
  599. package/dist/seed/pokemon-products-seed-data.js +0 -1791
  600. package/dist/seed/pokemon-seed-bundle.d.ts +0 -47
  601. package/dist/seed/pokemon-seed-bundle.js +0 -71
  602. package/dist/seed/pokemon-stores-seed-data.d.ts +0 -6
  603. package/dist/seed/pokemon-stores-seed-data.js +0 -179
  604. package/dist/seed/pokemon-users-seed-data.d.ts +0 -6
  605. package/dist/seed/pokemon-users-seed-data.js +0 -521
  606. package/dist/seed/products-seed-data.d.ts +0 -6
  607. package/dist/seed/products-seed-data.js +0 -2530
  608. package/dist/seed/retro-gaming-seed-data.d.ts +0 -8
  609. package/dist/seed/retro-gaming-seed-data.js +0 -801
  610. package/dist/seed/server.d.ts +0 -2
  611. package/dist/seed/server.js +0 -7
  612. package/dist/seed/sublisting-categories-seed-data.d.ts +0 -7
  613. package/dist/seed/sublisting-categories-seed-data.js +0 -159
  614. package/dist/seed/transformers-seed-data.d.ts +0 -7
  615. package/dist/seed/transformers-seed-data.js +0 -530
@@ -0,0 +1,65 @@
1
+ import { ValidationError } from "../../../../errors";
2
+ import { DEFAULT_LISTING_RULE } from "./_defaults";
3
+ import { PRIZE_DRAW_MAX_REVEALS_PER_ORDER } from "./_limits";
4
+ export const prizeDrawRule = {
5
+ ...DEFAULT_LISTING_RULE,
6
+ orderType: "prize-draw",
7
+ nonRefundable: true,
8
+ maxQuantityPerLine: 1,
9
+ canMergeWithSameProduct: false,
10
+ maxLinesPerOrder: PRIZE_DRAW_MAX_REVEALS_PER_ORDER,
11
+ refundPolicy: { full: false, partial: false, partialGranularity: "none" },
12
+ splitKey: (item) => `prize-draw:${item.itemId}`,
13
+ /**
14
+ * Slice a high-quantity prize-draw entry into chunks of
15
+ * PRIZE_DRAW_MAX_REVEALS_PER_ORDER so each resulting order has at most
16
+ * that many reveal slots. Buying 7 entries → [3, 3, 1].
17
+ */
18
+ splitMultipleOrders: (item) => {
19
+ if (item.quantity <= PRIZE_DRAW_MAX_REVEALS_PER_ORDER)
20
+ return [item];
21
+ const chunks = [];
22
+ let remaining = item.quantity;
23
+ let batchIndex = 0;
24
+ while (remaining > 0) {
25
+ const batchQty = Math.min(remaining, PRIZE_DRAW_MAX_REVEALS_PER_ORDER);
26
+ chunks.push({
27
+ ...item,
28
+ quantity: batchQty,
29
+ itemId: `${item.itemId}-batch-${batchIndex}`,
30
+ });
31
+ remaining -= batchQty;
32
+ batchIndex++;
33
+ }
34
+ return chunks;
35
+ },
36
+ preflightChecks: (pairs) => {
37
+ for (const { item, product } of pairs) {
38
+ if (product.listingType !== "prize-draw")
39
+ continue;
40
+ const max = product.prizeMaxEntries ?? 0;
41
+ if (max <= 0)
42
+ continue;
43
+ const current = product.prizeCurrentEntries ?? 0;
44
+ if (current + item.quantity > max) {
45
+ throw Object.assign(new ValidationError(`Draw is full for "${product.title}". ${current}/${max} entries already in.`), { code: "PRIZE_POOL_FULL", productId: product.id });
46
+ }
47
+ }
48
+ },
49
+ stockDecrementExtras: (product, quantity) => {
50
+ if (product.listingType !== "prize-draw")
51
+ return {};
52
+ return {
53
+ prizeCurrentEntries: (product.prizeCurrentEntries ?? 0) + quantity,
54
+ };
55
+ },
56
+ decorateOrderItem: (line, product) => ({
57
+ ...line,
58
+ listingType: "prize-draw",
59
+ prizeRevealStatus: product.prizeRevealStatus === "open" ? "open" : "pending",
60
+ }),
61
+ decorateOrderDoc: (_groupFirstItem, groupFirstProduct) => ({
62
+ prizeDrawProductId: groupFirstProduct.id,
63
+ isNonRefundable: true,
64
+ }),
65
+ };
@@ -0,0 +1,2 @@
1
+ import type { ListingCheckoutRule } from "./types";
2
+ export declare const standardRule: ListingCheckoutRule;
@@ -0,0 +1,5 @@
1
+ import { DEFAULT_LISTING_RULE } from "./_defaults";
2
+ export const standardRule = {
3
+ ...DEFAULT_LISTING_RULE,
4
+ orderType: "standard",
5
+ };
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Checkout rule interfaces — S-SBUNI-RULES 2026-05-13.
3
+ *
4
+ * Two registries:
5
+ * - CHECKOUT_RULES keyed by ListingType (for cart-based products)
6
+ * - CATEGORY_CHECKOUT_RULES keyed by CategoryType (for direct-checkout
7
+ * categories like bundles)
8
+ *
9
+ * Every hook has a default in _defaults.ts so rule files only override what
10
+ * differs from the baseline. This is the seam that makes Phase 2+ listing
11
+ * types zero-consumer-edit additions.
12
+ */
13
+ import type { CartItemDocument } from "../../../../features/cart/schemas/firestore";
14
+ import type { ProductDocument } from "../../../../features/products/schemas/firestore";
15
+ import type { OrderDocumentItem } from "../../../../features/orders/schemas/firestore";
16
+ import type { OrderType } from "../../../../features/orders/utils/order-splitter";
17
+ export interface CartItemProductPair {
18
+ item: CartItemDocument;
19
+ product: ProductDocument;
20
+ }
21
+ /** Minimal shape for an order-line created by the checkout action pipeline. */
22
+ export interface OrderItemInput extends Omit<OrderDocumentItem, "bundleCategorySlug" | "bundleProductIds"> {
23
+ bundleCategorySlug?: string;
24
+ bundleProductIds?: string[];
25
+ }
26
+ export interface RefundPolicy {
27
+ full: boolean;
28
+ partial: boolean;
29
+ /** Granularity of partial refunds when `partial: true`. */
30
+ partialGranularity: "item" | "amount" | "none";
31
+ }
32
+ /**
33
+ * Checkout rule for a ListingType. Every field has a default; rule files only
34
+ * override what differs from the baseline.
35
+ */
36
+ export interface ListingCheckoutRule {
37
+ /** Can this listing type be purchased at all? */
38
+ purchaseable: boolean;
39
+ /**
40
+ * Can this item sit in the shopping cart? False for auctions (bid-only),
41
+ * classified (chat-only), live (pending jurisdiction gate), bundles
42
+ * (direct-checkout-only via CategoryCheckoutRule).
43
+ */
44
+ cartEligible: boolean;
45
+ /** OrderType assigned to orders created from this listing type. */
46
+ orderType: OrderType;
47
+ /**
48
+ * Does checkout require a shipping address? False for digital-code (electronic
49
+ * delivery) and classified (meetup-arranged locally).
50
+ */
51
+ requiresShippingAddress: boolean;
52
+ /** Does checkout require the consent-OTP gate? */
53
+ requiresConsentOtp: boolean;
54
+ /**
55
+ * Is this order non-refundable? Blocks the refund API for orders of this type.
56
+ * Set true for prize-draw entries.
57
+ */
58
+ nonRefundable: boolean;
59
+ /** Hard qty cap per single cart line. Auction/offer/prize-draw-per-line = 1. */
60
+ maxQuantityPerLine: number;
61
+ /**
62
+ * When false the checkout pipeline issues one order per cart line (even when
63
+ * multiple lines share the same product). Auctions and offers set this to
64
+ * false so each lock is its own order.
65
+ */
66
+ canMergeWithSameProduct: boolean;
67
+ /**
68
+ * Maximum reveal-entries per order. Prize-draw sets this to
69
+ * PRIZE_DRAW_MAX_REVEALS_PER_ORDER (3) — an entry qty of 7 becomes [3,3,1].
70
+ * Infinity for all other types.
71
+ */
72
+ maxLinesPerOrder: number;
73
+ /** Full/partial refund capabilities per type. */
74
+ refundPolicy: RefundPolicy;
75
+ /**
76
+ * Return the grouping key used by the order splitter. Items with the same
77
+ * key land in the same OrderGroup and produce one order document.
78
+ */
79
+ splitKey(item: CartItemDocument): string;
80
+ /**
81
+ * Slice a single cart item into N virtual items when qty > maxLinesPerOrder.
82
+ * Returns [item] for most types. Prize-draw overrides to chunk the quantity
83
+ * into batches of PRIZE_DRAW_MAX_REVEALS_PER_ORDER.
84
+ */
85
+ splitMultipleOrders(item: CartItemDocument): CartItemDocument[];
86
+ /**
87
+ * Synchronous preflight guard — runs before any state is mutated.
88
+ * Throws ValidationError on violation; returns void on pass.
89
+ * Receives only data already in memory (no IO needed).
90
+ *
91
+ * Pre-order checks reservationCap. Prize-draw checks prizeMaxEntries.
92
+ * Future `live` checks jurisdiction from product + buyer state.
93
+ */
94
+ preflightChecks(pairs: CartItemProductPair[]): void;
95
+ /**
96
+ * Return extra Firestore field updates to merge alongside the standard
97
+ * `availableQuantity` decrement. Pure — works from product data already
98
+ * fetched by the calling action.
99
+ *
100
+ * Prize-draw bumps `prizeCurrentEntries`. Pre-order bumps `preOrderCurrentCount`.
101
+ */
102
+ stockDecrementExtras(product: ProductDocument, quantity: number): Record<string, unknown>;
103
+ /**
104
+ * Transform a raw order-line input (built from cart item data) before it
105
+ * is written to the OrderDocument. Adds type-specific fields such as
106
+ * prize-draw reveal status and deadline.
107
+ */
108
+ decorateOrderItem(line: OrderItemInput, product: ProductDocument): OrderItemInput;
109
+ /**
110
+ * Return extra fields to spread onto the created OrderDocument.
111
+ * Used for prize-draw-specific fields (prizeDrawProductId, isNonRefundable,
112
+ * prizeRevealDeadline).
113
+ */
114
+ decorateOrderDoc(groupFirstItem: CartItemDocument, groupFirstProduct: ProductDocument): Record<string, unknown>;
115
+ }
116
+ /**
117
+ * Checkout rule for a purchaseable CategoryType (currently only "bundle").
118
+ * Bundles are always direct-checkout — they never enter the cart.
119
+ */
120
+ export interface CategoryCheckoutRule {
121
+ purchaseable: boolean;
122
+ cartEligible: boolean;
123
+ orderType: OrderType;
124
+ requiresShippingAddress: boolean;
125
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Checkout rule interfaces — S-SBUNI-RULES 2026-05-13.
3
+ *
4
+ * Two registries:
5
+ * - CHECKOUT_RULES keyed by ListingType (for cart-based products)
6
+ * - CATEGORY_CHECKOUT_RULES keyed by CategoryType (for direct-checkout
7
+ * categories like bundles)
8
+ *
9
+ * Every hook has a default in _defaults.ts so rule files only override what
10
+ * differs from the baseline. This is the seam that makes Phase 2+ listing
11
+ * types zero-consumer-edit additions.
12
+ */
13
+ export {};
@@ -20,8 +20,8 @@ export declare const addToCartSchema: z.ZodObject<{
20
20
  productTitle: string;
21
21
  productImage: string;
22
22
  price: number;
23
- listingType: "auction" | "standard" | "prize-draw" | "pre-order";
24
23
  storeName: string;
24
+ listingType: "auction" | "standard" | "pre-order" | "prize-draw";
25
25
  offerId?: string | undefined;
26
26
  lockedPrice?: number | undefined;
27
27
  isOffer?: boolean | undefined;
@@ -30,7 +30,7 @@ export declare const addToCartSchema: z.ZodObject<{
30
30
  productId: string;
31
31
  productTitle: string;
32
32
  price: number;
33
- listingType: "auction" | "standard" | "prize-draw" | "pre-order";
33
+ listingType: "auction" | "standard" | "pre-order" | "prize-draw";
34
34
  currency?: string | undefined;
35
35
  quantity?: number | undefined;
36
36
  productImage?: string | undefined;
@@ -78,8 +78,8 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
78
78
  productTitle: string;
79
79
  productImage: string;
80
80
  price: number;
81
- listingType: "auction" | "standard" | "prize-draw" | "pre-order";
82
81
  storeName: string;
82
+ listingType: "auction" | "standard" | "pre-order" | "prize-draw";
83
83
  offerId?: string | undefined;
84
84
  lockedPrice?: number | undefined;
85
85
  isOffer?: boolean | undefined;
@@ -88,7 +88,7 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
88
88
  productId: string;
89
89
  productTitle: string;
90
90
  price: number;
91
- listingType: "auction" | "standard" | "prize-draw" | "pre-order";
91
+ listingType: "auction" | "standard" | "pre-order" | "prize-draw";
92
92
  currency?: string | undefined;
93
93
  quantity?: number | undefined;
94
94
  productImage?: string | undefined;
@@ -106,8 +106,8 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
106
106
  productTitle: string;
107
107
  productImage: string;
108
108
  price: number;
109
- listingType: "auction" | "standard" | "prize-draw" | "pre-order";
110
109
  storeName: string;
110
+ listingType: "auction" | "standard" | "pre-order" | "prize-draw";
111
111
  offerId?: string | undefined;
112
112
  lockedPrice?: number | undefined;
113
113
  isOffer?: boolean | undefined;
@@ -118,7 +118,7 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
118
118
  productId: string;
119
119
  productTitle: string;
120
120
  price: number;
121
- listingType: "auction" | "standard" | "prize-draw" | "pre-order";
121
+ listingType: "auction" | "standard" | "pre-order" | "prize-draw";
122
122
  currency?: string | undefined;
123
123
  quantity?: number | undefined;
124
124
  productImage?: string | undefined;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Bundle UI copy — single source of truth for user-facing strings rendered by
3
+ * the bundle views (S-SBUNI-3 + S-SBUNI-4). Keeping these in one shared module
4
+ * means a copy change touches one file, not five components.
5
+ *
6
+ * Pure string constants — no React, no styling. Safe to import from anywhere
7
+ * in the appkit tree.
8
+ */
9
+ export declare const BUNDLE_COPY: {
10
+ readonly detailItemsHeading: "What's included";
11
+ readonly detailDescriptionHeading: "About this bundle";
12
+ readonly featuredDefaultTitle: "Curated Bundles";
13
+ readonly adminListTitle: "Bundles";
14
+ readonly adminEditorTitleNew: "New bundle";
15
+ readonly adminEditorTitleEdit: "Edit bundle";
16
+ readonly picker: {
17
+ readonly title: "Bundle members";
18
+ readonly selectedCount: (selected: number, min: number, max: number) => string;
19
+ readonly searchPlaceholder: "Search products to add (type at least 2 characters)";
20
+ readonly searchAriaLabel: "Search bundle member products";
21
+ readonly searchingHint: "Searching…";
22
+ readonly searchErrorPrefix: "Search error";
23
+ readonly noMatches: (query: string) => string;
24
+ readonly removeAria: (title: string) => string;
25
+ readonly toggleAria: (title: string) => string;
26
+ };
27
+ readonly detail: {
28
+ readonly priceFallback: "—";
29
+ readonly itemCount: (n: number) => string;
30
+ readonly emptyMembers: "Bundle contents are being updated. Check back shortly.";
31
+ readonly ctaDisabled: "Add to cart coming soon";
32
+ readonly ctaHint: "Bundle checkout is being wired up — buyers can browse contents now and the buy flow ships in the next release.";
33
+ readonly ctaAddToCart: "Add bundle to cart";
34
+ readonly ctaAdding: "Adding…";
35
+ readonly ctaOutOfStock: "Currently out of stock";
36
+ readonly ctaSuccess: "Bundle added to cart";
37
+ readonly ctaSignInRequired: "Sign in to add to cart";
38
+ readonly ctaErrorFallback: "Couldn't add bundle to cart";
39
+ readonly ctaBuyNow: "Buy now";
40
+ readonly qtyLabel: "Qty";
41
+ readonly qtyAriaLabel: "Bundle quantity";
42
+ };
43
+ readonly orderDetail: {
44
+ readonly bundleHeader: (name: string) => string;
45
+ readonly bundleItemCount: (n: number) => string;
46
+ readonly expandLabel: "Show items";
47
+ readonly collapseLabel: "Hide items";
48
+ };
49
+ readonly featured: {
50
+ readonly viewAll: "View all bundles →";
51
+ readonly empty: "Bundles coming soon — curated multi-item drops launching shortly.";
52
+ readonly priceFallback: "—";
53
+ readonly itemCount: (n: number) => string;
54
+ };
55
+ readonly adminList: {
56
+ readonly newButton: "+ New bundle";
57
+ readonly loading: "Loading bundles…";
58
+ readonly empty: "No bundles yet. Create one to get started.";
59
+ readonly columns: {
60
+ readonly name: "Name";
61
+ readonly price: "Price";
62
+ readonly members: "Members";
63
+ readonly stock: "Stock";
64
+ readonly status: "Status";
65
+ };
66
+ readonly editLabel: "Edit";
67
+ readonly activeBadge: "Active";
68
+ readonly inactiveBadge: "Inactive";
69
+ };
70
+ readonly adminEditor: {
71
+ readonly loading: "Loading bundle…";
72
+ readonly saveButton: (saving: boolean, isEdit: boolean) => "Saving…" | "Save changes" | "Create bundle";
73
+ readonly deleteButton: (deleting: boolean) => "Deleting…" | "Delete bundle";
74
+ readonly deleteConfirm: "Delete this bundle? This action cannot be undone.";
75
+ readonly fields: {
76
+ readonly nameLabel: "Name *";
77
+ readonly namePlaceholder: "Pokémon TCG Starter Pack 2026";
78
+ readonly descriptionLabel: "Description";
79
+ readonly descriptionPlaceholder: "One paragraph describing what's in the bundle and who it's for.";
80
+ readonly priceLabel: "Bundle price (₹) *";
81
+ readonly pricePlaceholder: "6499";
82
+ readonly pricePaiseHint: (paise: number | null) => string;
83
+ readonly coverImageLabel: "Cover image URL";
84
+ readonly activeLabel: "Bundle is active (visible to buyers)";
85
+ };
86
+ readonly ruleTypeLabel: "Bundle members source";
87
+ readonly ruleTypeStatic: "Hand-picked products";
88
+ readonly ruleTypeDynamic: "Dynamic query (auto-resolves)";
89
+ readonly dynamic: {
90
+ readonly title: "Dynamic query rule";
91
+ readonly hint: "onProductStockChange resolves bundleProductIds; bundleQueryResolvedAt tracks the last refresh.";
92
+ readonly fields: {
93
+ readonly categorySlug: "Category slug filter";
94
+ readonly brandSlug: "Brand slug filter";
95
+ readonly tags: "Tags (comma-separated)";
96
+ readonly listingType: "Listing type";
97
+ readonly orderBy: "Order by";
98
+ readonly limit: "Limit";
99
+ };
100
+ };
101
+ readonly errors: {
102
+ readonly nameRequired: "Bundle name is required";
103
+ readonly priceInvalid: "Bundle price must be a positive number (rupees)";
104
+ readonly loadFailed: "Failed to load bundle";
105
+ readonly saveFailed: "Save failed";
106
+ readonly deleteFailed: "Delete failed";
107
+ };
108
+ };
109
+ readonly stockBadge: {
110
+ readonly in_stock: "In stock";
111
+ readonly partial: "Some items unavailable";
112
+ readonly out_of_stock: "Currently out of stock";
113
+ readonly listVariantInStock: "In stock";
114
+ readonly listVariantPartial: "Partial";
115
+ readonly listVariantOutOfStock: "Out of stock";
116
+ };
117
+ };
118
+ /** Stock-status variant mapping (kept here so consumers can drive Badge variant prop). */
119
+ export declare const BUNDLE_STOCK_VARIANT: {
120
+ readonly in_stock: "success";
121
+ readonly partial: "warning";
122
+ readonly out_of_stock: "danger";
123
+ };
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Bundle UI copy — single source of truth for user-facing strings rendered by
3
+ * the bundle views (S-SBUNI-3 + S-SBUNI-4). Keeping these in one shared module
4
+ * means a copy change touches one file, not five components.
5
+ *
6
+ * Pure string constants — no React, no styling. Safe to import from anywhere
7
+ * in the appkit tree.
8
+ */
9
+ export const BUNDLE_COPY = {
10
+ // Headings + section titles
11
+ detailItemsHeading: "What's included",
12
+ detailDescriptionHeading: "About this bundle",
13
+ featuredDefaultTitle: "Curated Bundles",
14
+ adminListTitle: "Bundles",
15
+ adminEditorTitleNew: "New bundle",
16
+ adminEditorTitleEdit: "Edit bundle",
17
+ picker: {
18
+ title: "Bundle members",
19
+ selectedCount: (selected, min, max) => `${selected} selected · min ${min}, max ${max}`,
20
+ searchPlaceholder: "Search products to add (type at least 2 characters)",
21
+ searchAriaLabel: "Search bundle member products",
22
+ searchingHint: "Searching…",
23
+ searchErrorPrefix: "Search error",
24
+ noMatches: (query) => `No matches for "${query}".`,
25
+ removeAria: (title) => `Remove ${title}`,
26
+ toggleAria: (title) => `Toggle ${title}`,
27
+ },
28
+ // Detail page
29
+ detail: {
30
+ priceFallback: "—",
31
+ itemCount: (n) => `${n} item${n !== 1 ? "s" : ""}`,
32
+ emptyMembers: "Bundle contents are being updated. Check back shortly.",
33
+ // SB-UNI-5 2026-05-13 — CTA functional. Disabled-CTA copy retained for
34
+ // consumers that opt out of the wired CTA (the new client island reads
35
+ // the active strings below).
36
+ ctaDisabled: "Add to cart coming soon",
37
+ ctaHint: "Bundle checkout is being wired up — buyers can browse contents now and the buy flow ships in the next release.",
38
+ ctaAddToCart: "Add bundle to cart",
39
+ ctaAdding: "Adding…",
40
+ ctaOutOfStock: "Currently out of stock",
41
+ ctaSuccess: "Bundle added to cart",
42
+ ctaSignInRequired: "Sign in to add to cart",
43
+ ctaErrorFallback: "Couldn't add bundle to cart",
44
+ ctaBuyNow: "Buy now",
45
+ qtyLabel: "Qty",
46
+ qtyAriaLabel: "Bundle quantity",
47
+ },
48
+ // Order detail bundle grouping (SB-UNI-5)
49
+ orderDetail: {
50
+ bundleHeader: (name) => `Bundle: ${name}`,
51
+ bundleItemCount: (n) => `Includes ${n} item${n !== 1 ? "s" : ""}`,
52
+ expandLabel: "Show items",
53
+ collapseLabel: "Hide items",
54
+ },
55
+ // Featured strip
56
+ featured: {
57
+ viewAll: "View all bundles →",
58
+ empty: "Bundles coming soon — curated multi-item drops launching shortly.",
59
+ priceFallback: "—",
60
+ itemCount: (n) => `${n} item${n !== 1 ? "s" : ""}`,
61
+ },
62
+ // Admin list
63
+ adminList: {
64
+ newButton: "+ New bundle",
65
+ loading: "Loading bundles…",
66
+ empty: "No bundles yet. Create one to get started.",
67
+ columns: {
68
+ name: "Name",
69
+ price: "Price",
70
+ members: "Members",
71
+ stock: "Stock",
72
+ status: "Status",
73
+ },
74
+ editLabel: "Edit",
75
+ activeBadge: "Active",
76
+ inactiveBadge: "Inactive",
77
+ },
78
+ // Admin editor
79
+ adminEditor: {
80
+ loading: "Loading bundle…",
81
+ saveButton: (saving, isEdit) => saving ? "Saving…" : isEdit ? "Save changes" : "Create bundle",
82
+ deleteButton: (deleting) => deleting ? "Deleting…" : "Delete bundle",
83
+ deleteConfirm: "Delete this bundle? This action cannot be undone.",
84
+ fields: {
85
+ nameLabel: "Name *",
86
+ namePlaceholder: "Pokémon TCG Starter Pack 2026",
87
+ descriptionLabel: "Description",
88
+ descriptionPlaceholder: "One paragraph describing what's in the bundle and who it's for.",
89
+ priceLabel: "Bundle price (₹) *",
90
+ pricePlaceholder: "6499",
91
+ pricePaiseHint: (paise) => `Stored as paise: ${paise ?? "—"}`,
92
+ coverImageLabel: "Cover image URL",
93
+ activeLabel: "Bundle is active (visible to buyers)",
94
+ },
95
+ // SB-UNI-5 2026-05-13 — static/dynamic rule-type toggle.
96
+ ruleTypeLabel: "Bundle members source",
97
+ ruleTypeStatic: "Hand-picked products",
98
+ ruleTypeDynamic: "Dynamic query (auto-resolves)",
99
+ dynamic: {
100
+ title: "Dynamic query rule",
101
+ hint: "onProductStockChange resolves bundleProductIds; bundleQueryResolvedAt tracks the last refresh.",
102
+ fields: {
103
+ categorySlug: "Category slug filter",
104
+ brandSlug: "Brand slug filter",
105
+ tags: "Tags (comma-separated)",
106
+ listingType: "Listing type",
107
+ orderBy: "Order by",
108
+ limit: "Limit",
109
+ },
110
+ },
111
+ errors: {
112
+ nameRequired: "Bundle name is required",
113
+ priceInvalid: "Bundle price must be a positive number (rupees)",
114
+ loadFailed: "Failed to load bundle",
115
+ saveFailed: "Save failed",
116
+ deleteFailed: "Delete failed",
117
+ },
118
+ },
119
+ // Stock badges (shared between list + featured + detail)
120
+ stockBadge: {
121
+ in_stock: "In stock",
122
+ partial: "Some items unavailable",
123
+ out_of_stock: "Currently out of stock",
124
+ listVariantInStock: "In stock",
125
+ listVariantPartial: "Partial",
126
+ listVariantOutOfStock: "Out of stock",
127
+ },
128
+ };
129
+ /** Stock-status variant mapping (kept here so consumers can drive Badge variant prop). */
130
+ export const BUNDLE_STOCK_VARIANT = {
131
+ in_stock: "success",
132
+ partial: "warning",
133
+ out_of_stock: "danger",
134
+ };