@mohasinac/appkit 3.0.4 → 3.1.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 (320) hide show
  1. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +42 -0
  2. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +86 -0
  3. package/dist/_internal/client/features/lottery/LotteryAdminSlotView.d.ts +14 -0
  4. package/dist/_internal/client/features/lottery/LotteryAdminSlotView.js +46 -0
  5. package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +28 -0
  6. package/dist/_internal/client/features/lottery/LotteryDetailView.js +17 -0
  7. package/dist/_internal/client/features/lottery/LotteryEntriesView.d.ts +23 -0
  8. package/dist/_internal/client/features/lottery/LotteryEntriesView.js +58 -0
  9. package/dist/_internal/client/features/lottery/LotteryListView.d.ts +21 -0
  10. package/dist/_internal/client/features/lottery/LotteryListView.js +25 -0
  11. package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +19 -0
  12. package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -0
  13. package/dist/_internal/client/features/lottery/LotterySlotGrid.d.ts +13 -0
  14. package/dist/_internal/client/features/lottery/LotterySlotGrid.js +21 -0
  15. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.d.ts +28 -0
  16. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +18 -0
  17. package/dist/_internal/server/features/auctions/__tests__/service.test.d.ts +1 -0
  18. package/dist/_internal/server/features/auctions/__tests__/service.test.js +140 -0
  19. package/dist/_internal/server/features/auctions/data.d.ts +2 -4
  20. package/dist/_internal/server/features/auctions/data.js +3 -9
  21. package/dist/_internal/server/features/checkout/__tests__/actions.test.d.ts +1 -0
  22. package/dist/_internal/server/features/checkout/__tests__/actions.test.js +600 -0
  23. package/dist/_internal/server/features/classified/adapters.d.ts +2 -15
  24. package/dist/_internal/server/features/classified/adapters.js +2 -17
  25. package/dist/_internal/server/features/classified/data.d.ts +1 -6
  26. package/dist/_internal/server/features/classified/data.js +2 -10
  27. package/dist/_internal/server/features/digital-code/adapters.d.ts +2 -15
  28. package/dist/_internal/server/features/digital-code/adapters.js +2 -17
  29. package/dist/_internal/server/features/digital-code/data.d.ts +1 -6
  30. package/dist/_internal/server/features/digital-code/data.js +2 -10
  31. package/dist/_internal/server/features/live/adapters.d.ts +2 -15
  32. package/dist/_internal/server/features/live/adapters.js +2 -17
  33. package/dist/_internal/server/features/live/data.d.ts +1 -6
  34. package/dist/_internal/server/features/live/data.js +2 -10
  35. package/dist/_internal/server/features/lottery/actions.d.ts +43 -0
  36. package/dist/_internal/server/features/lottery/actions.js +243 -0
  37. package/dist/_internal/server/features/lottery/adapters.d.ts +9 -0
  38. package/dist/_internal/server/features/lottery/adapters.js +21 -0
  39. package/dist/_internal/server/features/lottery/data.d.ts +20 -0
  40. package/dist/_internal/server/features/lottery/data.js +41 -0
  41. package/dist/_internal/server/features/lottery/metadata.d.ts +6 -0
  42. package/dist/_internal/server/features/lottery/metadata.js +31 -0
  43. package/dist/_internal/server/features/pre-orders/data.d.ts +2 -4
  44. package/dist/_internal/server/features/pre-orders/data.js +3 -9
  45. package/dist/_internal/server/features/prize-draws/actions.d.ts +2 -0
  46. package/dist/_internal/server/features/prize-draws/actions.js +22 -0
  47. package/dist/_internal/server/features/prize-draws/data.d.ts +1 -17
  48. package/dist/_internal/server/features/prize-draws/data.js +2 -20
  49. package/dist/_internal/server/features/prize-draws/index.d.ts +3 -1
  50. package/dist/_internal/server/features/prize-draws/index.js +2 -0
  51. package/dist/_internal/server/features/prize-draws/service.d.ts +3 -0
  52. package/dist/_internal/server/features/prize-draws/service.js +19 -0
  53. package/dist/_internal/server/features/refunds/__tests__/actions.test.d.ts +1 -0
  54. package/dist/_internal/server/features/refunds/__tests__/actions.test.js +263 -0
  55. package/dist/_internal/server/features/shared/listing-adapters.d.ts +19 -0
  56. package/dist/_internal/server/features/shared/listing-adapters.js +20 -0
  57. package/dist/_internal/server/features/shared/listing-data-factory.d.ts +9 -0
  58. package/dist/_internal/server/features/shared/listing-data-factory.js +33 -0
  59. package/dist/_internal/server/features/stores/data.d.ts +3 -14
  60. package/dist/_internal/server/features/stores/data.js +6 -44
  61. package/dist/_internal/server/jobs/core/__tests__/auctionSettlement.test.d.ts +1 -0
  62. package/dist/_internal/server/jobs/core/__tests__/auctionSettlement.test.js +249 -0
  63. package/dist/_internal/server/jobs/core/__tests__/onBidPlaced.test.d.ts +1 -0
  64. package/dist/_internal/server/jobs/core/__tests__/onBidPlaced.test.js +201 -0
  65. package/dist/_internal/server/jobs/core/__tests__/onOrderCreate.test.d.ts +1 -0
  66. package/dist/_internal/server/jobs/core/__tests__/onOrderCreate.test.js +169 -0
  67. package/dist/_internal/server/jobs/core/__tests__/onOrderStatusChange.test.d.ts +1 -0
  68. package/dist/_internal/server/jobs/core/__tests__/onOrderStatusChange.test.js +148 -0
  69. package/dist/_internal/server/jobs/core/__tests__/onProductStockChange.test.d.ts +1 -0
  70. package/dist/_internal/server/jobs/core/__tests__/onProductStockChange.test.js +210 -0
  71. package/dist/_internal/server/jobs/core/__tests__/onReviewWrite.test.d.ts +1 -0
  72. package/dist/_internal/server/jobs/core/__tests__/onReviewWrite.test.js +190 -0
  73. package/dist/_internal/server/jobs/core/__tests__/onUserBanChange.test.d.ts +1 -0
  74. package/dist/_internal/server/jobs/core/__tests__/onUserBanChange.test.js +161 -0
  75. package/dist/_internal/server/jobs/core/__tests__/payoutBatch.test.d.ts +1 -0
  76. package/dist/_internal/server/jobs/core/__tests__/payoutBatch.test.js +302 -0
  77. package/dist/_internal/server/jobs/core/__tests__/triggerEventRaffle.test.d.ts +1 -0
  78. package/dist/_internal/server/jobs/core/__tests__/triggerEventRaffle.test.js +252 -0
  79. package/dist/_internal/server/jobs/core/__tests__/wrapJobHandler.test.d.ts +1 -0
  80. package/dist/_internal/server/jobs/core/__tests__/wrapJobHandler.test.js +129 -0
  81. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  82. package/dist/_internal/shared/actions/action-registry.js +46 -0
  83. package/dist/_internal/shared/features/cart/schema.d.ts +8 -8
  84. package/dist/_internal/shared/features/cart/schema.js +3 -0
  85. package/dist/_internal/shared/features/products/schema.d.ts +8 -8
  86. package/dist/_internal/shared/listing-types/_registry.js +2 -0
  87. package/dist/_internal/shared/listing-types/auction/schema.d.ts +3 -1
  88. package/dist/_internal/shared/listing-types/auction/schema.js +7 -1
  89. package/dist/_internal/shared/listing-types/classified/schema.d.ts +2 -1
  90. package/dist/_internal/shared/listing-types/classified/schema.js +3 -1
  91. package/dist/_internal/shared/listing-types/digital-code/schema.d.ts +3 -1
  92. package/dist/_internal/shared/listing-types/digital-code/schema.js +7 -1
  93. package/dist/_internal/shared/listing-types/live/schema.d.ts +2 -1
  94. package/dist/_internal/shared/listing-types/live/schema.js +3 -1
  95. package/dist/_internal/shared/listing-types/pre-order/schema.d.ts +3 -1
  96. package/dist/_internal/shared/listing-types/pre-order/schema.js +7 -1
  97. package/dist/_internal/shared/listing-types/prize-draw/schema.d.ts +3 -1
  98. package/dist/_internal/shared/listing-types/prize-draw/schema.js +13 -1
  99. package/dist/_internal/shared/listing-types/standard/schema.d.ts +2 -1
  100. package/dist/_internal/shared/listing-types/standard/schema.js +4 -1
  101. package/dist/_internal/shared/types/base-document.d.ts +15 -0
  102. package/dist/_internal/shared/types/base-document.js +1 -0
  103. package/dist/_internal/shared/types/index.d.ts +2 -0
  104. package/dist/_internal/shared/types/index.js +1 -0
  105. package/dist/client.d.ts +13 -4
  106. package/dist/client.js +11 -2
  107. package/dist/constants/api-endpoints.d.ts +12 -0
  108. package/dist/constants/api-endpoints.js +4 -0
  109. package/dist/constants/field-names.d.ts +5 -1
  110. package/dist/constants/field-names.js +5 -1
  111. package/dist/features/addresses/repository/__tests__/addresses.repository.test.d.ts +1 -0
  112. package/dist/features/addresses/repository/__tests__/addresses.repository.test.js +386 -0
  113. package/dist/features/addresses/schemas/firestore.d.ts +2 -4
  114. package/dist/features/admin/api/bids/route.d.ts +2 -2
  115. package/dist/features/admin/api/coupons/route.d.ts +2 -2
  116. package/dist/features/admin/api/products/route.d.ts +2 -2
  117. package/dist/features/admin/api/reviews/route.d.ts +2 -2
  118. package/dist/features/admin/components/AdminFulfillmentView.d.ts +6 -0
  119. package/dist/features/admin/components/AdminFulfillmentView.js +107 -0
  120. package/dist/features/admin/components/AdminProductEditorView.js +21 -9
  121. package/dist/features/admin/components/AdminProductsView.js +3 -0
  122. package/dist/features/admin/components/DataListingView.d.ts +1 -0
  123. package/dist/features/admin/components/index.d.ts +2 -0
  124. package/dist/features/admin/components/index.js +1 -0
  125. package/dist/features/admin/repository/__tests__/notification.repository.test.d.ts +1 -0
  126. package/dist/features/admin/repository/__tests__/notification.repository.test.js +356 -0
  127. package/dist/features/admin/repository/__tests__/site-settings.repository.test.d.ts +1 -0
  128. package/dist/features/admin/repository/__tests__/site-settings.repository.test.js +298 -0
  129. package/dist/features/admin/schemas/firestore.d.ts +3 -8
  130. package/dist/features/auctions/repository/__tests__/bid.repository.test.d.ts +1 -0
  131. package/dist/features/auctions/repository/__tests__/bid.repository.test.js +290 -0
  132. package/dist/features/auctions/schemas/firestore.d.ts +2 -4
  133. package/dist/features/auctions/schemas/index.d.ts +2 -2
  134. package/dist/features/auth/api/route.d.ts +2 -2
  135. package/dist/features/auth/repository/__tests__/session.repository.test.d.ts +1 -0
  136. package/dist/features/auth/repository/__tests__/session.repository.test.js +310 -0
  137. package/dist/features/auth/repository/__tests__/session.test.d.ts +1 -0
  138. package/dist/features/auth/repository/__tests__/session.test.js +146 -0
  139. package/dist/features/auth/repository/__tests__/sms-counter.repository.test.d.ts +1 -0
  140. package/dist/features/auth/repository/__tests__/sms-counter.repository.test.js +171 -0
  141. package/dist/features/auth/repository/__tests__/sms-counter.test.d.ts +1 -0
  142. package/dist/features/auth/repository/__tests__/sms-counter.test.js +88 -0
  143. package/dist/features/auth/repository/__tests__/token.repository.test.d.ts +1 -0
  144. package/dist/features/auth/repository/__tests__/token.repository.test.js +260 -0
  145. package/dist/features/auth/repository/__tests__/token.test.d.ts +1 -0
  146. package/dist/features/auth/repository/__tests__/token.test.js +140 -0
  147. package/dist/features/auth/repository/__tests__/user.repository.test.d.ts +1 -0
  148. package/dist/features/auth/repository/__tests__/user.repository.test.js +352 -0
  149. package/dist/features/auth/repository/__tests__/user.test.d.ts +1 -0
  150. package/dist/features/auth/repository/__tests__/user.test.js +226 -0
  151. package/dist/features/auth/repository/session.repository.js +10 -1
  152. package/dist/features/before-after/schemas/index.d.ts +2 -2
  153. package/dist/features/blog/schemas/firestore.d.ts +2 -4
  154. package/dist/features/blog/schemas/index.d.ts +4 -4
  155. package/dist/features/cart/repository/__tests__/cart.repository.test.d.ts +1 -0
  156. package/dist/features/cart/repository/__tests__/cart.repository.test.js +371 -0
  157. package/dist/features/cart/repository/cart.repository.js +2 -2
  158. package/dist/features/cart/schemas/firestore.d.ts +2 -4
  159. package/dist/features/categories/api/[id]/route.d.ts +4 -4
  160. package/dist/features/categories/api/route.d.ts +2 -2
  161. package/dist/features/categories/repository/__tests__/categories.repository.test.d.ts +1 -0
  162. package/dist/features/categories/repository/__tests__/categories.repository.test.js +813 -0
  163. package/dist/features/categories/schemas/firestore.d.ts +2 -4
  164. package/dist/features/categories/schemas/index.d.ts +4 -4
  165. package/dist/features/events/components/EventCard.js +1 -0
  166. package/dist/features/events/repository/__tests__/event.repository.test.d.ts +1 -0
  167. package/dist/features/events/repository/__tests__/event.repository.test.js +299 -0
  168. package/dist/features/events/schemas/firestore.d.ts +5 -4
  169. package/dist/features/events/schemas/index.d.ts +836 -16
  170. package/dist/features/events/schemas/index.js +80 -1
  171. package/dist/features/events/types/index.d.ts +4 -1
  172. package/dist/features/faq/repository/__tests__/faqs.repository.test.d.ts +1 -0
  173. package/dist/features/faq/repository/__tests__/faqs.repository.test.js +311 -0
  174. package/dist/features/faq/schemas/firestore.d.ts +2 -4
  175. package/dist/features/faq/schemas/index.d.ts +2 -2
  176. package/dist/features/grouped/schemas/index.d.ts +2 -2
  177. package/dist/features/history/repository/__tests__/user-history.repository.test.d.ts +1 -0
  178. package/dist/features/history/repository/__tests__/user-history.repository.test.js +180 -0
  179. package/dist/features/homepage/api/[id]/route.d.ts +4 -4
  180. package/dist/features/homepage/api/carousel/[id]/route.d.ts +4 -4
  181. package/dist/features/homepage/api/carousel/route.d.ts +2 -2
  182. package/dist/features/homepage/api/route.d.ts +2 -2
  183. package/dist/features/homepage/repository/__tests__/carousel.repository.test.d.ts +1 -0
  184. package/dist/features/homepage/repository/__tests__/carousel.repository.test.js +182 -0
  185. package/dist/features/homepage/repository/__tests__/homepage-sections.repository.test.d.ts +1 -0
  186. package/dist/features/homepage/repository/__tests__/homepage-sections.repository.test.js +185 -0
  187. package/dist/features/homepage/schemas/firestore.d.ts +4 -12
  188. package/dist/features/homepage/schemas/index.d.ts +2 -2
  189. package/dist/features/lottery/repository/lottery-entry.repository.d.ts +33 -0
  190. package/dist/features/lottery/repository/lottery-entry.repository.js +130 -0
  191. package/dist/features/lottery/schemas/firestore.d.ts +49 -0
  192. package/dist/features/lottery/schemas/firestore.js +25 -0
  193. package/dist/features/lottery/schemas/zod.d.ts +113 -0
  194. package/dist/features/lottery/schemas/zod.js +39 -0
  195. package/dist/features/lottery/types/index.d.ts +67 -0
  196. package/dist/features/lottery/types/index.js +55 -0
  197. package/dist/features/messages/repository/__tests__/conversations.repository.test.d.ts +1 -0
  198. package/dist/features/messages/repository/__tests__/conversations.repository.test.js +257 -0
  199. package/dist/features/messages/schemas/firestore.d.ts +2 -4
  200. package/dist/features/messages/schemas/index.d.ts +2 -2
  201. package/dist/features/orders/repository/__tests__/orders.repository.test.d.ts +1 -0
  202. package/dist/features/orders/repository/__tests__/orders.repository.test.js +211 -0
  203. package/dist/features/orders/repository/orders.repository.d.ts +5 -0
  204. package/dist/features/orders/repository/orders.repository.js +26 -0
  205. package/dist/features/orders/schemas/firestore.d.ts +9 -5
  206. package/dist/features/orders/schemas/firestore.js +3 -0
  207. package/dist/features/payments/repository/__tests__/payout.repository.test.d.ts +1 -0
  208. package/dist/features/payments/repository/__tests__/payout.repository.test.js +292 -0
  209. package/dist/features/payments/schemas/firestore.d.ts +2 -4
  210. package/dist/features/pre-orders/schemas/index.d.ts +2 -2
  211. package/dist/features/products/api/[id]/route.d.ts +4 -4
  212. package/dist/features/products/api/route.d.ts +2 -2
  213. package/dist/features/products/constants/action-defs.d.ts +16 -0
  214. package/dist/features/products/constants/action-defs.js +16 -0
  215. package/dist/features/products/constants/listing-tabs.d.ts +48 -0
  216. package/dist/features/products/constants/listing-tabs.js +12 -0
  217. package/dist/features/products/repository/__tests__/product-features.repository.test.d.ts +1 -0
  218. package/dist/features/products/repository/__tests__/product-features.repository.test.js +329 -0
  219. package/dist/features/products/repository/__tests__/products.repository.test.d.ts +1 -0
  220. package/dist/features/products/repository/__tests__/products.repository.test.js +607 -0
  221. package/dist/features/products/repository/products.repository.d.ts +37 -0
  222. package/dist/features/products/repository/products.repository.js +28 -1
  223. package/dist/features/products/schemas/firestore.d.ts +23 -7
  224. package/dist/features/products/schemas/firestore.js +2 -0
  225. package/dist/features/products/schemas/index.d.ts +18 -18
  226. package/dist/features/products/schemas/index.js +4 -2
  227. package/dist/features/products/types/index.d.ts +3 -1
  228. package/dist/features/promotions/repository/__tests__/claimed-coupons.repository.test.d.ts +1 -0
  229. package/dist/features/promotions/repository/__tests__/claimed-coupons.repository.test.js +219 -0
  230. package/dist/features/promotions/repository/__tests__/coupons.repository.test.d.ts +1 -0
  231. package/dist/features/promotions/repository/__tests__/coupons.repository.test.js +480 -0
  232. package/dist/features/promotions/schemas/firestore.d.ts +2 -4
  233. package/dist/features/promotions/schemas/index.d.ts +4 -4
  234. package/dist/features/reviews/api/[id]/route.d.ts +4 -4
  235. package/dist/features/reviews/api/route.d.ts +2 -2
  236. package/dist/features/reviews/repository/__tests__/reviews.repository.test.d.ts +1 -0
  237. package/dist/features/reviews/repository/__tests__/reviews.repository.test.js +327 -0
  238. package/dist/features/reviews/schemas/firestore.d.ts +2 -4
  239. package/dist/features/reviews/schemas/index.d.ts +2 -2
  240. package/dist/features/scams/repository/__tests__/scammer.repository.test.d.ts +1 -0
  241. package/dist/features/scams/repository/__tests__/scammer.repository.test.js +385 -0
  242. package/dist/features/scams/schemas/firestore.d.ts +2 -4
  243. package/dist/features/scams/schemas/index.d.ts +4 -4
  244. package/dist/features/search/repository/__tests__/search.repository.test.d.ts +1 -0
  245. package/dist/features/search/repository/__tests__/search.repository.test.js +369 -0
  246. package/dist/features/search/schemas/index.d.ts +2 -2
  247. package/dist/features/seller/api/coupons/route.d.ts +2 -2
  248. package/dist/features/seller/api/offers/route.d.ts +2 -2
  249. package/dist/features/seller/api/products/route.d.ts +2 -2
  250. package/dist/features/seller/api/store/route.d.ts +2 -2
  251. package/dist/features/seller/components/BarcodeField.d.ts +17 -0
  252. package/dist/features/seller/components/BarcodeField.js +30 -0
  253. package/dist/features/seller/components/FulfillmentView.d.ts +5 -0
  254. package/dist/features/seller/components/FulfillmentView.js +120 -0
  255. package/dist/features/seller/components/PrintCenterView.d.ts +3 -1
  256. package/dist/features/seller/components/PrintCenterView.js +52 -4
  257. package/dist/features/seller/components/SellerProductShell.d.ts +2 -0
  258. package/dist/features/seller/components/SellerProductShell.js +2 -1
  259. package/dist/features/seller/components/index.d.ts +4 -0
  260. package/dist/features/seller/components/index.js +2 -0
  261. package/dist/features/seller/repository/__tests__/offer.repository.test.d.ts +1 -0
  262. package/dist/features/seller/repository/__tests__/offer.repository.test.js +458 -0
  263. package/dist/features/seller/schemas/index.d.ts +2 -2
  264. package/dist/features/store-extensions/schemas/firestore.d.ts +12 -44
  265. package/dist/features/stores/components/StoreClassifiedsListing.d.ts +5 -0
  266. package/dist/features/stores/components/StoreClassifiedsListing.js +48 -0
  267. package/dist/features/stores/components/StoreClassifiedsPageView.d.ts +4 -0
  268. package/dist/features/stores/components/StoreClassifiedsPageView.js +20 -0
  269. package/dist/features/stores/components/StoreDetailLayoutView.js +23 -2
  270. package/dist/features/stores/components/StoreDigitalCodesListing.d.ts +5 -0
  271. package/dist/features/stores/components/StoreDigitalCodesListing.js +48 -0
  272. package/dist/features/stores/components/StoreDigitalCodesPageView.d.ts +4 -0
  273. package/dist/features/stores/components/StoreDigitalCodesPageView.js +20 -0
  274. package/dist/features/stores/components/StoreLiveItemsListing.d.ts +5 -0
  275. package/dist/features/stores/components/StoreLiveItemsListing.js +48 -0
  276. package/dist/features/stores/components/StoreLiveItemsPageView.d.ts +4 -0
  277. package/dist/features/stores/components/StoreLiveItemsPageView.js +20 -0
  278. package/dist/features/stores/components/index.d.ts +9 -0
  279. package/dist/features/stores/components/index.js +3 -0
  280. package/dist/features/stores/repository/__tests__/store.repository.test.d.ts +1 -0
  281. package/dist/features/stores/repository/__tests__/store.repository.test.js +261 -0
  282. package/dist/features/stores/schemas/firestore.d.ts +2 -4
  283. package/dist/features/stores/schemas/index.d.ts +4 -4
  284. package/dist/features/support/repository/__tests__/support.repository.test.d.ts +1 -0
  285. package/dist/features/support/repository/__tests__/support.repository.test.js +312 -0
  286. package/dist/features/support/schemas/firestore.d.ts +2 -4
  287. package/dist/features/support/schemas/index.d.ts +2 -2
  288. package/dist/features/wishlist/repository/__tests__/user-wishlist.repository.test.d.ts +1 -0
  289. package/dist/features/wishlist/repository/__tests__/user-wishlist.repository.test.js +139 -0
  290. package/dist/index.d.ts +14 -0
  291. package/dist/index.js +17 -0
  292. package/dist/next/api/routeHandler.d.ts +1 -1
  293. package/dist/next/routing/route-map.d.ts +24 -0
  294. package/dist/next/routing/route-map.js +11 -0
  295. package/dist/repositories/index.d.ts +1 -0
  296. package/dist/repositories/index.js +2 -0
  297. package/dist/schemas/registry.d.ts +24 -24
  298. package/dist/security/index.d.ts +1 -1
  299. package/dist/security/index.js +1 -1
  300. package/dist/security/pii-schemas.d.ts +2 -0
  301. package/dist/security/pii-schemas.js +6 -0
  302. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  303. package/dist/seed/events-seed-data.js +85 -2
  304. package/dist/seed/grouped-listings-seed-data.d.ts +5 -2
  305. package/dist/seed/index.d.ts +1 -0
  306. package/dist/seed/index.js +1 -0
  307. package/dist/seed/lottery-entries-seed-data.d.ts +2 -0
  308. package/dist/seed/lottery-entries-seed-data.js +108 -0
  309. package/dist/seed/manifest.js +1 -0
  310. package/dist/seed/products-preorders-seed-data.d.ts +5 -2
  311. package/dist/seed/products-standard-seed-data.js +8 -0
  312. package/dist/server-entry.d.ts +3 -0
  313. package/dist/server-entry.js +3 -0
  314. package/dist/server.d.ts +10 -4
  315. package/dist/server.js +6 -0
  316. package/dist/styles.css +1 -1
  317. package/dist/tailwind-utilities.css +1 -1
  318. package/dist/utils/id-generators.d.ts +8 -0
  319. package/dist/utils/id-generators.js +14 -0
  320. package/package.json +2 -1
