@mohasinac/appkit 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/_internal/server/features/auth/actions.d.ts +0 -1
  2. package/dist/_internal/server/features/auth/actions.js +0 -1
  3. package/dist/_internal/server/features/bundles/data.d.ts +22 -4
  4. package/dist/_internal/server/features/bundles/data.js +41 -4
  5. package/dist/_internal/server/features/bundles/index.d.ts +1 -1
  6. package/dist/_internal/server/features/bundles/index.js +1 -1
  7. package/dist/_internal/server/features/checkout/actions.js +7 -78
  8. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -16
  9. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -30
  10. package/dist/_internal/server/features/orders/adapters.js +1 -14
  11. package/dist/_internal/server/features/products/actions.js +8 -3
  12. package/dist/_internal/server/features/products/service.d.ts +15 -0
  13. package/dist/_internal/server/features/products/service.js +41 -0
  14. package/dist/_internal/server/functions/firestore.d.ts +3 -1
  15. package/dist/_internal/server/functions/firestore.js +17 -1
  16. package/dist/_internal/server/functions/scheduled.d.ts +2 -5
  17. package/dist/_internal/server/functions/scheduled.js +6 -30
  18. package/dist/_internal/server/jobs/core/bundleStockSync.js +25 -7
  19. package/dist/_internal/server/jobs/core/countersReconcile.js +7 -1
  20. package/dist/_internal/server/jobs/core/index.d.ts +4 -4
  21. package/dist/_internal/server/jobs/core/index.js +4 -4
  22. package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.d.ts +19 -0
  23. package/dist/_internal/server/jobs/core/onPrizeDrawPaymentConfirmed.js +30 -0
  24. package/dist/_internal/server/jobs/core/paymentWindowTimeout.d.ts +2 -2
  25. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +2 -2
  26. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.d.ts +20 -0
  27. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +113 -0
  28. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.d.ts +14 -0
  29. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +74 -0
  30. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.d.ts +22 -0
  31. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +68 -0
  32. package/dist/_internal/server/jobs/handlers/index.d.ts +3 -4
  33. package/dist/_internal/server/jobs/handlers/index.js +8 -6
  34. package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.d.ts +3 -0
  35. package/dist/_internal/server/jobs/handlers/onPrizeDrawPaymentConfirmed.js +11 -0
  36. package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.d.ts +2 -0
  37. package/dist/_internal/server/jobs/handlers/prizeDrawExpiryReveal.js +2 -0
  38. package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.d.ts +3 -0
  39. package/dist/_internal/server/jobs/handlers/prizeDrawSoldOutReveal.js +4 -0
  40. package/dist/_internal/shared/actions/action-registry.js +40 -10
  41. package/dist/_internal/shared/checkout/rules/_defaults.js +1 -2
  42. package/dist/_internal/shared/checkout/rules/_limits.d.ts +3 -0
  43. package/dist/_internal/shared/checkout/rules/_limits.js +3 -0
  44. package/dist/_internal/shared/checkout/rules/_registry.d.ts +2 -1
  45. package/dist/_internal/shared/checkout/rules/_registry.js +2 -2
  46. package/dist/_internal/shared/checkout/rules/classified.rule.js +0 -1
  47. package/dist/_internal/shared/checkout/rules/index.d.ts +1 -1
  48. package/dist/_internal/shared/checkout/rules/index.js +1 -1
  49. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +20 -1
  50. package/dist/_internal/shared/checkout/rules/types.d.ts +17 -7
  51. package/dist/_internal/shared/features/categories/bundle-copy.d.ts +2 -0
  52. package/dist/_internal/shared/features/categories/bundle-copy.js +2 -0
  53. package/dist/_internal/shared/features/categories/bundle-pricing.d.ts +23 -0
  54. package/dist/_internal/shared/features/categories/bundle-pricing.js +25 -0
  55. package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -1
  56. package/dist/constants/api-endpoints.d.ts +6 -9
  57. package/dist/constants/api-endpoints.js +5 -5
  58. package/dist/constants/field-names.d.ts +17 -1
  59. package/dist/constants/field-names.js +17 -1
  60. package/dist/features/account/hooks/useNotifications.js +5 -0
  61. package/dist/features/admin/actions/admin-actions.js +6 -0
  62. package/dist/features/admin/actions/notification-actions.js +1 -2
  63. package/dist/features/admin/components/AdminBlogEditorView.js +1 -1
  64. package/dist/features/admin/components/AdminPrizeDrawsView.js +3 -3
  65. package/dist/features/admin/components/AdminSiteSettingsView.js +33 -6
  66. package/dist/features/admin/components/AdminTesterChecklistView.js +74 -22
  67. package/dist/features/admin/hooks/useAdminListing.d.ts +4 -0
  68. package/dist/features/admin/hooks/useAdminListing.js +4 -2
  69. package/dist/features/admin/schemas/firestore.d.ts +13 -5
  70. package/dist/features/admin/schemas/firestore.js +1 -2
  71. package/dist/features/auctions/actions/bid-actions.js +3 -1
  72. package/dist/features/auctions/components/AuctionBidsTable.d.ts +6 -1
  73. package/dist/features/auctions/components/AuctionBidsTable.js +8 -4
  74. package/dist/features/auctions/components/AuctionDetailPageView.js +10 -13
  75. package/dist/features/auctions/components/CollapsibleBidHistory.d.ts +23 -2
  76. package/dist/features/auctions/components/CollapsibleBidHistory.js +21 -3
  77. package/dist/features/auctions/components/LiveBidPrice.d.ts +19 -0
  78. package/dist/features/auctions/components/LiveBidPrice.js +17 -0
  79. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -1
  80. package/dist/features/auctions/components/PlaceBidFormClient.js +16 -1
  81. package/dist/features/auctions/hooks/useBids.d.ts +33 -0
  82. package/dist/features/auctions/hooks/useBids.js +32 -0
  83. package/dist/features/auctions/hooks/useLiveAuctionBid.d.ts +20 -0
  84. package/dist/features/auctions/hooks/useLiveAuctionBid.js +23 -0
  85. package/dist/features/auth/checkout-value-otp.d.ts +7 -10
  86. package/dist/features/auth/checkout-value-otp.js +14 -10
  87. package/dist/features/auth/server.d.ts +0 -1
  88. package/dist/features/auth/server.js +0 -1
  89. package/dist/features/blog/api/[slug]/route.d.ts +5 -0
  90. package/dist/features/blog/api/[slug]/route.js +12 -3
  91. package/dist/features/blog/components/BlogPostView.d.ts +2 -0
  92. package/dist/features/blog/components/BlogPostView.js +5 -4
  93. package/dist/features/blog/hooks/useBlog.d.ts +2 -0
  94. package/dist/features/blog/hooks/useBlog.js +2 -0
  95. package/dist/features/blog/repository/blog.repository.d.ts +7 -0
  96. package/dist/features/blog/repository/blog.repository.js +44 -0
  97. package/dist/features/blog/schemas/firestore.d.ts +3 -0
  98. package/dist/features/blog/schemas/firestore.js +1 -0
  99. package/dist/features/blog/types/index.d.ts +2 -0
  100. package/dist/features/cart/components/index.d.ts +0 -2
  101. package/dist/features/cart/components/index.js +0 -1
  102. package/dist/features/cart/hooks/useCartCount.js +22 -5
  103. package/dist/features/cart/hooks/useGuestCart.js +11 -1
  104. package/dist/features/cart/utils/guest-cart.d.ts +4 -0
  105. package/dist/features/cart/utils/guest-cart.js +10 -0
  106. package/dist/features/cart/utils/pending-ops.d.ts +17 -0
  107. package/dist/features/cart/utils/pending-ops.js +46 -5
  108. package/dist/features/categories/components/BrandDetailPageView.js +6 -2
  109. package/dist/features/categories/components/BundleDetailView.js +4 -2
  110. package/dist/features/categories/components/CategoryDetailPageView.js +10 -2
  111. package/dist/features/categories/schemas/firestore.d.ts +7 -0
  112. package/dist/features/checkout/actions/index.d.ts +0 -1
  113. package/dist/features/checkout/actions/index.js +0 -1
  114. package/dist/features/checkout/schemas/firestore.d.ts +2 -2
  115. package/dist/features/events/actions/event-actions.d.ts +2 -0
  116. package/dist/features/events/actions/event-actions.js +5 -0
  117. package/dist/features/events/components/EventCard.js +1 -2
  118. package/dist/features/events/components/RelatedEventsCarousel.d.ts +15 -0
  119. package/dist/features/events/components/RelatedEventsCarousel.js +13 -0
  120. package/dist/features/events/components/index.d.ts +2 -0
  121. package/dist/features/events/components/index.js +1 -0
  122. package/dist/features/events/repository/events.repository.d.ts +6 -0
  123. package/dist/features/events/repository/events.repository.js +21 -0
  124. package/dist/features/history/repository/user-history.repository.d.ts +1 -1
  125. package/dist/features/history/utils/guest-history.d.ts +1 -1
  126. package/dist/features/homepage/components/FeaturedBundlesSection.js +4 -2
  127. package/dist/features/homepage/components/FeaturedProductsSection.js +2 -2
  128. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  129. package/dist/features/homepage/components/WelcomeSection.js +1 -1
  130. package/dist/features/layout/AppLayoutShell.js +1 -1
  131. package/dist/features/layout/NavbarLayout.js +1 -1
  132. package/dist/features/layout/TitleBarLayout.js +2 -2
  133. package/dist/features/media/MediaVideo.d.ts +7 -0
  134. package/dist/features/media/MediaVideo.js +36 -5
  135. package/dist/features/orders/components/OrdersList.js +1 -5
  136. package/dist/features/orders/schemas/firestore.d.ts +2 -8
  137. package/dist/features/orders/schemas/index.d.ts +3 -32
  138. package/dist/features/orders/schemas/index.js +1 -4
  139. package/dist/features/orders/types/index.d.ts +6 -9
  140. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +1 -1
  141. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +2 -1
  142. package/dist/features/products/actions/product-actions.js +13 -10
  143. package/dist/features/products/components/MarketplaceBundleCard.d.ts +1 -1
  144. package/dist/features/products/components/MarketplaceBundleCard.js +7 -4
  145. package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
  146. package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
  147. package/dist/features/products/components/PrizeDrawWinnerMappingView.d.ts +14 -0
  148. package/dist/features/products/components/PrizeDrawWinnerMappingView.js +37 -0
  149. package/dist/features/products/components/PrizeRevealModal.d.ts +10 -23
  150. package/dist/features/products/components/PrizeRevealModal.js +18 -147
  151. package/dist/features/products/components/ProductDetailPageView.js +72 -30
  152. package/dist/features/products/components/ProductForm.js +7 -14
  153. package/dist/features/products/components/ProductGalleryClient.d.ts +10 -1
  154. package/dist/features/products/components/ProductGalleryClient.js +29 -10
  155. package/dist/features/products/components/ProductsIndexListing.js +2 -1
  156. package/dist/features/products/components/RelatedProductsCarousel.js +2 -2
  157. package/dist/features/products/components/ShowGroupSection.js +2 -2
  158. package/dist/features/products/components/SublistingCarouselSection.js +1 -1
  159. package/dist/features/products/components/index.d.ts +4 -2
  160. package/dist/features/products/components/index.js +1 -0
  161. package/dist/features/products/constants/action-defs.d.ts +0 -1
  162. package/dist/features/products/constants/action-defs.js +0 -2
  163. package/dist/features/products/repository/products.repository.d.ts +6 -0
  164. package/dist/features/products/repository/products.repository.js +20 -1
  165. package/dist/features/products/schemas/firestore.d.ts +26 -2
  166. package/dist/features/products/schemas/index.d.ts +11 -3
  167. package/dist/features/products/schemas/index.js +10 -2
  168. package/dist/features/products/types/index.d.ts +2 -1
  169. package/dist/features/reviews/actions/review-actions.js +1 -0
  170. package/dist/features/reviews/components/ReviewDetailPageView.js +8 -1
  171. package/dist/features/reviews/components/ReviewDetailShell.js +2 -1
  172. package/dist/features/reviews/components/ReviewsList.js +2 -1
  173. package/dist/features/reviews/schemas/firestore.d.ts +3 -0
  174. package/dist/features/reviews/schemas/index.d.ts +6 -0
  175. package/dist/features/reviews/schemas/index.js +2 -0
  176. package/dist/features/reviews/types/index.d.ts +3 -0
  177. package/dist/features/scams/actions/scam-actions.d.ts +3 -0
  178. package/dist/features/scams/actions/scam-actions.js +3 -2
  179. package/dist/features/scams/components/ScamProfileView.d.ts +2 -1
  180. package/dist/features/scams/components/ScamProfileView.js +2 -2
  181. package/dist/features/scams/repository/scammer.repository.d.ts +6 -0
  182. package/dist/features/scams/repository/scammer.repository.js +24 -0
  183. package/dist/features/seller/actions/seller-actions.js +8 -0
  184. package/dist/features/seller/components/SellerPrizeDrawsView.js +4 -0
  185. package/dist/features/stores/components/StoreDetailLayoutView.js +6 -6
  186. package/dist/features/stores/components/StoreNavTabs.d.ts +10 -1
  187. package/dist/features/stores/components/StoreNavTabs.js +21 -9
  188. package/dist/features/tester/actions/index.d.ts +1 -0
  189. package/dist/features/tester/actions/index.js +1 -0
  190. package/dist/features/tester/actions/leaderboard-actions.d.ts +3 -0
  191. package/dist/features/tester/actions/leaderboard-actions.js +5 -0
  192. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +26 -4
  193. package/dist/features/tester/components/AdminTesterFeedbackListView.js +13 -0
  194. package/dist/features/tester/components/BugHunterLeaderboardView.d.ts +23 -0
  195. package/dist/features/tester/components/BugHunterLeaderboardView.js +18 -0
  196. package/dist/features/tester/components/index.d.ts +2 -0
  197. package/dist/features/tester/components/index.js +1 -0
  198. package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +12 -1
  199. package/dist/features/tester/repository/tester-checklist-item.repository.js +80 -0
  200. package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +4 -0
  201. package/dist/features/tester/repository/tester-checklist-response.repository.js +4 -0
  202. package/dist/features/tester/schemas/firestore.d.ts +22 -1
  203. package/dist/features/tester/schemas/firestore.js +8 -0
  204. package/dist/features/tester/seed-data/categories-tester-seed-data.js +42 -7
  205. package/dist/features/tester/seed-data/events-tester-seed-data.js +23 -0
  206. package/dist/features/tester/seed-data/orders-tester-seed-data.js +69 -31
  207. package/dist/features/tester/seed-data/products-tester-seed-data.js +152 -8
  208. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +249 -14
  209. package/dist/features/wishlist/hooks/useGuestWishlist.js +11 -1
  210. package/dist/features/wishlist/hooks/useWishlistCount.js +16 -2
  211. package/dist/features/wishlist/utils/guest-wishlist.d.ts +5 -0
  212. package/dist/features/wishlist/utils/guest-wishlist.js +11 -0
  213. package/dist/index.d.ts +19 -22
  214. package/dist/index.js +25 -58
  215. package/dist/jobs.d.ts +1 -1
  216. package/dist/jobs.js +2 -2
  217. package/dist/next/routing/route-map.d.ts +2 -0
  218. package/dist/next/routing/route-map.js +1 -0
  219. package/dist/schemas/registry.d.ts +6 -26
  220. package/dist/seed/bids-seed-data.js +14 -2
  221. package/dist/seed/blog-posts-seed-data.js +2 -1
  222. package/dist/seed/categories-seed-data.js +11 -2
  223. package/dist/seed/events-seed-data.js +11 -11
  224. package/dist/seed/faq-seed-data.js +5 -1
  225. package/dist/seed/products-auctions-seed-data.js +2 -2
  226. package/dist/seed/products-preorders-seed-data.d.ts +2 -1
  227. package/dist/seed/products-prize-draws-seed-data.js +56 -10
  228. package/dist/seed/products-standard-seed-data.js +82 -3
  229. package/dist/seed/scammers-seed-data.js +75 -2
  230. package/dist/seed/site-settings-seed-data.js +5 -2
  231. package/dist/server-entry.d.ts +0 -1
  232. package/dist/server-entry.js +0 -1
  233. package/dist/server.d.ts +4 -20
  234. package/dist/server.js +10 -57
  235. package/dist/styles.css +1 -1
  236. package/dist/tailwind-utilities.css +1 -1
  237. package/dist/ui/components/BaseListingCard.js +1 -1
  238. package/dist/ui/components/ImageLightbox.d.ts +9 -0
  239. package/dist/ui/components/ImageLightbox.js +6 -3
  240. package/dist/ui/components/ListingToolbar.d.ts +18 -1
  241. package/dist/ui/components/ListingToolbar.js +5 -2
  242. package/dist/ui/components/StickyToolbar.js +13 -8
  243. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -609,6 +609,9 @@ export { categoriesTesterSeedData } from "./seed/index";
