@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
@@ -128,6 +128,7 @@ export function AdminProductsView({ children, ...props }) {
128
128
  isPromoted: Boolean(item.isPromoted),
129
129
  isOnSale: Boolean(item.isOnSale),
130
130
  isSold: Boolean(item.isSold),
131
+ barcodeId: typeof item.barcodeId === "string" ? item.barcodeId : undefined,
131
132
  };
132
133
  return overrides[id] ? { ...base, ...overrides[id] } : base;
133
134
  }),
@@ -217,11 +218,13 @@ export function AdminProductsView({ children, ...props }) {
217
218
  },
218
219
  { name: "featured", label: "Featured", type: "toggle" },
219
220
  { name: "isPromoted", label: "Promoted", type: "toggle" },
221
+ { name: "barcodeId", label: "Barcode ID", type: "text" },
220
222
  ],
221
223
  defaultValues: {
222
224
  status: row.status,
223
225
  featured: row.featured,
224
226
  isPromoted: row.isPromoted,
227
+ barcodeId: String(row.barcodeId ?? ""),
225
228
  },
226
229
  onSubmit: (vals) => handleQuickEdit(row.id, vals),
227
230
  submitLabel: "Save",
@@ -38,6 +38,7 @@ export interface AdminListingScaffoldRow {
38
38
  isPromoted?: boolean;
39
39
  isOnSale?: boolean;
40
40
  isSold?: boolean;
41
+ barcodeId?: string;
41
42
  }