@@ -0,0 +1,327 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { makeMockDb, makeSnap, makeQuerySnap } from "../../../../../tests/helpers/mock-firestore";
3
+ const { db, mockDocRef, mockCollection, mockQuery } = makeMockDb();
4
+ vi.mock("../../../../providers/db-firebase/admin", () => ({
5
+ getAdminDb: () => db,
6
+ }));
7
+ vi.mock("../../../../providers/db-firebase", async (importOriginal) => {
8
+ const actual = await importOriginal();
9
+ return {
10
+ ...actual,
11
+ prepareForFirestore: (d) => d,
12
+ };
13
+ });
14
+ vi.mock("../../../../security", () => ({
15
+ encryptPiiFields: (d) => d,
16
+ decryptPiiFields: (d) => d,
17
+ addPiiIndices: (d) => d,
18
+ REVIEW_PII_FIELDS: ["userName", "userEmail"],
19
+ REVIEW_PII_INDEX_MAP: {},
20
+ }));
21
+ vi.mock("../../../../errors/normalize", () => ({
22
+ normalizeError: vi.fn(),
23
+ }));
24
+ import { ReviewRepository } from "../reviews.repository";
25
+ const repo = new ReviewRepository();
26
+ function makeReviewDoc(overrides = {}) {
27
+ return {
28
+ id: "review-charizard-ravi-20260101",
29
+ productId: "product-charizard",
30
+ productTitle: "Charizard PSA9",
31
+ userId: "user-ravi",
32
+ userName: "Ravi Kumar",
33
+ storeId: "store-pokemon-palace",
34
+ rating: 5,
35
+ title: "Amazing card!",
36
+ body: "Pristine condition.",
37
+ status: "approved",
38
+ helpfulCount: 0,
39
+ reportCount: 0,
40
+ verified: true,
41
+ featured: false,
42
+ createdAt: new Date(),
43
+ updatedAt: new Date(),
44
+ ...overrides,
45
+ };
46
+ }
47
+ function makeQueryDocSnaps(ratings, statusOverride = "approved") {
48
+ return ratings.map((rating, i) => ({
49
+ id: `review-${i}`,
50
+ data: makeReviewDoc({ id: `review-${i}`, rating, status: statusOverride }),
51
+ }));
52
+ }
53
+ beforeEach(() => {
54
+ vi.clearAllMocks();
55
+ db.collection.mockReturnValue(mockCollection);
56
+ mockCollection.doc.mockReturnValue(mockDocRef);
57
+ mockCollection.where.mockReturnValue(mockQuery);
58
+ mockQuery.where.mockReturnValue(mockQuery);
59
+ mockQuery.orderBy.mockReturnValue(mockQuery);
60
+ mockQuery.limit.mockReturnValue(mockQuery);
61
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
62
+ mockDocRef.get.mockResolvedValue(makeSnap(null));
63
+ mockDocRef.set.mockResolvedValue(undefined);
64
+ mockDocRef.update.mockResolvedValue(undefined);
65
+ });
66
+ // ---------------------------------------------------------------------------
67
+ // create
68
+ // ---------------------------------------------------------------------------
69
+ describe("ReviewRepository.create", () => {
70
+ it("creates review with status: pending", async () => {
71
+ const input = {
72
+ productId: "product-charizard",
73
+ productTitle: "Charizard PSA9",
74
+ userId: "user-ravi",
75
+ userName: "Ravi Kumar",
76
+ storeId: "store-pokemon",
77
+ rating: 5,
78
+ title: "Great!",
79
+ body: "Excellent.",
80
+ images: [],
81
+ };
82
+ const result = await repo.create(input);
83
+ expect(result.status).toBe("pending");
84
+ });
85
+ it("starts helpfulCount at 0 and reportCount at 0", async () => {
86
+ const result = await repo.create({
87
+ productId: "p-1",
88
+ productTitle: "Hot Wheels",
89
+ userId: "user-1",
90
+ userName: "Arun",
91
+ storeId: "store-1",
92
+ rating: 4,
93
+ title: "Good",
94
+ body: "Nice toy",
95
+ images: [],
96
+ });
97
+ expect(result.helpfulCount).toBe(0);
98
+ expect(result.reportCount).toBe(0);
99
+ });
100
+ it("sets verified: false by default", async () => {
101
+ const result = await repo.create({
102
+ productId: "p-1",
103
+ productTitle: "T",
104
+ userId: "u-1",
105
+ userName: "User",
106
+ storeId: "s-1",
107
+ rating: 3,
108
+ title: "T",
109
+ body: "B",
110
+ images: [],
111
+ });
112
+ expect(result.verified).toBe(false);
113
+ });
114
+ it("persists the review to Firestore", async () => {
115
+ await repo.create({
116
+ productId: "p-1",
117
+ productTitle: "Product",
118
+ userId: "u-1",
119
+ userName: "User",
120
+ storeId: "s-1",
121
+ rating: 5,
122
+ title: "T",
123
+ body: "B",
124
+ images: [],
125
+ });
126
+ expect(mockDocRef.set).toHaveBeenCalledOnce();
127
+ });
128
+ });
129
+ // ---------------------------------------------------------------------------
130
+ // approve
131
+ // ---------------------------------------------------------------------------
132
+ describe("ReviewRepository.approve", () => {
133
+ it("sets status: approved", async () => {
134
+ const review = makeReviewDoc({ status: "pending" });
135
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
136
+ await repo.approve("review-1", "mod-1");
137
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ status: "approved" }));
138
+ });
139
+ it("stores moderatorId on the review", async () => {
140
+ const review = makeReviewDoc({ status: "pending" });
141
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
142
+ await repo.approve("review-1", "mod-admin-1");
143
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ moderatorId: "mod-admin-1" }));
144
+ });
145
+ it("sets approvedAt timestamp", async () => {
146
+ const review = makeReviewDoc({ status: "pending" });
147
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
148
+ await repo.approve("review-1", "mod-1");
149
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ approvedAt: expect.any(Date) }));
150
+ });
151
+ it("stores optional moderatorNote when provided", async () => {
152
+ const review = makeReviewDoc({ status: "pending" });
153
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
154
+ await repo.approve("review-1", "mod-1", "Looks good");
155
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ moderatorNote: "Looks good" }));
156
+ });
157
+ });
158
+ // ---------------------------------------------------------------------------
159
+ // reject
160
+ // ---------------------------------------------------------------------------
161
+ describe("ReviewRepository.reject", () => {
162
+ it("sets status: rejected", async () => {
163
+ const review = makeReviewDoc({ status: "pending" });
164
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
165
+ await repo.reject("review-1", "mod-1", "Spam content");
166
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ status: "rejected" }));
167
+ });
168
+ it("stores rejectionReason", async () => {
169
+ const review = makeReviewDoc({ status: "pending" });
170
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
171
+ await repo.reject("review-1", "mod-1", "Inappropriate language");
172
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ rejectionReason: "Inappropriate language" }));
173
+ });
174
+ it("sets rejectedAt timestamp", async () => {
175
+ const review = makeReviewDoc({ status: "pending" });
176
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
177
+ await repo.reject("review-1", "mod-1", "reason");
178
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ rejectedAt: expect.any(Date) }));
179
+ });
180
+ });
181
+ // ---------------------------------------------------------------------------
182
+ // incrementHelpful
183
+ // ---------------------------------------------------------------------------
184
+ describe("ReviewRepository.incrementHelpful", () => {
185
+ it("increments helpfulCount by exactly 1", async () => {
186
+ const review = makeReviewDoc({ helpfulCount: 4 });
187
+ mockDocRef.get.mockResolvedValue(makeSnap(review, review.id));
188
+ await repo.incrementHelpful("review-1");
189
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ helpfulCount: 5 }));
190
+ });
191
+ it("no-op when review is not found", async () => {
192
+ mockDocRef.get.mockResolvedValue(makeSnap(null));
193
+ await repo.incrementHelpful("review-ghost");
194
+ expect(mockDocRef.update).not.toHaveBeenCalled();
195
+ });
196
+ });
197
+ // ---------------------------------------------------------------------------
198
+ // getAverageRating
199
+ // ---------------------------------------------------------------------------
200
+ describe("ReviewRepository.getAverageRating", () => {
201
+ it("computes average from approved reviews", async () => {
202
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([5, 3, 4])));
203
+ const avg = await repo.getAverageRating("product-charizard");
204
+ expect(avg).toBeCloseTo(4.0, 5);
205
+ });
206
+ it("single review → returns that rating exactly", async () => {
207
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([3])));
208
+ const avg = await repo.getAverageRating("product-1");
209
+ expect(avg).toBe(3);
210
+ });
211
+ it("no reviews → returns 0", async () => {
212
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
213
+ const avg = await repo.getAverageRating("product-empty");
214
+ expect(avg).toBe(0);
215
+ });
216
+ });
217
+ // ---------------------------------------------------------------------------
218
+ // getRatingDistribution
219
+ // ---------------------------------------------------------------------------
220
+ describe("ReviewRepository.getRatingDistribution", () => {
221
+ it("counts each rating bucket correctly", async () => {
222
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([5, 5, 3])));
223
+ const dist = await repo.getRatingDistribution("product-1");
224
+ expect(dist[5]).toBe(2);
225
+ expect(dist[3]).toBe(1);
226
+ });
227
+ it("returns zeros for buckets with no reviews", async () => {
228
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([5, 5, 3])));
229
+ const dist = await repo.getRatingDistribution("product-1");
230
+ expect(dist[1]).toBe(0);
231
+ expect(dist[2]).toBe(0);
232
+ expect(dist[4]).toBe(0);
233
+ });
234
+ it("all 5 ratings present", async () => {
235
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([1, 2, 3, 4, 5])));
236
+ const dist = await repo.getRatingDistribution("product-1");
237
+ expect(dist[1]).toBe(1);
238
+ expect(dist[2]).toBe(1);
239
+ expect(dist[3]).toBe(1);
240
+ expect(dist[4]).toBe(1);
241
+ expect(dist[5]).toBe(1);
242
+ });
243
+ it("no reviews → all buckets are 0", async () => {
244
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
245
+ const dist = await repo.getRatingDistribution("product-empty");
246
+ expect(Object.values(dist).every((v) => v === 0)).toBe(true);
247
+ });
248
+ });
249
+ // ---------------------------------------------------------------------------
250
+ // getApprovedRatingAggregate
251
+ // ---------------------------------------------------------------------------
252
+ describe("ReviewRepository.getApprovedRatingAggregate", () => {
253
+ it("returns count and avgRating rounded to 1 decimal", async () => {
254
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([5, 4, 3])));
255
+ const agg = await repo.getApprovedRatingAggregate("product-1");
256
+ expect(agg.count).toBe(3);
257
+ expect(agg.avgRating).toBe(4.0);
258
+ });
259
+ it("avgRating correctly rounds to 1 decimal (3.333... → 3.3)", async () => {
260
+ mockQuery.get.mockResolvedValue(makeQuerySnap(makeQueryDocSnaps([4, 3, 3])));
261
+ const agg = await repo.getApprovedRatingAggregate("product-1");
262
+ expect(agg.avgRating).toBe(3.3);
263
+ });
264
+ it("no reviews → count=0, avgRating=0", async () => {
265
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
266
+ const agg = await repo.getApprovedRatingAggregate("product-none");
267
+ expect(agg).toEqual({ count: 0, avgRating: 0 });
268
+ });
269
+ });
270
+ // ---------------------------------------------------------------------------
271
+ // findApprovedByProduct
272
+ // ---------------------------------------------------------------------------
273
+ describe("ReviewRepository.findApprovedByProduct", () => {
274
+ it("queries by productId AND status=approved", async () => {
275
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
276
+ await repo.findApprovedByProduct("product-1");
277
+ expect(mockCollection.where).toHaveBeenCalledWith("productId", "==", "product-1");
278
+ expect(mockQuery.where).toHaveBeenCalledWith("status", "==", "approved");
279
+ });
280
+ it("orders results by createdAt descending", async () => {
281
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
282
+ await repo.findApprovedByProduct("product-1");
283
+ expect(mockQuery.orderBy).toHaveBeenCalledWith("createdAt", "desc");
284
+ });
285
+ it("does NOT return pending reviews", async () => {
286
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
287
+ const results = await repo.findApprovedByProduct("product-1");
288
+ expect(results).toHaveLength(0);
289
+ });
290
+ });
291
+ // ---------------------------------------------------------------------------
292
+ // findPending
293
+ // ---------------------------------------------------------------------------
294
+ describe("ReviewRepository.findPending", () => {
295
+ it("queries by status=pending", async () => {
296
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
297
+ await repo.findPending();
298
+ expect(mockCollection.where).toHaveBeenCalledWith("status", "==", "pending");
299
+ });
300
+ it("returns only pending reviews", async () => {
301
+ const pending = makeReviewDoc({ status: "pending" });
302
+ mockQuery.get.mockResolvedValue(makeQuerySnap([{ id: pending.id, data: pending }]));
303
+ const results = await repo.findPending();
304
+ expect(results).toHaveLength(1);
305
+ });
306
+ });
307
+ // ---------------------------------------------------------------------------
308
+ // findFeatured
309
+ // ---------------------------------------------------------------------------
310
+ describe("ReviewRepository.findFeatured", () => {
311
+ it("queries by featured=true AND status=approved", async () => {
312
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
313
+ await repo.findFeatured();
314
+ expect(mockCollection.where).toHaveBeenCalledWith("featured", "==", true);
315
+ expect(mockQuery.where).toHaveBeenCalledWith("status", "==", "approved");
316
+ });
317
+ it("applies default limit of 18", async () => {
318
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
319
+ await repo.findFeatured();
320
+ expect(mockQuery.limit).toHaveBeenCalledWith(18);
321
+ });
322
+ it("applies custom limit when provided", async () => {
323
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
324
+ await repo.findFeatured(6);
325
+ expect(mockQuery.limit).toHaveBeenCalledWith(6);
326
+ });
327
+ });
@@ -2,6 +2,7 @@
2
2
  * Reviews Firestore Document Types & Constants