609
609
  export { productsTesterSeedData } from "./seed/index";
610
610
  export { blogTesterSeedData } from "./seed/index";
611
611
  export { eventsTesterSeedData } from "./seed/index";
612
+ export { couponsTesterSeedData } from "./seed/index";
613
+ export { bidsTesterSeedData } from "./seed/index";
614
+ export { ordersTesterSeedData } from "./seed/index";
612
615
  export { formatSeedPrice } from "./seed/index";
613
616
  export { getSeedLocale } from "./seed/index";
614
617
  export { homepageSectionsSeedData } from "./seed/index";
@@ -1100,6 +1103,8 @@ export type { AdminTesterChecklistItemEditorViewProps } from "./features/admin/i
1100
1103
  export { TesterHubView } from "./features/tester/index";
1101
1104
  export type { TesterHubViewProps } from "./features/tester/index";
1102
1105
  export { AdminTesterFeedbackView } from "./features/tester/index";
1106
+ export { BugHunterLeaderboardView } from "./features/tester/index";
1107
+ export type { BugHunterLeaderboardViewProps } from "./features/tester/index";
1103
1108
  export { AdminNavEditorView } from "./features/admin/index";
1104
1109
  export type { AdminNavEditorViewProps, NavItemData } from "./features/admin/index";