42
43
  export interface ListingSortOption {
43
44
  value: string;
@@ -153,3 +153,5 @@ export { AdminScammersView } from "./AdminScammersView";
153
153
  export type { AdminScammersViewProps } from "./AdminScammersView";
154
154
  export { AdminScammerEditorView } from "./AdminScammerEditorView";
155
155
  export type { AdminScammerEditorViewProps } from "./AdminScammerEditorView";
156
+ export { AdminFulfillmentView } from "./AdminFulfillmentView";
157
+ export type { AdminFulfillmentViewProps } from "./AdminFulfillmentView";
@@ -80,3 +80,4 @@ export { AdminSupportTicketsView } from "./AdminSupportTicketsView";
80
80
  export { AdminSupportTicketDetailView } from "./AdminSupportTicketDetailView";
81
81
  export { AdminScammersView } from "./AdminScammersView";
82
82
  export { AdminScammerEditorView } from "./AdminScammerEditorView";
83
+ export { AdminFulfillmentView } from "./AdminFulfillmentView";
@@ -0,0 +1,356 @@
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, mockBatch } = makeMockDb();
4
+ const { mockGetFirestoreCount } = vi.hoisted(() => ({
5
+ mockGetFirestoreCount: vi.fn().mockResolvedValue(0),
6
+ }));
7
+ vi.mock("../../../../providers/db-firebase/admin", () => ({
8
+ getAdminDb: () => db,
9
+ }));
10
+ vi.mock("../../../../providers/db-firebase", async (importOriginal) => {
11
+ const actual = await importOriginal();
12
+ return {
13
+ ...actual,
14
+ prepareForFirestore: (d) => d,
15
+ getFirestoreCount: mockGetFirestoreCount,
16
+ };
17
+ });
18
+ vi.mock("../../../../contracts/field-ops", () => ({
19
+ serverTimestamp: () => new Date(),
20
+ increment: (n) => n,
21
+ arrayUnion: (...args) => args,
22
+ arrayRemove: (...args) => args,
23
+ deleteField: () => null,
24
+ registerFieldOps: vi.fn(),
25
+ }));
26
+ vi.mock("../../../../errors/normalize", () => ({
27
+ normalizeError: vi.fn(),
28
+ }));
29
+ vi.mock("../../../../monitoring", () => ({
30
+ serverLogger: { info: vi.fn(), warn: vi.fn(), error: vi.fn() },
31
+ }));
32
+ import { NotificationRepository } from "../notification.repository";
33
+ const repo = new NotificationRepository();
34
+ function makeNotifDoc(overrides = {}) {
35
+ return {
36
+ id: "notif-order-shipped-001",
37
+ userId: "user-ravi",
38
+ type: "order_shipped",
39
+ title: "Your order has shipped!",
40
+ body: "Order #123 is on its way.",
41
+ isRead: false,
42
+ entityId: "order-3-20260627-abc123",
43
+ entityType: "order",
44
+ createdAt: new Date(),
45
+ updatedAt: new Date(),
46
+ ...overrides,
47
+ };
48
+ }
49
+ beforeEach(() => {
50
+ vi.clearAllMocks();
51
+ mockGetFirestoreCount.mockResolvedValue(0);
52
+ db.collection.mockReturnValue(mockCollection);
53
+ mockCollection.doc.mockReturnValue(mockDocRef);
54
+ mockCollection.where.mockReturnValue(mockQuery);
55
+ mockQuery.where.mockReturnValue(mockQuery);
56
+ mockQuery.orderBy.mockReturnValue(mockQuery);
57
+ mockQuery.limit.mockReturnValue(mockQuery);
58
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
59
+ mockDocRef.get.mockResolvedValue(makeSnap(makeNotifDoc(), "notif-1"));
60
+ mockDocRef.set.mockResolvedValue(undefined);
61
+ mockDocRef.update.mockResolvedValue(undefined);
62
+ mockDocRef.delete.mockResolvedValue(undefined);
63
+ db.batch.mockReturnValue(mockBatch);
64
+ });
65
+ // ---------------------------------------------------------------------------
66
+ // create
67
+ // ---------------------------------------------------------------------------
68
+ describe("NotificationRepository.create", () => {
69
+ it("sets isRead: false on new notifications", async () => {
70
+ await repo.create({
71
+ userId: "user-ravi",
72
+ type: "order_shipped",
73
+ priority: "normal",
74
+ title: "Shipped!",
75
+ message: "Your order shipped.",
76
+ });
77
+ const setArg = mockDocRef.set.mock.calls[0][0];
78
+ expect(setArg.isRead).toBe(false);
79
+ });
80
+ it("stores all required fields", async () => {
81
+ await repo.create({
82
+ userId: "user-ravi",
83
+ type: "order_placed",
84
+ priority: "normal",
85
+ title: "Order placed",
86
+ message: "Thanks for your order.",
87
+ });
88
+ const setArg = mockDocRef.set.mock.calls[0][0];
89
+ expect(setArg.userId).toBe("user-ravi");
90
+ expect(setArg.type).toBe("order_placed");
91
+ expect(setArg.title).toBe("Order placed");
92
+ });
93
+ it("sets createdAt and updatedAt timestamps", async () => {
94
+ await repo.create({ userId: "user-1", type: "general", priority: "normal", title: "Hi", message: "Hello" });
95
+ const setArg = mockDocRef.set.mock.calls[0][0];
96
+ expect(setArg.createdAt).toBeInstanceOf(Date);
97
+ expect(setArg.updatedAt).toBeInstanceOf(Date);
98
+ });
99
+ it("uses collection.doc() with no args (auto-ID)", async () => {
100
+ await repo.create({ userId: "user-1", type: "general", priority: "normal", title: "T", message: "B" });
101
+ // doc() is called with no argument for auto-generated IDs
102
+ expect(mockCollection.doc).toHaveBeenCalledWith();
103
+ });
104
+ it("returns the created notification with id", async () => {
105
+ mockDocRef.id = "notif-auto-123";
106
+ const result = await repo.create({
107
+ userId: "user-ravi",
108
+ type: "bid_won",
109
+ priority: "normal",
110
+ title: "You won!",
111
+ message: "Congratulations.",
112
+ });
113
+ expect(result.id).toBe("notif-auto-123");
114
+ expect(result.isRead).toBe(false);
115
+ });
116
+ });
117
+ // ---------------------------------------------------------------------------
118
+ // markAsRead
119
+ // ---------------------------------------------------------------------------
120
+ describe("NotificationRepository.markAsRead", () => {
121
+ it("sets isRead: true on the notification", async () => {
122
+ await repo.markAsRead("notif-1");
123
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ isRead: true }));
124
+ });
125
+ it("sets readAt timestamp", async () => {
126
+ await repo.markAsRead("notif-1");
127
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ readAt: expect.any(Date) }));
128
+ });
129
+ it("sets updatedAt timestamp", async () => {
130
+ await repo.markAsRead("notif-1");
131
+ expect(mockDocRef.update).toHaveBeenCalledWith(expect.objectContaining({ updatedAt: expect.any(Date) }));
132
+ });
133
+ it("calls doc(id) to target the correct notification", async () => {
134
+ await repo.markAsRead("notif-abc");
135
+ expect(mockCollection.doc).toHaveBeenCalledWith("notif-abc");
136
+ });
137
+ });
138
+ // ---------------------------------------------------------------------------
139
+ // markAllAsRead
140
+ // ---------------------------------------------------------------------------
141
+ describe("NotificationRepository.markAllAsRead", () => {
142
+ it("queries unread notifications for the user", async () => {
143
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
144
+ await repo.markAllAsRead("user-ravi");
145
+ expect(mockCollection.where).toHaveBeenCalledWith(expect.stringContaining("userId"), "==", "user-ravi");
146
+ expect(mockQuery.where).toHaveBeenCalledWith(expect.stringContaining("isRead"), "==", false);
147
+ });
148
+ it("batch-updates all unread notifications to isRead: true", async () => {
149
+ const notifs = [
150
+ makeNotifDoc({ id: "n-1", isRead: false }),
151
+ makeNotifDoc({ id: "n-2", isRead: false }),
152
+ ];
153
+ mockQuery.get.mockResolvedValue(makeQuerySnap(notifs.map((n) => ({ id: n.id, data: n }))));
154
+ await repo.markAllAsRead("user-ravi");
155
+ expect(mockBatch.update).toHaveBeenCalledTimes(2);
156
+ const calls = mockBatch.update.mock.calls;
157
+ expect(calls.every((c) => c[1].isRead === true)).toBe(true);
158
+ expect(mockBatch.commit).toHaveBeenCalledOnce();
159
+ });
160
+ it("returns 0 and does not batch-update when no unread notifications", async () => {
161
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
162
+ const count = await repo.markAllAsRead("user-ravi");
163
+ expect(count).toBe(0);
164
+ expect(mockBatch.update).not.toHaveBeenCalled();
165
+ });
166
+ it("returns the count of notifications marked", async () => {
167
+ const notifs = [
168
+ makeNotifDoc({ id: "n-1", isRead: false }),
169
+ makeNotifDoc({ id: "n-2", isRead: false }),
170
+ makeNotifDoc({ id: "n-3", isRead: false }),
171
+ ];
172
+ mockQuery.get.mockResolvedValue(makeQuerySnap(notifs.map((n) => ({ id: n.id, data: n }))));
173
+ const count = await repo.markAllAsRead("user-ravi");
174
+ expect(count).toBe(3);
175
+ });
176
+ });
177
+ // ---------------------------------------------------------------------------
178
+ // getUnreadCount
179
+ // ---------------------------------------------------------------------------
180
+ describe("NotificationRepository.getUnreadCount", () => {
181
+ it("returns the count of unread notifications for userId", async () => {
182
+ mockGetFirestoreCount.mockResolvedValue(7);
183
+ const count = await repo.getUnreadCount("user-ravi");
184
+ expect(count).toBe(7);
185
+ });
186
+ it("returns 0 when no unread notifications", async () => {
187
+ mockGetFirestoreCount.mockResolvedValue(0);
188
+ const count = await repo.getUnreadCount("user-ravi");
189
+ expect(count).toBe(0);
190
+ });
191
+ it("returns 0 on error (graceful fallback)", async () => {
192
+ mockGetFirestoreCount.mockRejectedValue(new Error("Firestore error"));
193
+ const count = await repo.getUnreadCount("user-ravi");
194
+ expect(count).toBe(0);
195
+ });
196
+ it("queries by userId and isRead == false", async () => {
197
+ mockGetFirestoreCount.mockResolvedValue(3);
198
+ await repo.getUnreadCount("user-xyz");
199
+ expect(mockCollection.where).toHaveBeenCalledWith(expect.stringContaining("userId"), "==", "user-xyz");
200
+ expect(mockQuery.where).toHaveBeenCalledWith(expect.stringContaining("isRead"), "==", false);
201
+ });
202
+ });
203
+ // ---------------------------------------------------------------------------
204
+ // deleteAllForUser
205
+ // ---------------------------------------------------------------------------
206
+ describe("NotificationRepository.deleteAllForUser", () => {
207
+ it("batch-deletes all notifications for the user", async () => {
208
+ const notifs = [
209
+ makeNotifDoc({ id: "n-1" }),
210
+ makeNotifDoc({ id: "n-2" }),
211
+ ];
212
+ mockQuery.get.mockResolvedValue(makeQuerySnap(notifs.map((n) => ({ id: n.id, data: n }))));
213
+ await repo.deleteAllForUser("user-ravi");
214
+ expect(mockBatch.delete).toHaveBeenCalledTimes(2);
215
+ expect(mockBatch.commit).toHaveBeenCalledOnce();
216
+ });
217
+ it("returns 0 and skips batch when no notifications exist", async () => {
218
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
219
+ const count = await repo.deleteAllForUser("user-nobody");
220
+ expect(count).toBe(0);
221
+ expect(mockBatch.delete).not.toHaveBeenCalled();
222
+ });
223
+ it("returns count of deleted notifications", async () => {
224
+ const notifs = [
225
+ makeNotifDoc({ id: "n-1" }),
226
+ makeNotifDoc({ id: "n-2" }),
227
+ makeNotifDoc({ id: "n-3" }),
228
+ ];
229
+ mockQuery.get.mockResolvedValue(makeQuerySnap(notifs.map((n) => ({ id: n.id, data: n }))));
230
+ const count = await repo.deleteAllForUser("user-ravi");
231
+ expect(count).toBe(3);
232
+ });
233
+ });
234
+ // ---------------------------------------------------------------------------
235
+ // delete (single)
236
+ // ---------------------------------------------------------------------------
237
+ describe("NotificationRepository.delete", () => {
238
+ it("calls doc(id).delete()", async () => {
239
+ await repo.delete("notif-abc");
240
+ expect(mockCollection.doc).toHaveBeenCalledWith("notif-abc");
241
+ expect(mockDocRef.delete).toHaveBeenCalledOnce();
242
+ });
243
+ });
244
+ // ---------------------------------------------------------------------------
245
+ // getOldReadRefs
246
+ // ---------------------------------------------------------------------------
247
+ describe("NotificationRepository.getOldReadRefs", () => {
248
+ it("queries isRead == true and createdAt < cutoff date", async () => {
249
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
250
+ await repo.getOldReadRefs(30);
251
+ expect(mockCollection.where).toHaveBeenCalledWith(expect.stringContaining("isRead"), "==", true);
252
+ expect(mockQuery.where).toHaveBeenCalledWith(expect.stringContaining("createdAt"), "<", expect.any(Date));
253
+ });
254
+ it("cutoff date is approximately ttlDays ago", async () => {
255
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
256
+ const before = Date.now();
257
+ await repo.getOldReadRefs(30);
258
+ const cutoffArg = mockQuery.where.mock.calls.find((c) => c[0].includes("createdAt"))?.[2];
259
+ expect(cutoffArg).toBeInstanceOf(Date);
260
+ const expectedCutoff = before - 30 * 24 * 60 * 60 * 1000;
261
+ expect(cutoffArg.getTime()).toBeGreaterThanOrEqual(expectedCutoff - 1000);
262
+ expect(cutoffArg.getTime()).toBeLessThanOrEqual(expectedCutoff + 1000);
263
+ });
264
+ it("limits to 500 documents", async () => {
265
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
266
+ await repo.getOldReadRefs();
267
+ expect(mockQuery.limit).toHaveBeenCalledWith(500);
268
+ });
269
+ it("does NOT include unread notifications (isRead==false docs excluded)", async () => {
270
+ // The query explicitly filters isRead==true — unread docs are never fetched
271
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
272
+ await repo.getOldReadRefs(30);
273
+ const whereCalls = mockCollection.where.mock.calls;
274
+ const isReadFilter = whereCalls.find((c) => c[0].includes("isRead"));
275
+ expect(isReadFilter?.[1]).toBe("==");
276
+ expect(isReadFilter?.[2]).toBe(true);
277
+ });
278
+ it("returns document refs", async () => {
279
+ const notif = makeNotifDoc({ id: "notif-old", isRead: true });
280
+ mockQuery.get.mockResolvedValue(makeQuerySnap([{ id: notif.id, data: notif }]));
281
+ const refs = await repo.getOldReadRefs(30);
282
+ expect(refs).toHaveLength(1);
283
+ });
284
+ });
285
+ // ---------------------------------------------------------------------------
286
+ // createInBatch
287
+ // ---------------------------------------------------------------------------
288
+ describe("NotificationRepository.createInBatch", () => {
289
+ it("stages notification via batch.create (does not commit)", () => {
290
+ const mockExternalBatch = {
291
+ create: vi.fn(),
292
+ update: vi.fn(),
293
+ delete: vi.fn(),
294
+ commit: vi.fn().mockResolvedValue(undefined),
295
+ };
296
+ repo.createInBatch(mockExternalBatch, {
297
+ userId: "user-ravi",
298
+ type: "order_shipped",
299
+ priority: "normal",
300
+ title: "Shipped!",
301
+ message: "On its way.",
302
+ });
303
+ expect(mockExternalBatch.create).toHaveBeenCalledOnce();
304
+ expect(mockExternalBatch.commit).not.toHaveBeenCalled();
305
+ });
306
+ it("sets isRead: false in the batched notification", () => {
307
+ const mockExternalBatch = { create: vi.fn(), update: vi.fn(), delete: vi.fn(), commit: vi.fn() };
308
+ repo.createInBatch(mockExternalBatch, {
309
+ userId: "user-ravi",
310
+ type: "general",
311
+ priority: "normal",
312
+ title: "Hi",
313
+ message: "Hello",
314
+ });
315
+ const createArg = mockExternalBatch.create.mock.calls[0][1];
316
+ expect(createArg.isRead).toBe(false);
317
+ });
318
+ it("returns a document reference synchronously", () => {
319
+ const mockExternalBatch = { create: vi.fn(), update: vi.fn(), delete: vi.fn(), commit: vi.fn() };
320
+ const ref = repo.createInBatch(mockExternalBatch, {
321
+ userId: "user-1",
322
+ type: "general",
323
+ priority: "normal",
324
+ title: "T",
325
+ message: "B",
326
+ });
327
+ expect(ref).toBeDefined();
328
+ expect(ref.id).toBeDefined();
329
+ });
330
+ });
331
+ // ---------------------------------------------------------------------------
332
+ // findByUser
333
+ // ---------------------------------------------------------------------------
334
+ describe("NotificationRepository.findByUser", () => {
335
+ it("returns notifications for the given userId", async () => {
336
+ const notif = makeNotifDoc({ userId: "user-ravi" });
337
+ mockQuery.get.mockResolvedValue(makeQuerySnap([{ id: notif.id, data: notif }]));
338
+ const results = await repo.findByUser("user-ravi");
339
+ expect(results).toHaveLength(1);
340
+ });
341
+ it("orders by createdAt descending (newest first)", async () => {
342
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
343
+ await repo.findByUser("user-ravi");
344
+ expect(mockQuery.orderBy).toHaveBeenCalledWith(expect.stringContaining("createdAt"), "desc");
345
+ });
346
+ it("applies default limit of 20", async () => {
347
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
348
+ await repo.findByUser("user-ravi");
349
+ expect(mockQuery.limit).toHaveBeenCalledWith(20);
350
+ });
351
+ it("applies custom limit when provided", async () => {
352
+ mockQuery.get.mockResolvedValue(makeQuerySnap([]));
353
+ await repo.findByUser("user-ravi", 5);
354
+ expect(mockQuery.limit).toHaveBeenCalledWith(5);
355
+ });
356
+ });