3
3
  */
4
4
  import type { ReviewStatus } from "../types";
5
+ import type { BaseDocument } from "../../../_internal/shared/types/base-document";
5
6
  /** Runtime-accessible review status values — use instead of bare string literals. */
6
7
  export declare const ReviewStatusValues: {
7
8
  readonly PENDING: "pending";
@@ -15,8 +16,7 @@ export interface ReviewVideoField {
15
16
  trimStart?: number;
16
17
  trimEnd?: number;
17
18
  }
18
- export interface ReviewDocument {
19
- id: string;
19
+ export interface ReviewDocument extends BaseDocument {
20
20
  productId: string;
21
21
  productTitle: string;
22
22
  storeId?: string;
@@ -44,8 +44,6 @@ export interface ReviewDocument {
44
44
  isAnonymous?: boolean;
45
45
  sellerReply?: string;
46
46
  sellerRepliedAt?: Date;
47
- createdAt: Date;
48
- updatedAt: Date;
49
47
  approvedAt?: Date;
50
48
  rejectedAt?: Date;
51
49
  }
@@ -103,8 +103,8 @@ export declare const reviewFirestoreSchema: z.ZodObject<{
103
103
  createdAt: string | Date | z.objectOutputType<{
104
104
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
105
105
  }, z.ZodTypeAny, "passthrough">;
106
- id: string;
107
106
  title: string;
107
+ id: string;
108
108
  updatedAt: string | Date | z.objectOutputType<{
109
109
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
110
110
  }, z.ZodTypeAny, "passthrough">;
@@ -150,8 +150,8 @@ export declare const reviewFirestoreSchema: z.ZodObject<{
150
150
  createdAt: string | Date | z.objectInputType<{
151
151
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
152
152
  }, z.ZodTypeAny, "passthrough">;
153
- id: string;
154
153
  title: string;
154
+ id: string;
155
155
  updatedAt: string | Date | z.objectInputType<{
156
156
  toDate: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodDate>;
157
157
  }, z.ZodTypeAny, "passthrough">;