1105
1110
  export { AdminFeatureFlagsView } from "./features/admin/index";
@@ -1387,38 +1392,22 @@ export { listBidsByProduct } from "./features/auctions/server";
1387
1392
  export { placeBid, buyNowAuction } from "./features/auctions/server";
1388
1393
  export type { PlaceBidInput, BuyNowAuctionInput, BuyNowAuctionResult } from "./features/auctions/server";
1389
1394
  export type { PlaceBidResult } from "./features/auctions/server";
1390
- export { CONSENT_OTP_COOLDOWN_MS } from "./features/auth/server";
1391
- export { CONSENT_OTP_EXPIRY_MINUTES } from "./features/auth/server";
1392
- export { CONSENT_OTP_EXPIRY_MS } from "./features/auth/server";
1393
- export { CONSENT_OTP_MAX_ATTEMPTS } from "./features/auth/server";
1394
- export { CONSENT_OTP_MAX_BYPASS_CREDITS } from "./features/auth/server";
1395
- export { CONSENT_OTP_VERIFY_RATE_LIMIT } from "./features/auth/server";
1395
+ export { CHECKOUT_VALUE_OTP_VERIFY_RATE_LIMIT } from "./features/auth/checkout-value-otp";
1396
1396
  export { authMeGET } from "./features/auth/server";
1397
- export { buildConsentOtpEmail } from "./features/auth/server";
1398
- export { buildConsentOtpWhatsApp } from "./features/auth/server";
1399
- export { consentOtpRateLimitRef } from "./features/auth/server";
1400
- export { consentOtpRef } from "./features/auth/server";
1401
1397
  export { createPasswordResetToken } from "./features/auth/server";
1402
1398
  export { createVerificationToken } from "./features/auth/server";
1403
1399
  export { deleteToken } from "./features/auth/server";
1404
- export { enforceConsentOtpRateLimit } from "./features/auth/server";
1405
- export { generateOtpCode } from "./features/auth/server";
1406
1400
  export { generateToken } from "./features/auth/server";
1407
1401
  export { getPublicUserProfile } from "./features/auth/server";
1408
1402
  export { getProfileStoreProducts } from "./features/auth/server";
1409
1403
  export { getSellerReviews } from "./features/auth/server";
1410
1404
  export { getUserProfile } from "./features/auth/server";
1411
1405
  export { getUserSessions } from "./features/auth/server";
1412
- export { hashOtp } from "./features/auth/server";
1413
1406
  export { issueRealtimeToken } from "./features/auth/server";
1414
1407
  export { markPasswordResetTokenAsUsed } from "./features/auth/server";
1415
- export { patchConsentOtp } from "./features/auth/server";
1416
- export { readConsentOtp } from "./features/auth/server";
1417
- export { saveConsentOtp } from "./features/auth/server";
1418
1408
  export { updateUserProfile } from "./features/auth/server";
1419
1409
  export { verifyEmailToken } from "./features/auth/server";
1420
1410
  export { verifyPasswordResetToken } from "./features/auth/server";
1421
- export type { ConsentOtpDoc } from "./features/auth/server";
1422
1411
  export type { PasswordResetTokenData } from "./features/auth/server";
1423
1412
  export type { RealtimeTokenResult } from "./features/auth/server";
1424
1413
  export type { TokenData } from "./features/auth/server";
@@ -1672,9 +1661,6 @@ export { listTopLevelCategories } from "./features/categories/server";
1672
1661
  export { updateCategory } from "./features/categories/server";
1673
1662
  export { FailedCheckoutRepository } from "./features/checkout/server";
1674
1663
  export { failedCheckoutRepository } from "./features/checkout/server";
1675
- export { grantCheckoutConsentViaSms } from "./features/checkout/server";
1676
- export { sendCheckoutConsentOtp } from "./features/checkout/server";
1677
- export { verifyCheckoutConsentOtp } from "./features/checkout/server";
1678
1664
  export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
1679
1665
  export type { FailedCheckoutMeta } from "./features/checkout/server";
1680
1666
  export type { FailedPaymentMeta } from "./features/checkout/server";
@@ -1781,6 +1767,8 @@ export { EVENT_SELLER_SORT_OPTIONS } from "./features/events/index";
1781
1767
  export { EVENT_SORT_OPTIONS } from "./features/events/index";
1782
1768
  export { EventBanner } from "./features/events/index";
1783
1769
  export { EventCard } from "./features/events/index";
1770
+ export { RelatedEventsCarousel } from "./features/events/index";
1771
+ export type { RelatedEventItem } from "./features/events/index";
1784
1772
  export { EventDetailView } from "./features/events/index";
1785
1773
  export { EventFilters } from "./features/events/index";
1786
1774
  export { EventFormDrawer } from "./features/events/index";
@@ -1792,6 +1780,10 @@ export { EventRaffleWinnerView } from "./features/events/index";
1792
1780
  export type { EventRaffleWinnerViewProps } from "./features/events/index";
1793
1781
  export { SpinWheelView } from "./features/events/index";
1794
1782
  export type { SpinWheelViewProps } from "./features/events/index";
1783
+ export { EventRaffleEntryForm } from "./features/events/index";
1784
+ export type { EventRaffleEntryFormProps } from "./features/events/index";
1785
+ export { EventOfferCard } from "./features/events/index";
1786
+ export type { EventOfferCardProps } from "./features/events/index";
1795
1787
  export { LotterySlotGrid } from "./_internal/client/features/lottery/LotterySlotGrid";
1796
1788
  export { LotteryPullForm } from "./_internal/client/features/lottery/LotteryPullForm";
1797
1789
  export { LotteryListView } from "./_internal/client/features/lottery/LotteryListView";
@@ -1871,8 +1863,10 @@ export { enterEvent } from "./features/events/server";
1871
1863
  export { eventIdGET } from "./features/events/server";
1872
1864
  export { eventsGET } from "./features/events/server";
1873
1865
  export { getEventLeaderboard } from "./features/events/server";
1866
+ export { getBugHunterLeaderboard } from "./features/tester/server";
1874
1867
  export { getPublicEventById } from "./features/events/server";
1875
1868
  export { listPublicEvents } from "./features/events/server";
1869
+ export { getRelatedEvents } from "./features/events/server";
1876
1870
  export { updateEvent } from "./features/events/server";
1877
1871
  export type { CreateEventInput } from "./features/events/server";
1878
1872
  export type { EnterEventInput } from "./features/events/server";
@@ -1894,6 +1888,7 @@ export type { TesterChecklistItemDocument } from "./features/tester/index";
1894
1888
  export type { TesterChecklistResponseDocument } from "./features/tester/index";
1895
1889
  export type { TesterAnswer } from "./features/tester/index";
1896
1890
  export type { TesterFeedbackStatus } from "./features/tester/index";
1891
+ export type { BugHunterLeaderboardEntry } from "./features/tester/index";
1897
1892
  export { FAQS_PUBLIC_FIELDS } from "./features/faq/index";
1898
1893
  export { FAQSortDropdown } from "./features/faq/index";
1899
1894
  export { FAQ_CATEGORY_LABELS } from "./features/faq/index";
@@ -2422,7 +2417,9 @@ export type { PrizeDrawDetailPageViewProps } from "./features/products/component
2422
2417
  export { PrizeDrawEntryActions } from "./features/products/index";
2423
2418
  export type { PrizeDrawEntryActionsProps } from "./features/products/index";
2424
2419
  export { PrizeRevealModal } from "./features/products/components/PrizeRevealModal";
2425
- export type { PrizeRevealModalProps, PrizeRevealResponse } from "./features/products/components/PrizeRevealModal";
2420
+ export type { PrizeRevealModalProps, PrizeRevealResult } from "./features/products/components/PrizeRevealModal";
2421
+ export { PrizeDrawWinnerMappingView } from "./features/products/components/PrizeDrawWinnerMappingView";
2422
+ export type { PrizeDrawWinnerMappingViewProps, PrizeDrawWinnerMappingRow, } from "./features/products/components/PrizeDrawWinnerMappingView";
2426
2423
  export { ProductCard } from "./features/products/index";
2427
2424
  export { ProductDetailView } from "./features/products/index";
2428
2425
  export type { ProductDetailPageViewProps } from "./features/products/components/ProductDetailPageView";
@@ -3081,7 +3078,7 @@ export { RoleGate, ProtectedRoute, SocialAuthButtons, AuthStatusPanel, LoginForm
3081
3078
  export type { RoleGateProps, ProtectedRouteProps, AuthGuardUser, AuthRouteConfig, LoginFormProps, LoginFormValues, RegisterFormProps, RegisterFormValues, ForgotPasswordViewProps, ResetPasswordViewProps, VerifyEmailViewProps, } from "./features/auth/index";
3082
3079
  export { CartItemRow, CartDrawer, CartView, CartSummary, ShippingPicker } from "./features/cart/index";
3083
3080
  export type { ShippingPickerProps } from "./features/cart/index";
3084
- export { CheckoutView, CheckoutAddressStep, CheckoutOtpModal, CheckoutSuccessView } from "./features/cart/index";
3081
+ export { CheckoutView, CheckoutAddressStep, CheckoutSuccessView } from "./features/cart/index";
3085
3082
  export { CheckoutStepper, useCheckout } from "./features/checkout/index";
3086
3083
  export { useProfile as useCurrentProfile, useUpdateProfile as useUpdateCurrentProfile } from "./features/account/index";
3087
3084
  export { useLogout } from "./features/auth/index";
package/dist/index.js CHANGED
@@ -1219,6 +1219,12 @@ export { blogTesterSeedData } from "./seed/index";
1219
1219
  // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1220
1220
  // eventsTesterSeedData - Model for the shared tester sandbox event seed data.
1221
1221
  export { eventsTesterSeedData } from "./seed/index";
1222
+ // couponsTesterSeedData - Model for the shared tester sandbox coupon seed data.
1223
+ export { couponsTesterSeedData } from "./seed/index";
1224
+ // bidsTesterSeedData - Model for the shared tester sandbox bid seed data.
1225
+ export { bidsTesterSeedData } from "./seed/index";
1226
+ // ordersTesterSeedData - Model for the shared tester sandbox order seed data.
1227
+ export { ordersTesterSeedData } from "./seed/index";
1222
1228
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1223
1229
  // formatSeedPrice - Helper for format seed price.
1224
1230
  export { formatSeedPrice } from "./seed/index";
@@ -2117,6 +2123,8 @@ export { AdminTesterChecklistItemEditorView } from "./features/admin/index";
2117
2123
  export { TesterHubView } from "./features/tester/index";
2118
2124
  // AdminTesterFeedbackView - Component for the admin Tester Feedback report/issues/submissions page.
2119
2125
  export { AdminTesterFeedbackView } from "./features/tester/index";
2126
+ // BugHunterLeaderboardView - Public component ranking testers by confirmed-bug count.
2127
+ export { BugHunterLeaderboardView } from "./features/tester/index";
2120
2128
  // AdminNavEditorView - SideDrawer form for nav item create/edit.
2121
2129
  export { AdminNavEditorView } from "./features/admin/index";
2122
2130
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
@@ -2577,39 +2585,12 @@ export { listBidsByProduct } from "./features/auctions/server";
2577
2585
  export { placeBid, buyNowAuction } from "./features/auctions/server";
2578
2586
  // ./features/auth/server
2579
2587
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2580
- // CONSENT_OTP_COOLDOWN_MS - Constant used across modules.
2581
- export { CONSENT_OTP_COOLDOWN_MS } from "./features/auth/server";
2582
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2583
- // CONSENT_OTP_EXPIRY_MINUTES - Constant used across modules.
2584
- export { CONSENT_OTP_EXPIRY_MINUTES } from "./features/auth/server";
2585
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2586
- // CONSENT_OTP_EXPIRY_MS - Constant used across modules.
2587
- export { CONSENT_OTP_EXPIRY_MS } from "./features/auth/server";
2588
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2589
- // CONSENT_OTP_MAX_ATTEMPTS - Constant used across modules.
2590
- export { CONSENT_OTP_MAX_ATTEMPTS } from "./features/auth/server";
2591
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2592
- // CONSENT_OTP_MAX_BYPASS_CREDITS - Constant used across modules.
2593
- export { CONSENT_OTP_MAX_BYPASS_CREDITS } from "./features/auth/server";
2594
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2595
- // CONSENT_OTP_VERIFY_RATE_LIMIT - Constant used across modules.
2596
- export { CONSENT_OTP_VERIFY_RATE_LIMIT } from "./features/auth/server";
2588
+ // CHECKOUT_VALUE_OTP_VERIFY_RATE_LIMIT - Constant used across modules.
2589
+ export { CHECKOUT_VALUE_OTP_VERIFY_RATE_LIMIT } from "./features/auth/checkout-value-otp";
2597
2590
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2598
2591
  // authMeGET - Shared export for auth me get.
2599
2592
  export { authMeGET } from "./features/auth/server";
2600
2593
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2601
- // buildConsentOtpEmail - Helper for build consent otp email.
2602
- export { buildConsentOtpEmail } from "./features/auth/server";
2603
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2604
- // buildConsentOtpWhatsApp - Helper for build consent otp whatsapp message body.
2605
- export { buildConsentOtpWhatsApp } from "./features/auth/server";
2606
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2607
- // consentOtpRateLimitRef - Shared export for consent otp rate limit ref.
2608
- export { consentOtpRateLimitRef } from "./features/auth/server";
2609
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2610
- // consentOtpRef - Shared export for consent otp ref.
2611
- export { consentOtpRef } from "./features/auth/server";
2612
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2613
2594
  // createPasswordResetToken - Helper for create password reset token.
2614
2595
  export { createPasswordResetToken } from "./features/auth/server";
2615
2596
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
@@ -2619,12 +2600,6 @@ export { createVerificationToken } from "./features/auth/server";
2619
2600
  // deleteToken - Helper for delete token.
2620
2601
  export { deleteToken } from "./features/auth/server";
2621
2602
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2622
- // enforceConsentOtpRateLimit - Shared export for enforce consent otp rate limit.
2623
- export { enforceConsentOtpRateLimit } from "./features/auth/server";
2624
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2625
- // generateOtpCode - Helper for generate otp code.
2626
- export { generateOtpCode } from "./features/auth/server";
2627
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2628
2603
  // generateToken - Helper for generate token.
2629
2604
  export { generateToken } from "./features/auth/server";
2630
2605
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
@@ -2643,24 +2618,12 @@ export { getUserProfile } from "./features/auth/server";
2643
2618
  // getUserSessions - Helper for get user sessions.
2644
2619
  export { getUserSessions } from "./features/auth/server";
2645
2620
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2646
- // hashOtp - Shared export for hash otp.
2647
- export { hashOtp } from "./features/auth/server";
2648
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2649
2621
  // issueRealtimeToken - Shared export for issue realtime token.
2650
2622
  export { issueRealtimeToken } from "./features/auth/server";
2651
2623
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2652
2624
  // markPasswordResetTokenAsUsed - Shared export for mark password reset token as used.
2653
2625
  export { markPasswordResetTokenAsUsed } from "./features/auth/server";
2654
2626
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2655
- // patchConsentOtp - Shared export for patch consent otp.
2656
- export { patchConsentOtp } from "./features/auth/server";
2657
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2658
- // readConsentOtp - Shared export for read consent otp.
2659
- export { readConsentOtp } from "./features/auth/server";
2660
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2661
- // saveConsentOtp - Shared export for save consent otp.
2662
- export { saveConsentOtp } from "./features/auth/server";
2663
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
2664
2627
  // updateUserProfile - Helper for update user profile.
2665
2628
  export { updateUserProfile } from "./features/auth/server";
2666
2629
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
@@ -3166,16 +3129,7 @@ export { FailedCheckoutRepository } from "./features/checkout/server";
3166
3129
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
3167
3130
  // failedCheckoutRepository - Shared export for failed checkout repository.
3168
3131
  export { failedCheckoutRepository } from "./features/checkout/server";
3169
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3170
- // grantCheckoutConsentViaSms - Shared export for grant checkout consent via sms.
3171
- export { grantCheckoutConsentViaSms } from "./features/checkout/server";
3172
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3173
- // sendCheckoutConsentOtp - Shared export for send checkout consent otp.
3174
- export { sendCheckoutConsentOtp } from "./features/checkout/server";
3175
- // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3176
- // verifyCheckoutConsentOtp - Shared export for verify checkout consent otp.
3177
- export { verifyCheckoutConsentOtp } from "./features/checkout/server";
3178
- // [SERVER-ONLY] Tier PP — high-value checkout OTP gate (distinct from the shipping-consent OTP above).
3132
+ // [SERVER-ONLY] Tier PP high-value checkout OTP gate.
3179
3133
  export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
3180
3134
  // ./features/checkout/schemas/index
3181
3135
  // [SCHEMA]-Schema / data-shape constant â€" Zod validator, default-value object, or Firestore collection/field name constant.
@@ -3396,6 +3350,8 @@ export { EventBanner } from "./features/events/index";
3396
3350
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3397
3351
  // EventCard - Component for event card.
3398
3352
  export { EventCard } from "./features/events/index";
3353
+ // RelatedEventsCarousel - Component for related events carousel (tag overlap).
3354
+ export { RelatedEventsCarousel } from "./features/events/index";
3399
3355
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3400
3356
  // EventDetailView - Component for event detail view.
3401
3357
  export { EventDetailView } from "./features/events/index";
@@ -3420,6 +3376,10 @@ export { EventStatusBadge } from "./features/events/index";
3420
3376
  export { EventRaffleWinnerView } from "./features/events/index";
3421
3377
  // SpinWheelView - Spin-the-wheel client component for spin-wheel events.
3422
3378
  export { SpinWheelView } from "./features/events/index";
3379
+ // EventRaffleEntryForm - Raffle entry form (prize hero + eligibility + optional message).
3380
+ export { EventRaffleEntryForm } from "./features/events/index";
3381
+ // EventOfferCard - Coupon code display + copy-to-clipboard for offer events.
3382
+ export { EventOfferCard } from "./features/events/index";
3423
3383
  // Lottery feature — client components
3424
3384
  export { LotterySlotGrid } from "./_internal/client/features/lottery/LotterySlotGrid";
3425
3385
  export { LotteryPullForm } from "./_internal/client/features/lottery/LotteryPullForm";
@@ -3525,12 +3485,18 @@ export { eventsGET } from "./features/events/server";
3525
3485
  // getEventLeaderboard - Helper for get event leaderboard.
3526
3486
  export { getEventLeaderboard } from "./features/events/server";
3527
3487
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3488
+ // getBugHunterLeaderboard - Ranks testers by confirmed-bug count.
3489
+ export { getBugHunterLeaderboard } from "./features/tester/server";
3490
+ // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3528
3491
  // getPublicEventById - Helper for get public event by id.
3529
3492
  export { getPublicEventById } from "./features/events/server";
3530
3493
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3531
3494
  // listPublicEvents - Helper for list public events.
3532
3495
  export { listPublicEvents } from "./features/events/server";
3533
3496
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3497
+ // getRelatedEvents - Helper for get related events (tag overlap).
3498
+ export { getRelatedEvents } from "./features/events/server";
3499
+ // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
3534
3500
  // updateEvent - Helper for update event.
3535
3501
  export { updateEvent } from "./features/events/server";
3536
3502
  // ./features/faq/index
@@ -4423,6 +4389,7 @@ export { MarketplacePrizeDrawCard } from "./features/products/index";
4423
4389
  export { PrizeDrawEntryActions } from "./features/products/index";
4424
4390
  // [CLIENT]-Theatrical reveal-mode prize-draw modal (SB4-I) — call POST /api/prize-draws/[id]/reveal and animate to the winning slot.
4425
4391
  export { PrizeRevealModal } from "./features/products/components/PrizeRevealModal";
4392
+ export { PrizeDrawWinnerMappingView } from "./features/products/components/PrizeDrawWinnerMappingView";
4426
4393
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4427
4394
  // ProductCard - Component for product card.
4428
4395
  export { ProductCard } from "./features/products/index";
@@ -5503,7 +5470,7 @@ export { useMediaQuery, useBreakpoint, useClickOutside, useKeyPress, useLongPres
5503
5470
  export { RoleGate, ProtectedRoute, SocialAuthButtons, AuthStatusPanel, LoginForm, RegisterForm, ForgotPasswordView, ResetPasswordView, VerifyEmailView, OAuthLoadingView, } from "./features/auth/index";
5504
5471
  // Missing cart and checkout feature components
5505
5472
  export { CartItemRow, CartDrawer, CartView, CartSummary, ShippingPicker } from "./features/cart/index";
5506
- export { CheckoutView, CheckoutAddressStep, CheckoutOtpModal, CheckoutSuccessView } from "./features/cart/index";
5473
+ export { CheckoutView, CheckoutAddressStep, CheckoutSuccessView } from "./features/cart/index";
5507
5474
  export { CheckoutStepper, useCheckout } from "./features/checkout/index";
5508
5475
  // PaymentGateway already exported from checkout types above
5509
5476
  // Missing account hooks
package/dist/jobs.d.ts CHANGED
@@ -20,7 +20,7 @@
20
20
  * listingProcessorHandler,
21
21
  * } from "@mohasinac/appkit/jobs";
22
22
  */
23
- export { couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onBidPlacedHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections, prizeRevealOpenHandler, prizeRevealCloseHandler, prizeRevealExpiryHandler, prizeRevealReminderHandler, bundleStockSyncHandler, onProductStockChangeHandler, triggerEventRaffleHandler, assignSpinPrizeHandler, draftPruneHandler, onSupportTicketCreateHandler, onSupportTicketUpdateHandler, onUserBanChangeHandler, onScamReportCreateHandler, onScamReportUpdateHandler, bindSchedule, bindDocumentWritten, bindDocumentCreated, bindDocumentUpdated, bindCallable, bindHttps, bindToFirebase, } from "./_internal/server/jobs/index.js";
23
+ export { couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onBidPlacedHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections, onPrizeDrawPaymentConfirmedHandler, prizeDrawSoldOutRevealHandler, prizeDrawExpiryRevealHandler, bundleStockSyncHandler, onProductStockChangeHandler, triggerEventRaffleHandler, assignSpinPrizeHandler, draftPruneHandler, onSupportTicketCreateHandler, onSupportTicketUpdateHandler, onUserBanChangeHandler, onScamReportCreateHandler, onScamReportUpdateHandler, bindSchedule, bindDocumentWritten, bindDocumentCreated, bindDocumentUpdated, bindCallable, bindHttps, bindToFirebase, } from "./_internal/server/jobs/index.js";
24
24
  export { defineFunction, mergeFunctionRegistries, bindAllFromRegistry, APPKIT_FUNCTIONS, APPKIT_FUNCTIONS_BY_NAME, } from "./_internal/server/functions/index.js";
25
25
  export { orderRepository, siteSettingsRepository } from "./repositories/index.js";
26
26
  export type { OrderDocument, OrderDocumentItem } from "./features/orders/index.js";
package/dist/jobs.js CHANGED
@@ -23,8 +23,8 @@
23
23
  export {
24
24
  // S4–S5: Job handlers (pure, framework-agnostic)
25
25
  couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onBidPlacedHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections,
26
- // SB1-L (S7-PrizeDraws)
27
- prizeRevealOpenHandler, prizeRevealCloseHandler, prizeRevealExpiryHandler, prizeRevealReminderHandler, bundleStockSyncHandler,
26
+ // SB1-L (S7-PrizeDraws) — prize-draw reveal redesigned to a fully-automatic model.
27
+ onPrizeDrawPaymentConfirmedHandler, prizeDrawSoldOutRevealHandler, prizeDrawExpiryRevealHandler, bundleStockSyncHandler,
28
28
  // SB-UNI-V — Firestore onWrite trigger for product stock changes.
29
29
  onProductStockChangeHandler, triggerEventRaffleHandler, assignSpinPrizeHandler,
30
30
  // SB-UNI-Y-1 — daily draft prune for store form drafts
@@ -15,6 +15,7 @@ export declare const DEFAULT_ROUTE_MAP: {
15
15
  readonly PUBLIC: {
16
16
  readonly FAQS: "/faqs";
17
17
  readonly FAQ_CATEGORY: (category: string) => string;
18
+ readonly BUG_HUNTERS: "/bug-hunters";
18
19
  readonly PROFILE: (userId: string) => string;
19
20
  readonly PRODUCTS: "/products";
20
21
  readonly PRODUCT_DETAIL: (slugOrId: string) => string;
@@ -375,6 +376,7 @@ export declare const ROUTES: {
375
376
  readonly PUBLIC: {
376
377
  readonly FAQS: "/faqs";
377
378
  readonly FAQ_CATEGORY: (category: string) => string;
379
+ readonly BUG_HUNTERS: "/bug-hunters";
378
380
  readonly PROFILE: (userId: string) => string;
379
381
  readonly PRODUCTS: "/products";
380
382
  readonly PRODUCT_DETAIL: (slugOrId: string) => string;
@@ -3,6 +3,7 @@ export const DEFAULT_ROUTE_MAP = {
3
3
  PUBLIC: {
4
4
  FAQS: "/faqs",
5
5
  FAQ_CATEGORY: (category) => `/faqs/${category}`,
6
+ BUG_HUNTERS: "/bug-hunters",
6
7
  PROFILE: (userId) => `/profile/${userId}`,
7
8
  PRODUCTS: "/products",
8
9
  PRODUCT_DETAIL: (slugOrId) => `/products/${slugOrId}`,
@@ -2271,8 +2271,6 @@ export declare const SCHEMAS: {
2271
2271
  totalPrice: import("zod").ZodEffects<import("zod").ZodNumber, number, number>;
2272
2272
  listingType: import("zod").ZodOptional<import("zod").ZodEnum<["standard", "auction", "pre-order", "prize-draw", "classified", "digital-code", "live"]>>;
2273
2273
  prizeRevealStatus: import("zod").ZodOptional<import("zod").ZodEnum<["pending", "open", "closed", "revealed"]>>;
2274
- prizeRevealDeadline: import("zod").ZodOptional<import("zod").ZodString>;
2275
- revealedItemNumber: import("zod").ZodOptional<import("zod").ZodNumber>;
2276
2274
  }, "strip", import("zod").ZodTypeAny, {
2277
2275
  productId: string;
2278
2276
  quantity: number;
@@ -2281,8 +2279,6 @@ export declare const SCHEMAS: {
2281
2279
  totalPrice: number;
2282
2280
  listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live" | undefined;
2283
2281
  prizeRevealStatus?: "closed" | "open" | "pending" | "revealed" | undefined;
2284
- prizeRevealDeadline?: string | undefined;
2285
- revealedItemNumber?: number | undefined;
2286
2282
  }, {
2287
2283
  productId: string;
2288
2284
  quantity: number;
@@ -2291,8 +2287,6 @@ export declare const SCHEMAS: {
2291
2287
  totalPrice: number;
2292
2288
  listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live" | undefined;
2293
2289
  prizeRevealStatus?: "closed" | "open" | "pending" | "revealed" | undefined;
2294
- prizeRevealDeadline?: string | undefined;
2295
- revealedItemNumber?: number | undefined;
2296
2290
  }>, "many">>;
2297
2291
  orderType: import("zod").ZodOptional<import("zod").ZodString>;
2298
2292
  imageUrls: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
@@ -2466,15 +2460,8 @@ export declare const SCHEMAS: {
2466
2460
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2467
2461
  }, import("zod").ZodTypeAny, "passthrough">;
2468
2462
  }>>;
2469
- prizeRevealDeadline: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodDate, import("zod").ZodString, import("zod").ZodObject<{
2470
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2471
- }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
2472
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2473
- }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
2474
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2475
- }, import("zod").ZodTypeAny, "passthrough">>]>>;
2476
- prizeRevealExpired: import("zod").ZodOptional<import("zod").ZodBoolean>;
2477
2463
  prizeDrawProductId: import("zod").ZodOptional<import("zod").ZodString>;
2464
+ prizeRevealMode: import("zod").ZodOptional<import("zod").ZodEnum<["instant", "scheduled"]>>;
2478
2465
  isNonRefundable: import("zod").ZodOptional<import("zod").ZodBoolean>;
2479
2466
  bundleId: import("zod").ZodOptional<import("zod").ZodString>;
2480
2467
  paymentBatchId: import("zod").ZodOptional<import("zod").ZodString>;
@@ -2598,6 +2585,7 @@ export declare const SCHEMAS: {
2598
2585
  paymentMethod?: string | undefined;
2599
2586
  notes?: string | undefined;
2600
2587
  storeName?: string | undefined;
2588
+ prizeRevealMode?: "instant" | "scheduled" | undefined;
2601
2589
  physicalLocation?: {
2602
2590
  zone: string;
2603
2591
  shelf: string;
@@ -2611,8 +2599,6 @@ export declare const SCHEMAS: {
2611
2599
  totalPrice: number;
2612
2600
  listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live" | undefined;
2613
2601
  prizeRevealStatus?: "closed" | "open" | "pending" | "revealed" | undefined;
2614
- prizeRevealDeadline?: string | undefined;
2615
- revealedItemNumber?: number | undefined;
2616
2602
  }[] | undefined;
2617
2603
  payoutStatus?: "paid" | "eligible" | "requested" | undefined;
2618
2604
  couponCode?: string | undefined;
@@ -2684,10 +2670,6 @@ export declare const SCHEMAS: {
2684
2670
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2685
2671
  }, import("zod").ZodTypeAny, "passthrough">;
2686
2672
  } | undefined;
2687
- prizeRevealDeadline?: string | Date | import("zod").objectOutputType<{
2688
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2689
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
2690
- prizeRevealExpired?: boolean | undefined;
2691
2673
  prizeDrawProductId?: string | undefined;
2692
2674
  isNonRefundable?: boolean | undefined;
2693
2675
  bundleId?: string | undefined;
@@ -2751,6 +2733,7 @@ export declare const SCHEMAS: {
2751
2733
  paymentMethod?: string | undefined;
2752
2734
  notes?: string | undefined;
2753
2735
  storeName?: string | undefined;
2736
+ prizeRevealMode?: "instant" | "scheduled" | undefined;
2754
2737
  physicalLocation?: {
2755
2738
  zone: string;
2756
2739
  shelf: string;
@@ -2764,8 +2747,6 @@ export declare const SCHEMAS: {
2764
2747
  totalPrice: number;
2765
2748
  listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "classified" | "digital-code" | "live" | undefined;
2766
2749
  prizeRevealStatus?: "closed" | "open" | "pending" | "revealed" | undefined;
2767
- prizeRevealDeadline?: string | undefined;
2768
- revealedItemNumber?: number | undefined;
2769
2750
  }[] | undefined;
2770
2751
  payoutStatus?: "paid" | "eligible" | "requested" | undefined;
2771
2752
  couponCode?: string | undefined;
@@ -2837,10 +2818,6 @@ export declare const SCHEMAS: {
2837
2818
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2838
2819
  }, import("zod").ZodTypeAny, "passthrough">;
2839
2820
  } | undefined;
2840
- prizeRevealDeadline?: string | Date | import("zod").objectInputType<{
2841
- toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2842
- }, import("zod").ZodTypeAny, "passthrough"> | undefined;
2843
- prizeRevealExpired?: boolean | undefined;
2844
2821
  prizeDrawProductId?: string | undefined;
2845
2822
  isNonRefundable?: boolean | undefined;
2846
2823
  bundleId?: string | undefined;
@@ -3095,6 +3072,7 @@ export declare const SCHEMAS: {
3095
3072
  id: import("zod").ZodString;
3096
3073
  productId: import("zod").ZodString;
3097
3074
  productTitle: import("zod").ZodString;
3075
+ listingType: import("zod").ZodOptional<import("zod").ZodString>;
3098
3076
  storeId: import("zod").ZodOptional<import("zod").ZodString>;
3099
3077
  storeName: import("zod").ZodOptional<import("zod").ZodString>;
3100
3078
  userId: import("zod").ZodString;
@@ -3184,6 +3162,7 @@ export declare const SCHEMAS: {
3184
3162
  } | undefined;
3185
3163
  storeId?: string | undefined;
3186
3164
  featured?: boolean | undefined;
3165
+ listingType?: string | undefined;
3187
3166
  images?: string[] | undefined;
3188
3167
  storeName?: string | undefined;
3189
3168
  userAvatar?: string | undefined;
@@ -3231,6 +3210,7 @@ export declare const SCHEMAS: {
3231
3210
  } | undefined;
3232
3211
  storeId?: string | undefined;
3233
3212
  featured?: boolean | undefined;
3213
+ listingType?: string | undefined;
3234
3214
  images?: string[] | undefined;
3235
3215
  storeName?: string | undefined;
3236
3216
  userAvatar?: string | undefined;
@@ -8,6 +8,9 @@
8
8
  * personas (Mock User 11, Mock User 14, Mock User 9), never the store's own seller
9
9
  * (user-tyson-blader owns store-beyblade-arena). Status: newest bid per auction is
10
10
  * "active", the rest "outbid". Bid IDs: bid-{productSlug}-{userName}-{YYYYMMDD}-{rand6}.
11
+ * L-Drago's ladder is deliberately 13 bids deep (cycling the 3 personas) so the
12
+ * auction detail page's paginated Bid History section (pageSize 5) and the /user/bids
13
+ * dashboard both have real multi-page data to exercise — see CollapsibleBidHistory.tsx.
11
14
  *
12
15
  * EXPORTS:
13
16
  * bidsSeedData — Array of bid documents, one set per seeded auction, counts matching
@@ -72,18 +75,27 @@ const _rawBidsSeedData = [
72
75
  currentBid: 3499,
73
76
  bidderIds: ["user-rohit-collector", "user-ananya-collector", "user-meera-bey"],
74
77
  }),
75
- // auction-beyblade-metal-lightning-l-drago — bidCount: 5, currentBid: 2299
78
+ // auction-beyblade-metal-lightning-l-drago — bidCount: 13, currentBid: 3199
79
+ // Deliberately deep ladder (see file header) to exercise Bid History pagination.
76
80
  ...buildLadder({
77
81
  productId: "auction-beyblade-metal-lightning-l-drago",
78
82
  productTitle: "Metal Fight Beyblade BB-99 Lightning L-Drago",
79
83
  startingBid: 1999,
80
- currentBid: 2299,
84
+ currentBid: 3199,
81
85
  bidderIds: [
82
86
  "user-meera-bey",
83
87
  "user-rohit-collector",
84
88
  "user-ananya-collector",
85
89
  "user-rohit-collector",
86
90
  "user-meera-bey",
91
+ "user-ananya-collector",
92
+ "user-rohit-collector",
93
+ "user-meera-bey",
94
+ "user-ananya-collector",
95
+ "user-rohit-collector",
96
+ "user-meera-bey",
97
+ "user-ananya-collector",
98
+ "user-rohit-collector",
87
99
  ],
88
100
  }),
89
101
  ];
@@ -275,7 +275,8 @@ export const blogPostsSeedData = [
275
275
  title: "10 Tips to Sell Faster on LetItRip",
276
276
  slug: "selling-tips-letitrip",
277
277
  excerpt: "From photography to pricing to descriptions — proven tactics to make your listings sell faster on LetItRip.",
278
- content: `<h2>1. Photograph Everything</h2><p>Front, back, edges, corners, holo pattern. Natural light. White background. Minimum 4 photos per listing.</p><h2>2. Price Competitively</h2><p>Check what similar items sold for on LetItRip in the last 30 days. Price 5–10% below the lowest active listing for a fast sale.</p><h2>3. Write Honest Descriptions</h2><p>State the exact condition. Mention every flaw. Buyers trust sellers who are upfront about imperfections — they'll come back.</p><h2>4. Respond to Offers Within 2 Hours</h2><p>Quick responses convert. Buyers often make offers to multiple sellers — the first response wins.</p><h2>5. Ship the Same Day</h2><p>Buyers who receive fast shipping leave 5-star reviews. 5-star reviews bring more buyers. It's a flywheel.</p><h2>6–10</h2><p>Use accurate category tags. Add a YouTube unboxing link. Offer bundle discounts. Cross-reference to your other listings. Keep your store description updated.</p>`,
278
+ content: `<h2>1. Photograph Everything</h2><p>Front, back, edges, corners, holo pattern. Natural light. White background. Minimum 4 photos per listing.</p><h2>2. Price Competitively</h2><p>Check what similar items sold for on LetItRip in the last 30 days. Price 5–10% below the lowest active listing for a fast sale.</p><h2>3. Write Honest Descriptions</h2><p>State the exact condition. Mention every flaw. Buyers trust sellers who are upfront about imperfections — they'll come back.</p><h2>4. Respond to Offers Within 2 Hours</h2><p>Quick responses convert. Buyers often make offers to multiple sellers — the first response wins.</p><h2>5. Ship the Same Day</h2><p>Buyers who receive fast shipping leave 5-star reviews. 5-star reviews bring more buyers. It's a flywheel.</p><h2>6–10</h2><p>Use accurate category tags. Add a YouTube unboxing link (see the video above). Offer bundle discounts. Cross-reference to your other listings. Keep your store description updated.</p>`,
279
+ youtubeId: "dQw4w9WgXcQ",
279
280
  category: "tips",
280
281
  tags: ["selling", "tips", "photography", "pricing", "seller-guide"],
281
282
  isFeatured: false,
@@ -245,6 +245,7 @@ const bundleRows = [
245
245
  productIds: ["product-beyblade-original-dranzer-s", "product-beyblade-original-driger-v", "product-beyblade-metal-storm-pegasus"],
246
246
  },
247
247
  bundleProductIds: ["product-beyblade-original-dranzer-s", "product-beyblade-original-driger-v", "product-beyblade-metal-storm-pegasus"],
248
+ bundleOriginalTotal: 4597, // 1499 + 1799 + 1299
248
249
  bundleStockStatus: "in_stock",
249
250
  display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-original-collectors-set-20260101/1200/900"), showInFooter: false },
250
251
  isActive: true,
@@ -277,6 +278,7 @@ const bundleRows = [
277
278
  productIds: ["product-beyblade-metal-storm-pegasus", "product-beyblade-metal-flame-sagittario", "product-beyblade-original-dranzer-s"],
278
279
  },
279
280
  bundleProductIds: ["product-beyblade-metal-storm-pegasus", "product-beyblade-metal-flame-sagittario", "product-beyblade-original-dranzer-s"],
281
+ bundleOriginalTotal: 3997, // 1299 + 1199 + 1499
280
282
  bundleStockStatus: "in_stock",
281
283
  display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-metal-fusion-duo-20260101/1200/900"), showInFooter: false },
282
284
  isActive: true,
@@ -303,12 +305,15 @@ const bundleRows = [
303
305
  description: "Valkyrie and Regalia Genesis — top-tier Burst-era attackers in one set.",
304
306
  categoryType: "bundle",
305
307
  bundleKind: "special",
306
- bundlePrice: 3799,
308
+ // Was 3799 — priced ABOVE the 999+1399+1199=3597 member total (no real
309
+ // discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
310
+ bundlePrice: 2899,
307
311
  bundleQueryRule: {
308
312
  type: "static",
309
313
  productIds: ["product-beyblade-burst-valkyrie", "product-beyblade-burst-regalia-genesis", "product-beyblade-metal-flame-sagittario"],
310
314
  },
311
315
  bundleProductIds: ["product-beyblade-burst-valkyrie", "product-beyblade-burst-regalia-genesis", "product-beyblade-metal-flame-sagittario"],
316
+ bundleOriginalTotal: 3597, // 999 + 1399 + 1199
312
317
  bundleStockStatus: "in_stock",
313
318
  display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-burst-battlers-pack-20260101/1200/900"), showInFooter: false },
314
319
  isActive: true,
@@ -341,6 +346,7 @@ const bundleRows = [
341
346
  productIds: ["product-beyblade-x-wizard-arrow", "product-beyblade-x-knife-shinobi", "product-beyblade-burst-valkyrie"],
342
347
  },
343
348
  bundleProductIds: ["product-beyblade-x-wizard-arrow", "product-beyblade-x-knife-shinobi", "product-beyblade-burst-valkyrie"],
349
+ bundleOriginalTotal: 2847, // 899 + 949 + 999
344
350
  bundleStockStatus: "in_stock",
345
351
  display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-x-series-starter-20260101/1200/900"), showInFooter: false },
346
352
  isActive: true,
@@ -367,7 +373,9 @@ const bundleRows = [
367
373
  description: "One top from every Beyblade generation — Original, Metal Fight, Burst, and X — the ultimate collector's starter pack.",
368
374
  categoryType: "bundle",
369
375
  bundleKind: "special",
370
- bundlePrice: 5999,
376
+ // Was 5999 — priced ABOVE the 1799+1299+999+899=4996 member total (no
377
+ // real discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
378
+ bundlePrice: 3999,
371
379
  bundleQueryRule: {
372
380
  type: "static",
373
381
  productIds: [
@@ -383,6 +391,7 @@ const bundleRows = [
383
391
  "product-beyblade-burst-valkyrie",
384
392
  "product-beyblade-x-wizard-arrow",
385
393
  ],
394
+ bundleOriginalTotal: 4996, // 1799 + 1299 + 999 + 899
386
395
  bundleStockStatus: "in_stock",
387
396
  display: { coverImage: seedExtMedia("https://picsum.photos/seed/bundle-every-generation-starter-pack-20260101/1200/900"), showInFooter: false },
388
397
  isActive: true,