@mohasinac/appkit 2.6.3 → 2.6.4

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 (606) hide show
  1. package/dist/_internal/server/features/account/data.js +2 -2
  2. package/dist/_internal/server/features/bundles/data.d.ts +26 -6
  3. package/dist/_internal/server/features/bundles/data.js +41 -6
  4. package/dist/_internal/server/features/bundles/index.d.ts +3 -2
  5. package/dist/_internal/server/features/bundles/index.js +4 -2
  6. package/dist/_internal/server/features/bundles/metadata.d.ts +20 -0
  7. package/dist/_internal/server/features/bundles/metadata.js +46 -0
  8. package/dist/_internal/server/features/bundles/og.d.ts +38 -0
  9. package/dist/_internal/server/features/bundles/og.js +122 -0
  10. package/dist/_internal/server/features/checkout/actions.js +192 -133
  11. package/dist/_internal/server/features/checkout/bundle-expansion.d.ts +57 -0
  12. package/dist/_internal/server/features/checkout/bundle-expansion.js +70 -0
  13. package/dist/_internal/server/features/checkout/prize-bundle-gates.d.ts +5 -15
  14. package/dist/_internal/server/features/checkout/prize-bundle-gates.js +5 -21
  15. package/dist/_internal/server/features/media/contextGuards.js +15 -1
  16. package/dist/_internal/server/features/payouts/actions.d.ts +19 -0
  17. package/dist/_internal/server/features/payouts/actions.js +38 -0
  18. package/dist/_internal/server/features/products/data.js +1 -2
  19. package/dist/_internal/server/features/raffle/actions.d.ts +11 -0
  20. package/dist/_internal/server/features/raffle/actions.js +31 -0
  21. package/dist/_internal/server/features/refunds/actions.d.ts +31 -0
  22. package/dist/_internal/server/features/refunds/actions.js +77 -0
  23. package/dist/_internal/server/jobs/core/adminAnalytics.d.ts +28 -0
  24. package/dist/_internal/server/jobs/core/adminAnalytics.js +98 -0
  25. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +19 -0
  26. package/dist/_internal/server/jobs/core/assignSpinPrize.js +81 -0
  27. package/dist/_internal/server/jobs/core/auctionSettlement.d.ts +2 -0
  28. package/dist/_internal/server/jobs/core/auctionSettlement.js +70 -0
  29. package/dist/_internal/server/jobs/core/autoPayoutEligibility.d.ts +2 -0
  30. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +109 -0
  31. package/dist/_internal/server/jobs/core/bundleStockSync.d.ts +10 -0
  32. package/dist/_internal/server/jobs/core/bundleStockSync.js +71 -0
  33. package/dist/_internal/server/jobs/core/cartPrune.d.ts +2 -0
  34. package/dist/_internal/server/jobs/core/cartPrune.js +13 -0
  35. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.d.ts +2 -0
  36. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +45 -0
  37. package/dist/_internal/server/jobs/core/countersReconcile.d.ts +2 -0
  38. package/dist/_internal/server/jobs/core/countersReconcile.js +107 -0
  39. package/dist/_internal/server/jobs/core/couponExpiry.d.ts +2 -0
  40. package/dist/_internal/server/jobs/core/couponExpiry.js +13 -0
  41. package/dist/_internal/server/jobs/core/dailyDataCleanup.d.ts +2 -0
  42. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +20 -0
  43. package/dist/_internal/server/jobs/core/index.d.ts +44 -0
  44. package/dist/_internal/server/jobs/core/index.js +47 -0
  45. package/dist/_internal/server/jobs/core/listingProcessor.d.ts +30 -0
  46. package/dist/_internal/server/jobs/core/listingProcessor.js +138 -0
  47. package/dist/_internal/server/jobs/core/mediaTmpCleanup.d.ts +14 -0
  48. package/dist/_internal/server/jobs/core/mediaTmpCleanup.js +68 -0
  49. package/dist/_internal/server/jobs/core/notificationPrune.d.ts +2 -0
  50. package/dist/_internal/server/jobs/core/notificationPrune.js +13 -0
  51. package/dist/_internal/server/jobs/core/offerExpiry.d.ts +2 -0
  52. package/dist/_internal/server/jobs/core/offerExpiry.js +50 -0
  53. package/dist/_internal/server/jobs/core/onBidPlaced.d.ts +15 -0
  54. package/dist/_internal/server/jobs/core/onBidPlaced.js +59 -0
  55. package/dist/_internal/server/jobs/core/onCategoryWrite.d.ts +14 -0
  56. package/dist/_internal/server/jobs/core/onCategoryWrite.js +134 -0
  57. package/dist/_internal/server/jobs/core/onOrderCreate.d.ts +18 -0
  58. package/dist/_internal/server/jobs/core/onOrderCreate.js +78 -0
  59. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +19 -0
  60. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +139 -0
  61. package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +23 -0
  62. package/dist/_internal/server/jobs/core/onProductStockChange.js +130 -0
  63. package/dist/_internal/server/jobs/core/onProductWrite.d.ts +12 -0
  64. package/dist/_internal/server/jobs/core/onProductWrite.js +94 -0
  65. package/dist/_internal/server/jobs/core/onReviewWrite.d.ts +7 -0
  66. package/dist/_internal/server/jobs/core/onReviewWrite.js +49 -0
  67. package/dist/_internal/server/jobs/core/onStoreWrite.d.ts +12 -0
  68. package/dist/_internal/server/jobs/core/onStoreWrite.js +7 -0
  69. package/dist/_internal/server/jobs/core/payoutBatch.d.ts +8 -0
  70. package/dist/_internal/server/jobs/core/payoutBatch.js +102 -0
  71. package/dist/_internal/server/jobs/core/pendingOrderTimeout.d.ts +2 -0
  72. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +27 -0
  73. package/dist/_internal/server/jobs/core/positionsReconcile.d.ts +7 -0
  74. package/dist/_internal/server/jobs/core/positionsReconcile.js +87 -0
  75. package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +2 -0
  76. package/dist/_internal/server/jobs/core/prizeRevealClose.js +22 -0
  77. package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +2 -0
  78. package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +50 -0
  79. package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +2 -0
  80. package/dist/_internal/server/jobs/core/prizeRevealOpen.js +56 -0
  81. package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +2 -0
  82. package/dist/_internal/server/jobs/core/prizeRevealReminder.js +38 -0
  83. package/dist/_internal/server/jobs/core/productStatsSync.d.ts +8 -0
  84. package/dist/_internal/server/jobs/core/productStatsSync.js +36 -0
  85. package/dist/_internal/server/jobs/core/promotions.d.ts +12 -0
  86. package/dist/_internal/server/jobs/core/promotions.js +43 -0
  87. package/dist/_internal/server/jobs/core/storeAnalytics.d.ts +30 -0
  88. package/dist/_internal/server/jobs/core/storeAnalytics.js +109 -0
  89. package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +19 -0
  90. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +86 -0
  91. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.d.ts +6 -0
  92. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +85 -0
  93. package/dist/_internal/server/jobs/handlers/adminAnalytics.d.ts +2 -26
  94. package/dist/_internal/server/jobs/handlers/adminAnalytics.js +2 -98
  95. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +1 -22
  96. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +2 -86
  97. package/dist/_internal/server/jobs/handlers/auctionSettlement.js +2 -70
  98. package/dist/_internal/server/jobs/handlers/autoPayoutEligibility.js +2 -110
  99. package/dist/_internal/server/jobs/handlers/bundleStockSync.d.ts +0 -16
  100. package/dist/_internal/server/jobs/handlers/bundleStockSync.js +2 -80
  101. package/dist/_internal/server/jobs/handlers/cartPrune.js +2 -13
  102. package/dist/_internal/server/jobs/handlers/cleanupRtdbEvents.js +2 -45
  103. package/dist/_internal/server/jobs/handlers/countersReconcile.js +2 -109
  104. package/dist/_internal/server/jobs/handlers/couponExpiry.js +2 -13
  105. package/dist/_internal/server/jobs/handlers/dailyDataCleanup.js +2 -20
  106. package/dist/_internal/server/jobs/handlers/listingProcessor.d.ts +3 -28
  107. package/dist/_internal/server/jobs/handlers/listingProcessor.js +3 -138
  108. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.d.ts +0 -12
  109. package/dist/_internal/server/jobs/handlers/mediaTmpCleanup.js +2 -69
  110. package/dist/_internal/server/jobs/handlers/notificationPrune.js +2 -13
  111. package/dist/_internal/server/jobs/handlers/offerExpiry.js +2 -50
  112. package/dist/_internal/server/jobs/handlers/onBidPlaced.d.ts +1 -10
  113. package/dist/_internal/server/jobs/handlers/onBidPlaced.js +2 -56
  114. package/dist/_internal/server/jobs/handlers/onCategoryWrite.d.ts +1 -8
  115. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +6 -134
  116. package/dist/_internal/server/jobs/handlers/onOrderCreate.d.ts +1 -12
  117. package/dist/_internal/server/jobs/handlers/onOrderCreate.js +2 -76
  118. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.d.ts +1 -12
  119. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +2 -139
  120. package/dist/_internal/server/jobs/handlers/onProductStockChange.d.ts +0 -13
  121. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +7 -134
  122. package/dist/_internal/server/jobs/handlers/onProductWrite.d.ts +1 -6
  123. package/dist/_internal/server/jobs/handlers/onProductWrite.js +6 -106
  124. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +2 -49
  125. package/dist/_internal/server/jobs/handlers/onStoreWrite.d.ts +1 -8
  126. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +7 -8
  127. package/dist/_internal/server/jobs/handlers/payoutBatch.d.ts +0 -9
  128. package/dist/_internal/server/jobs/handlers/payoutBatch.js +2 -104
  129. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.d.ts +0 -6
  130. package/dist/_internal/server/jobs/handlers/pendingOrderTimeout.js +2 -33
  131. package/dist/_internal/server/jobs/handlers/positionsReconcile.d.ts +0 -5
  132. package/dist/_internal/server/jobs/handlers/positionsReconcile.js +2 -87
  133. package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -7
  134. package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +2 -29
  135. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -8
  136. package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +2 -58
  137. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -8
  138. package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +2 -65
  139. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -7
  140. package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +2 -45
  141. package/dist/_internal/server/jobs/handlers/productStatsSync.d.ts +0 -6
  142. package/dist/_internal/server/jobs/handlers/productStatsSync.js +2 -36
  143. package/dist/_internal/server/jobs/handlers/promotions.d.ts +2 -10
  144. package/dist/_internal/server/jobs/handlers/promotions.js +2 -43
  145. package/dist/_internal/server/jobs/handlers/storeAnalytics.d.ts +2 -28
  146. package/dist/_internal/server/jobs/handlers/storeAnalytics.js +2 -109
  147. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +1 -28
  148. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +2 -94
  149. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.d.ts +0 -6
  150. package/dist/_internal/server/jobs/handlers/weeklyPayoutEligibility.js +2 -87
  151. package/dist/_internal/server/jobs/index.d.ts +1 -0
  152. package/dist/_internal/server/jobs/index.js +1 -0
  153. package/dist/_internal/server/jobs/runtime/adapters/firebase.js +21 -0
  154. package/dist/_internal/shared/actions/action-registry.d.ts +84 -0
  155. package/dist/_internal/shared/actions/action-registry.js +160 -0
  156. package/dist/_internal/shared/checkout/rules/_defaults.d.ts +3 -0
  157. package/dist/_internal/shared/checkout/rules/_defaults.js +22 -0
  158. package/dist/_internal/shared/checkout/rules/_limits.d.ts +19 -0
  159. package/dist/_internal/shared/checkout/rules/_limits.js +19 -0
  160. package/dist/_internal/shared/checkout/rules/_registry.d.ts +44 -0
  161. package/dist/_internal/shared/checkout/rules/_registry.js +87 -0
  162. package/dist/_internal/shared/checkout/rules/auction.rule.d.ts +2 -0
  163. package/dist/_internal/shared/checkout/rules/auction.rule.js +10 -0
  164. package/dist/_internal/shared/checkout/rules/bundle.rule.d.ts +11 -0
  165. package/dist/_internal/shared/checkout/rules/bundle.rule.js +6 -0
  166. package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -0
  167. package/dist/_internal/shared/checkout/rules/classified.rule.js +9 -0
  168. package/dist/_internal/shared/checkout/rules/digital-code.rule.d.ts +8 -0
  169. package/dist/_internal/shared/checkout/rules/digital-code.rule.js +6 -0
  170. package/dist/_internal/shared/checkout/rules/index.d.ts +12 -0
  171. package/dist/_internal/shared/checkout/rules/index.js +12 -0
  172. package/dist/_internal/shared/checkout/rules/live.rule.d.ts +10 -0
  173. package/dist/_internal/shared/checkout/rules/live.rule.js +6 -0
  174. package/dist/_internal/shared/checkout/rules/offer.rule.d.ts +2 -0
  175. package/dist/_internal/shared/checkout/rules/offer.rule.js +9 -0
  176. package/dist/_internal/shared/checkout/rules/preorder.rule.d.ts +2 -0
  177. package/dist/_internal/shared/checkout/rules/preorder.rule.js +28 -0
  178. package/dist/_internal/shared/checkout/rules/prize-draw.rule.d.ts +2 -0
  179. package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +65 -0
  180. package/dist/_internal/shared/checkout/rules/standard.rule.d.ts +2 -0
  181. package/dist/_internal/shared/checkout/rules/standard.rule.js +5 -0
  182. package/dist/_internal/shared/checkout/rules/types.d.ts +125 -0
  183. package/dist/_internal/shared/checkout/rules/types.js +13 -0
  184. package/dist/_internal/shared/features/cart/schema.d.ts +6 -6
  185. package/dist/_internal/shared/features/categories/bundle-copy.d.ts +123 -0
  186. package/dist/_internal/shared/features/categories/bundle-copy.js +134 -0
  187. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +318 -0
  188. package/dist/_internal/shared/features/categories/bundle-schemas.js +55 -0
  189. package/dist/_internal/shared/features/orders/refund-copy.d.ts +36 -0
  190. package/dist/_internal/shared/features/orders/refund-copy.js +40 -0
  191. package/dist/_internal/shared/features/orders/schema.d.ts +4 -4
  192. package/dist/_internal/shared/features/products/schema.d.ts +8 -8
  193. package/dist/_internal/shared/listing-types/_registry.d.ts +27 -0
  194. package/dist/_internal/shared/listing-types/_registry.js +8 -0
  195. package/dist/_internal/shared/listing-types/action-tracker.d.ts +41 -0
  196. package/dist/_internal/shared/listing-types/action-tracker.js +70 -0
  197. package/dist/_internal/shared/listing-types/capabilities.js +25 -0
  198. package/dist/_internal/shared/listing-types/cart-shipping.d.ts +37 -0
  199. package/dist/_internal/shared/listing-types/cart-shipping.js +46 -0
  200. package/dist/_internal/shared/listing-types/classified/config.d.ts +7 -0
  201. package/dist/_internal/shared/listing-types/classified/config.js +8 -0
  202. package/dist/_internal/shared/listing-types/classified/ctas.d.ts +1 -0
  203. package/dist/_internal/shared/listing-types/classified/ctas.js +3 -0
  204. package/dist/_internal/shared/listing-types/classified/og.d.ts +1 -0
  205. package/dist/_internal/shared/listing-types/classified/og.js +1 -0
  206. package/dist/_internal/shared/listing-types/classified/schema.d.ts +1 -0
  207. package/dist/_internal/shared/listing-types/classified/schema.js +1 -0
  208. package/dist/_internal/shared/listing-types/classified/seed-factory.d.ts +1 -0
  209. package/dist/_internal/shared/listing-types/classified/seed-factory.js +1 -0
  210. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +7 -0
  211. package/dist/_internal/shared/listing-types/digital-code/config.js +8 -0
  212. package/dist/_internal/shared/listing-types/digital-code/ctas.d.ts +1 -0
  213. package/dist/_internal/shared/listing-types/digital-code/ctas.js +3 -0
  214. package/dist/_internal/shared/listing-types/digital-code/og.d.ts +1 -0
  215. package/dist/_internal/shared/listing-types/digital-code/og.js +1 -0
  216. package/dist/_internal/shared/listing-types/digital-code/schema.d.ts +1 -0
  217. package/dist/_internal/shared/listing-types/digital-code/schema.js +1 -0
  218. package/dist/_internal/shared/listing-types/digital-code/seed-factory.d.ts +1 -0
  219. package/dist/_internal/shared/listing-types/digital-code/seed-factory.js +1 -0
  220. package/dist/_internal/shared/listing-types/feature-flags.d.ts +34 -0
  221. package/dist/_internal/shared/listing-types/feature-flags.js +45 -0
  222. package/dist/_internal/shared/listing-types/live/config.d.ts +7 -0
  223. package/dist/_internal/shared/listing-types/live/config.js +8 -0
  224. package/dist/_internal/shared/listing-types/live/ctas.d.ts +1 -0
  225. package/dist/_internal/shared/listing-types/live/ctas.js +3 -0
  226. package/dist/_internal/shared/listing-types/live/og.d.ts +1 -0
  227. package/dist/_internal/shared/listing-types/live/og.js +1 -0
  228. package/dist/_internal/shared/listing-types/live/schema.d.ts +1 -0
  229. package/dist/_internal/shared/listing-types/live/schema.js +1 -0
  230. package/dist/_internal/shared/listing-types/live/seed-factory.d.ts +1 -0
  231. package/dist/_internal/shared/listing-types/live/seed-factory.js +1 -0
  232. package/dist/_internal/shared/media/limits.js +8 -0
  233. package/dist/client.d.ts +6 -1
  234. package/dist/client.js +14 -1
  235. package/dist/configs/next.js +7 -0
  236. package/dist/constants/api-endpoints.d.ts +6 -0
  237. package/dist/constants/api-endpoints.js +4 -0
  238. package/dist/core/hooks/useSyncManager.js +13 -1
  239. package/dist/core/unit-of-work.d.ts +1 -1
  240. package/dist/core/unit-of-work.js +2 -2
  241. package/dist/features/account/actions/address-actions.d.ts +1 -1
  242. package/dist/features/account/actions/address-actions.js +15 -7
  243. package/dist/features/account/schemas/firestore.d.ts +8 -43
  244. package/dist/features/account/schemas/firestore.js +8 -54
  245. package/dist/features/account/schemas/index.d.ts +6 -6
  246. package/dist/features/account/server.d.ts +1 -1
  247. package/dist/features/account/server.js +3 -1
  248. package/dist/features/addresses/index.d.ts +2 -0
  249. package/dist/features/addresses/index.js +2 -0
  250. package/dist/features/addresses/repository/addresses.repository.d.ts +29 -0
  251. package/dist/features/addresses/repository/addresses.repository.js +157 -0
  252. package/dist/features/addresses/schemas/firestore.d.ts +53 -0
  253. package/dist/features/addresses/schemas/firestore.js +68 -0
  254. package/dist/features/{bundles → addresses}/schemas/index.d.ts +0 -1
  255. package/dist/features/{bundles → addresses}/schemas/index.js +0 -1
  256. package/dist/features/addresses/server.d.ts +2 -0
  257. package/dist/features/addresses/server.js +2 -0
  258. package/dist/features/admin/components/AdminAllEventEntriesView.js +4 -3
  259. package/dist/features/admin/components/AdminBidsView.js +4 -3
  260. package/dist/features/admin/components/AdminBlogView.js +8 -3
  261. package/dist/features/admin/components/AdminBundleEditorView.d.ts +9 -0
  262. package/dist/features/admin/components/AdminBundleEditorView.js +209 -0
  263. package/dist/features/admin/components/AdminBundlesView.d.ts +9 -0
  264. package/dist/features/admin/components/AdminBundlesView.js +59 -0
  265. package/dist/features/admin/components/AdminCartsView.js +13 -3
  266. package/dist/features/admin/components/AdminContactView.js +4 -3
  267. package/dist/features/admin/components/AdminCouponsView.js +32 -13
  268. package/dist/features/admin/components/AdminNewsletterView.js +4 -3
  269. package/dist/features/admin/components/AdminOrdersView.js +15 -7
  270. package/dist/features/admin/components/AdminPayoutsView.js +4 -3
  271. package/dist/features/admin/components/AdminProductsView.js +6 -5
  272. package/dist/features/admin/components/AdminReviewsView.js +5 -4
  273. package/dist/features/admin/components/AdminStoresView.js +4 -3
  274. package/dist/features/admin/components/AdminUsersView.js +15 -5
  275. package/dist/features/admin/components/AdminWishlistsView.js +10 -1
  276. package/dist/features/admin/components/DataTable.d.ts +5 -1
  277. package/dist/features/admin/components/DataTable.js +24 -20
  278. package/dist/features/admin/components/index.d.ts +4 -0
  279. package/dist/features/admin/components/index.js +3 -0
  280. package/dist/features/admin/constants/filter-tabs.d.ts +401 -0
  281. package/dist/features/admin/constants/filter-tabs.js +200 -0
  282. package/dist/features/admin/hooks/useAdminListingData.d.ts +1 -0
  283. package/dist/features/admin/hooks/useAdminListingData.js +1 -0
  284. package/dist/features/admin/schemas/firestore.d.ts +15 -0
  285. package/dist/features/admin/schemas/firestore.js +18 -0
  286. package/dist/features/admin/types/product.types.d.ts +2 -2
  287. package/dist/features/auctions/components/AuctionCard.d.ts +4 -1
  288. package/dist/features/auctions/components/AuctionCard.js +5 -3
  289. package/dist/features/auctions/components/AuctionDetailPageView.js +1 -1
  290. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +2 -2
  291. package/dist/features/auctions/components/PlaceBidFormClient.js +12 -2
  292. package/dist/features/auctions/schemas/index.d.ts +2 -2
  293. package/dist/features/auth/index.d.ts +1 -0
  294. package/dist/features/auth/index.js +1 -0
  295. package/dist/features/auth/role-predicates.d.ts +16 -0
  296. package/dist/features/auth/role-predicates.js +15 -0
  297. package/dist/features/blog/components/BlogFeaturedCard.d.ts +4 -1
  298. package/dist/features/blog/components/BlogFeaturedCard.js +5 -3
  299. package/dist/features/cart/actions/cart-actions.d.ts +1 -0
  300. package/dist/features/cart/actions/cart-actions.js +16 -0
  301. package/dist/features/cart/components/CartView.d.ts +19 -1
  302. package/dist/features/cart/components/CartView.js +2 -2
  303. package/dist/features/cart/components/ShippingPicker.d.ts +13 -0
  304. package/dist/features/cart/components/ShippingPicker.js +48 -0
  305. package/dist/features/cart/components/index.d.ts +3 -1
  306. package/dist/features/cart/components/index.js +1 -0
  307. package/dist/features/cart/hooks/useCartCount.js +7 -1
  308. package/dist/features/cart/repository/cart.repository.d.ts +1 -0
  309. package/dist/features/cart/repository/cart.repository.js +35 -0
  310. package/dist/features/cart/schemas/firestore.d.ts +27 -2
  311. package/dist/features/categories/components/BundleAddToCartCta.d.ts +16 -0
  312. package/dist/features/categories/components/BundleAddToCartCta.js +54 -0
  313. package/dist/features/categories/components/BundleBuyNowCta.d.ts +8 -0
  314. package/dist/features/categories/components/BundleBuyNowCta.js +37 -0
  315. package/dist/features/categories/components/BundleDetailView.d.ts +22 -0
  316. package/dist/features/categories/components/BundleDetailView.js +31 -0
  317. package/dist/features/categories/components/BundleDynamicRuleEditor.d.ts +18 -0
  318. package/dist/features/categories/components/BundleDynamicRuleEditor.js +60 -0
  319. package/dist/features/categories/components/BundleItemsPicker.d.ts +26 -0
  320. package/dist/features/categories/components/BundleItemsPicker.js +135 -0
  321. package/dist/features/categories/components/BundlesListView.d.ts +13 -0
  322. package/dist/features/categories/components/BundlesListView.js +27 -0
  323. package/dist/features/categories/components/index.d.ts +12 -0
  324. package/dist/features/categories/components/index.js +9 -0
  325. package/dist/features/checkout/actions/checkout-actions.js +10 -3
  326. package/dist/features/events/components/AdminEventEditorView.js +108 -2
  327. package/dist/features/events/components/AdminEventsView.js +16 -4
  328. package/dist/features/events/components/EventCard.d.ts +4 -1
  329. package/dist/features/events/components/EventCard.js +7 -3
  330. package/dist/features/events/components/EventRaffleWinnerView.d.ts +21 -0
  331. package/dist/features/events/components/EventRaffleWinnerView.js +18 -0
  332. package/dist/features/events/components/SpinWheelView.d.ts +27 -0
  333. package/dist/features/events/components/SpinWheelView.js +64 -0
  334. package/dist/features/events/components/index.d.ts +4 -0
  335. package/dist/features/events/components/index.js +2 -0
  336. package/dist/features/events/schemas/firestore.d.ts +27 -1
  337. package/dist/features/events/schemas/firestore.js +7 -0
  338. package/dist/features/events/types/index.d.ts +27 -1
  339. package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +16 -0
  340. package/dist/features/homepage/components/FeaturedBundlesSection.js +24 -0
  341. package/dist/features/homepage/components/MarketplaceHomepageView.js +4 -1
  342. package/dist/features/homepage/components/WhatsAppCommunitySection.js +2 -2
  343. package/dist/features/homepage/lib/section-renderer.d.ts +2 -0
  344. package/dist/features/homepage/lib/section-renderer.js +5 -5
  345. package/dist/features/layout/NavbarLayout.d.ts +3 -1
  346. package/dist/features/layout/NavbarLayout.js +32 -3
  347. package/dist/features/layout/TitleBarLayout.d.ts +6 -3
  348. package/dist/features/layout/TitleBarLayout.js +22 -7
  349. package/dist/features/media/upload/MediaUploadField.d.ts +15 -1
  350. package/dist/features/media/upload/MediaUploadField.js +22 -1
  351. package/dist/features/orders/components/MarketplaceOrderCard.js +4 -2
  352. package/dist/features/orders/components/OrderSiblingPayments.d.ts +8 -0
  353. package/dist/features/orders/components/OrderSiblingPayments.js +16 -0
  354. package/dist/features/orders/components/RefundHistoryTable.d.ts +6 -0
  355. package/dist/features/orders/components/RefundHistoryTable.js +23 -0
  356. package/dist/features/orders/components/RefundRequestView.d.ts +8 -0
  357. package/dist/features/orders/components/RefundRequestView.js +42 -0
  358. package/dist/features/orders/components/index.d.ts +6 -0
  359. package/dist/features/orders/components/index.js +3 -0
  360. package/dist/features/orders/index.d.ts +1 -0
  361. package/dist/features/orders/index.js +2 -0
  362. package/dist/features/orders/repository/orders.repository.d.ts +20 -1
  363. package/dist/features/orders/repository/orders.repository.js +30 -1
  364. package/dist/features/orders/schemas/firestore.d.ts +63 -13
  365. package/dist/features/orders/schemas/firestore.js +5 -5
  366. package/dist/features/orders/schemas/index.d.ts +4 -4
  367. package/dist/features/orders/types/index.d.ts +12 -2
  368. package/dist/features/orders/utils/bundle-grouping.d.ts +48 -0
  369. package/dist/features/orders/utils/bundle-grouping.js +54 -0
  370. package/dist/features/orders/utils/order-splitter.d.ts +9 -10
  371. package/dist/features/orders/utils/order-splitter.js +24 -30
  372. package/dist/features/payments/repository/payout.repository.d.ts +17 -1
  373. package/dist/features/payments/repository/payout.repository.js +47 -0
  374. package/dist/features/payments/schemas/firestore.d.ts +26 -0
  375. package/dist/features/pre-orders/components/PreorderCard.d.ts +4 -1
  376. package/dist/features/pre-orders/components/PreorderCard.js +8 -6
  377. package/dist/features/products/actions/product-actions.d.ts +1 -1
  378. package/dist/features/products/actions/product-actions.js +1 -1
  379. package/dist/features/products/components/CompareOverlay.d.ts +2 -2
  380. package/dist/features/products/components/CompareOverlay.js +4 -4
  381. package/dist/features/products/components/InteractiveProductCard.js +7 -12
  382. package/dist/features/products/components/NonRefundableConsentModal.d.ts +1 -1
  383. package/dist/features/products/components/NonRefundableConsentModal.js +0 -10
  384. package/dist/features/products/components/ProductGrid.js +28 -12
  385. package/dist/features/products/components/ShowGroupSection.js +3 -3
  386. package/dist/features/products/components/SublistingCarouselSection.js +2 -2
  387. package/dist/features/products/components/index.d.ts +0 -4
  388. package/dist/features/products/components/index.js +5 -2
  389. package/dist/features/products/index.d.ts +1 -1
  390. package/dist/features/products/index.js +3 -1
  391. package/dist/features/products/repository/products.repository.js +4 -0
  392. package/dist/features/products/schemas/catalog-product.d.ts +70 -0
  393. package/dist/features/products/schemas/catalog-product.js +50 -0
  394. package/dist/features/products/schemas/firestore.d.ts +110 -2
  395. package/dist/features/products/schemas/firestore.js +30 -0
  396. package/dist/features/products/schemas/index.d.ts +8 -8
  397. package/dist/features/products/types/index.d.ts +1 -1
  398. package/dist/features/products/utils/listing-type.d.ts +9 -0
  399. package/dist/features/products/utils/listing-type.js +4 -0
  400. package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
  401. package/dist/features/promotions/actions/coupon-actions.js +1 -1
  402. package/dist/features/promotions/components/CouponCard.d.ts +28 -10
  403. package/dist/features/promotions/components/CouponCard.js +116 -14
  404. package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
  405. package/dist/features/promotions/repository/coupons.repository.d.ts +1 -1
  406. package/dist/features/reviews/schemas/index.d.ts +2 -2
  407. package/dist/features/search/schemas/index.d.ts +2 -2
  408. package/dist/features/search/types/index.d.ts +2 -2
  409. package/dist/features/seller/components/SellerAuctionsView.js +4 -5
  410. package/dist/features/seller/components/SellerBidsView.js +5 -13
  411. package/dist/features/seller/components/SellerCouponsView.js +31 -67
  412. package/dist/features/seller/components/SellerOffersView.js +4 -5
  413. package/dist/features/seller/components/SellerOrdersView.js +4 -5
  414. package/dist/features/seller/components/SellerPayoutsView.js +4 -5
  415. package/dist/features/seller/components/SellerProductsView.js +4 -8
  416. package/dist/features/seller/schemas/index.d.ts +2 -2
  417. package/dist/features/stores/actions/store-address-actions.d.ts +10 -6
  418. package/dist/features/stores/actions/store-address-actions.js +8 -7
  419. package/dist/features/stores/components/InteractiveStoreCard.js +3 -10
  420. package/dist/features/stores/components/StoreDetailLayoutView.js +20 -5
  421. package/dist/features/stores/schemas/firestore.d.ts +45 -38
  422. package/dist/features/stores/schemas/firestore.js +2 -49
  423. package/dist/features/stores/server.d.ts +0 -1
  424. package/dist/features/stores/server.js +2 -1
  425. package/dist/features/wishlist/hooks/useWishlistCount.d.ts +7 -9
  426. package/dist/features/wishlist/hooks/useWishlistCount.js +67 -86
  427. package/dist/features/wishlist/types/index.d.ts +1 -1
  428. package/dist/index.d.ts +50 -9
  429. package/dist/index.js +57 -11
  430. package/dist/next/routing/route-map.d.ts +6 -0
  431. package/dist/next/routing/route-map.js +4 -0
  432. package/dist/providers/db-firebase/admin.d.ts +6 -2
  433. package/dist/providers/db-firebase/admin.js +23 -0
  434. package/dist/repositories/index.d.ts +1 -2
  435. package/dist/repositories/index.js +5 -2
  436. package/dist/security/authorization.d.ts +2 -1
  437. package/dist/security/authorization.js +3 -2
  438. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  439. package/dist/seed/bids-seed-data.d.ts +2 -2
  440. package/dist/seed/bids-seed-data.js +77 -2
  441. package/dist/seed/cart-seed-data.d.ts +10 -10
  442. package/dist/seed/cart-seed-data.js +15 -15
  443. package/dist/seed/events-seed-data.js +77 -0
  444. package/dist/seed/manifest.js +16 -8
  445. package/dist/seed/orders-seed-data.js +41 -2
  446. package/dist/seed/payouts-seed-data.js +18 -2
  447. package/dist/seed/stores-seed-data.js +55 -0
  448. package/dist/server-entry.d.ts +1 -0
  449. package/dist/server-entry.js +2 -0
  450. package/dist/server.d.ts +4 -0
  451. package/dist/server.js +8 -0
  452. package/dist/tailwind-utilities.css +1 -1
  453. package/dist/ui/components/FilterChipGroup.d.ts +39 -0
  454. package/dist/ui/components/FilterChipGroup.js +15 -0
  455. package/dist/ui/components/HorizontalScroller.js +32 -7
  456. package/dist/ui/components/HorizontalScroller.style.css +6 -0
  457. package/dist/ui/components/SiteLogo.js +1 -1
  458. package/dist/ui/index.d.ts +2 -0
  459. package/dist/ui/index.js +2 -0
  460. package/dist/utils/id-generators.d.ts +11 -0
  461. package/dist/utils/id-generators.js +16 -0
  462. package/package.json +1 -1
  463. package/dist/_internal/shared/features/bundles/config.d.ts +0 -6
  464. package/dist/_internal/shared/features/bundles/config.js +0 -6
  465. package/dist/_internal/shared/schema-versions.d.ts +0 -76
  466. package/dist/_internal/shared/schema-versions.js +0 -82
  467. package/dist/features/account/migrations.d.ts +0 -2
  468. package/dist/features/account/migrations.js +0 -10
  469. package/dist/features/admin/migrations.d.ts +0 -2
  470. package/dist/features/admin/migrations.js +0 -10
  471. package/dist/features/auctions/migrations.d.ts +0 -2
  472. package/dist/features/auctions/migrations.js +0 -10
  473. package/dist/features/auth/migrations.d.ts +0 -2
  474. package/dist/features/auth/migrations.js +0 -10
  475. package/dist/features/blog/migrations.d.ts +0 -2
  476. package/dist/features/blog/migrations.js +0 -10
  477. package/dist/features/brands/actions/brand-actions.d.ts +0 -2
  478. package/dist/features/brands/actions/brand-actions.js +0 -5
  479. package/dist/features/brands/index.d.ts +0 -3
  480. package/dist/features/brands/index.js +0 -3
  481. package/dist/features/brands/migrations.d.ts +0 -2
  482. package/dist/features/brands/migrations.js +0 -10
  483. package/dist/features/brands/repository/brands.repository.d.ts +0 -13
  484. package/dist/features/brands/repository/brands.repository.js +0 -60
  485. package/dist/features/brands/schemas/index.d.ts +0 -33
  486. package/dist/features/brands/schemas/index.js +0 -15
  487. package/dist/features/brands/server.d.ts +0 -7
  488. package/dist/features/brands/server.js +0 -7
  489. package/dist/features/bundles/components/AdminBundleEditorView.d.ts +0 -8
  490. package/dist/features/bundles/components/AdminBundleEditorView.js +0 -7
  491. package/dist/features/bundles/components/BundleDetailPageView.d.ts +0 -9
  492. package/dist/features/bundles/components/BundleDetailPageView.js +0 -45
  493. package/dist/features/bundles/components/BundleForm.d.ts +0 -12
  494. package/dist/features/bundles/components/BundleForm.js +0 -126
  495. package/dist/features/bundles/components/BundleItemsPicker.d.ts +0 -9
  496. package/dist/features/bundles/components/BundleItemsPicker.js +0 -77
  497. package/dist/features/bundles/components/BundlesByCategoryListing.d.ts +0 -6
  498. package/dist/features/bundles/components/BundlesByCategoryListing.js +0 -50
  499. package/dist/features/bundles/components/BundlesListingView.d.ts +0 -17
  500. package/dist/features/bundles/components/BundlesListingView.js +0 -50
  501. package/dist/features/bundles/components/FeaturedBundlesSection.d.ts +0 -5
  502. package/dist/features/bundles/components/FeaturedBundlesSection.js +0 -55
  503. package/dist/features/bundles/components/SellerBundleCreateView.d.ts +0 -8
  504. package/dist/features/bundles/components/SellerBundleCreateView.js +0 -7
  505. package/dist/features/bundles/components/SellerBundleEditView.d.ts +0 -9
  506. package/dist/features/bundles/components/SellerBundleEditView.js +0 -7
  507. package/dist/features/bundles/components/index.d.ts +0 -18
  508. package/dist/features/bundles/components/index.js +0 -9
  509. package/dist/features/bundles/constants/index.d.ts +0 -32
  510. package/dist/features/bundles/constants/index.js +0 -35
  511. package/dist/features/bundles/index.d.ts +0 -2
  512. package/dist/features/bundles/index.js +0 -2
  513. package/dist/features/bundles/migrations.d.ts +0 -2
  514. package/dist/features/bundles/migrations.js +0 -10
  515. package/dist/features/bundles/repository/bundles.repository.d.ts +0 -36
  516. package/dist/features/bundles/repository/bundles.repository.js +0 -148
  517. package/dist/features/bundles/repository/index.d.ts +0 -1
  518. package/dist/features/bundles/repository/index.js +0 -1
  519. package/dist/features/bundles/schemas/firestore.d.ts +0 -88
  520. package/dist/features/bundles/schemas/firestore.js +0 -29
  521. package/dist/features/bundles/schemas/zod.d.ts +0 -377
  522. package/dist/features/bundles/schemas/zod.js +0 -71
  523. package/dist/features/cart/migrations.d.ts +0 -2
  524. package/dist/features/cart/migrations.js +0 -10
  525. package/dist/features/categories/migrations.d.ts +0 -2
  526. package/dist/features/categories/migrations.js +0 -10
  527. package/dist/features/events/migrations.d.ts +0 -2
  528. package/dist/features/events/migrations.js +0 -10
  529. package/dist/features/faq/migrations.d.ts +0 -2
  530. package/dist/features/faq/migrations.js +0 -10
  531. package/dist/features/grouped/migrations.d.ts +0 -2
  532. package/dist/features/grouped/migrations.js +0 -10
  533. package/dist/features/history/migrations.d.ts +0 -2
  534. package/dist/features/history/migrations.js +0 -10
  535. package/dist/features/messages/migrations.d.ts +0 -2
  536. package/dist/features/messages/migrations.js +0 -10
  537. package/dist/features/orders/migrations.d.ts +0 -2
  538. package/dist/features/orders/migrations.js +0 -10
  539. package/dist/features/payments/migrations.d.ts +0 -2
  540. package/dist/features/payments/migrations.js +0 -10
  541. package/dist/features/products/migrations.d.ts +0 -2
  542. package/dist/features/products/migrations.js +0 -10
  543. package/dist/features/products/repository/sublisting-categories.repository.d.ts +0 -16
  544. package/dist/features/products/repository/sublisting-categories.repository.js +0 -126
  545. package/dist/features/products/schemas/sublisting-categories.d.ts +0 -45
  546. package/dist/features/products/schemas/sublisting-categories.js +0 -16
  547. package/dist/features/promotions/migrations.d.ts +0 -2
  548. package/dist/features/promotions/migrations.js +0 -10
  549. package/dist/features/reviews/migrations.d.ts +0 -2
  550. package/dist/features/reviews/migrations.js +0 -10
  551. package/dist/features/scams/migrations.d.ts +0 -2
  552. package/dist/features/scams/migrations.js +0 -10
  553. package/dist/features/seller/migrations.d.ts +0 -2
  554. package/dist/features/seller/migrations.js +0 -10
  555. package/dist/features/stores/migrations.d.ts +0 -2
  556. package/dist/features/stores/migrations.js +0 -10
  557. package/dist/features/sublisting/migrations.d.ts +0 -2
  558. package/dist/features/sublisting/migrations.js +0 -10
  559. package/dist/features/sublisting/schemas/firestore.d.ts +0 -32
  560. package/dist/features/sublisting/schemas/firestore.js +0 -19
  561. package/dist/features/support/migrations.d.ts +0 -2
  562. package/dist/features/support/migrations.js +0 -10
  563. package/dist/features/wishlist/migrations.d.ts +0 -2
  564. package/dist/features/wishlist/migrations.js +0 -10
  565. package/dist/seed/_bundle-constants.d.ts +0 -14
  566. package/dist/seed/_bundle-constants.js +0 -14
  567. package/dist/seed/anime-figures-seed-data.d.ts +0 -8
  568. package/dist/seed/anime-figures-seed-data.js +0 -1033
  569. package/dist/seed/beyblade-seed-data.d.ts +0 -7
  570. package/dist/seed/beyblade-seed-data.js +0 -1129
  571. package/dist/seed/brands-seed-data.d.ts +0 -7
  572. package/dist/seed/brands-seed-data.js +0 -410
  573. package/dist/seed/bundles-seed-data.d.ts +0 -13
  574. package/dist/seed/bundles-seed-data.js +0 -229
  575. package/dist/seed/cosplay-accessories-seed-data.d.ts +0 -8
  576. package/dist/seed/cosplay-accessories-seed-data.js +0 -647
  577. package/dist/seed/hot-wheels-seed-data.d.ts +0 -7
  578. package/dist/seed/hot-wheels-seed-data.js +0 -1612
  579. package/dist/seed/letitrip-official-seed-data.d.ts +0 -8
  580. package/dist/seed/letitrip-official-seed-data.js +0 -399
  581. package/dist/seed/pokemon-carousel-slides-seed-data.d.ts +0 -8
  582. package/dist/seed/pokemon-carousel-slides-seed-data.js +0 -322
  583. package/dist/seed/pokemon-categories-seed-data.d.ts +0 -24
  584. package/dist/seed/pokemon-categories-seed-data.js +0 -547
  585. package/dist/seed/pokemon-coupons-seed-data.d.ts +0 -6
  586. package/dist/seed/pokemon-coupons-seed-data.js +0 -465
  587. package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +0 -7
  588. package/dist/seed/pokemon-homepage-sections-seed-data.js +0 -241
  589. package/dist/seed/pokemon-products-seed-data.d.ts +0 -9
  590. package/dist/seed/pokemon-products-seed-data.js +0 -1791
  591. package/dist/seed/pokemon-seed-bundle.d.ts +0 -47
  592. package/dist/seed/pokemon-seed-bundle.js +0 -71
  593. package/dist/seed/pokemon-stores-seed-data.d.ts +0 -6
  594. package/dist/seed/pokemon-stores-seed-data.js +0 -179
  595. package/dist/seed/pokemon-users-seed-data.d.ts +0 -6
  596. package/dist/seed/pokemon-users-seed-data.js +0 -521
  597. package/dist/seed/products-seed-data.d.ts +0 -6
  598. package/dist/seed/products-seed-data.js +0 -2530
  599. package/dist/seed/retro-gaming-seed-data.d.ts +0 -8
  600. package/dist/seed/retro-gaming-seed-data.js +0 -801
  601. package/dist/seed/server.d.ts +0 -2
  602. package/dist/seed/server.js +0 -7
  603. package/dist/seed/sublisting-categories-seed-data.d.ts +0 -7
  604. package/dist/seed/sublisting-categories-seed-data.js +0 -159
  605. package/dist/seed/transformers-seed-data.d.ts +0 -7
  606. package/dist/seed/transformers-seed-data.js +0 -530
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Core: weekly Saturday sweep — converts delivered Shiprocket orders
3
+ * with `payoutStatus=eligible` into pending payout documents grouped by seller.
4
+ */
5
+ import { storeRepository, userRepository, orderRepository, payoutRepository, } from "../../../../repositories";
6
+ import { BATCH_LIMIT } from "../handlers/messages";
7
+ import { getDefaultCurrency } from "../../../../core";
8
+ const PLATFORM_COMMISSION_RATE = 0.05;
9
+ export async function runWeeklyPayoutEligibility(ctx) {
10
+ ctx.logger.info("Starting weekly payout eligibility sweep");
11
+ const eligible = await orderRepository.getEligibleShiprocket();
12
+ if (eligible.length === 0) {
13
+ ctx.logger.info("No eligible Shiprocket-delivered orders found");
14
+ return;
15
+ }
16
+ ctx.logger.info(`Found ${eligible.length} eligible order(s) — grouping by seller`);
17
+ const byStore = new Map();
18
+ for (const entry of eligible) {
19
+ const storeId = entry.data.storeId;
20
+ if (!storeId) {
21
+ ctx.logger.warn(`Order ${entry.id} has no storeId — skipping`);
22
+ continue;
23
+ }
24
+ if (!byStore.has(storeId))
25
+ byStore.set(storeId, []);
26
+ byStore.get(storeId).push(entry);
27
+ }
28
+ let payoutsCreated = 0;
29
+ let ordersProcessed = 0;
30
+ const defaultCurrency = getDefaultCurrency();
31
+ for (const [storeId, orders] of byStore.entries()) {
32
+ const store = await storeRepository.findBySlug(storeId);
33
+ const seller = store ? await userRepository.findById(store.ownerId) : null;
34
+ if (!store || !seller) {
35
+ ctx.logger.warn(`Store/seller ${storeId} not found — skipping ${orders.length} order(s)`);
36
+ continue;
37
+ }
38
+ const grossAmount = orders.reduce((sum, o) => sum + (o.data.totalPrice ?? 0), 0);
39
+ const platformFee = Math.round(grossAmount * PLATFORM_COMMISSION_RATE * 100) / 100;
40
+ const netAmount = Math.round((grossAmount - platformFee) * 100) / 100;
41
+ const payoutInput = {
42
+ storeId,
43
+ sellerName: (seller.displayName ?? seller.email ?? store.ownerId),
44
+ sellerEmail: (seller.email ?? ""),
45
+ orderIds: orders.map((o) => o.id),
46
+ amount: netAmount,
47
+ grossAmount,
48
+ platformFee,
49
+ platformFeeRate: PLATFORM_COMMISSION_RATE,
50
+ currency: defaultCurrency,
51
+ status: "pending",
52
+ paymentMethod: seller.payoutDetails?.method === "upi" ? "upi" : "bank_transfer",
53
+ upiId: seller.payoutDetails?.method === "upi" ? seller.payoutDetails.upiId : undefined,
54
+ bankAccount: seller.payoutDetails?.method === "bank_transfer" && seller.payoutDetails.bankAccount
55
+ ? {
56
+ accountHolderName: seller.payoutDetails.bankAccount.accountHolderName,
57
+ accountNumberMasked: seller.payoutDetails.bankAccount.accountNumberMasked,
58
+ ifscCode: seller.payoutDetails.bankAccount.ifscCode,
59
+ bankName: seller.payoutDetails.bankAccount.bankName,
60
+ }
61
+ : undefined,
62
+ notes: `Automated weekly payout — ${orders.length} Shiprocket delivered order(s)`,
63
+ requestedAt: new Date(),
64
+ };
65
+ const { id: payoutId } = await payoutRepository.create(payoutInput);
66
+ for (let i = 0; i < orders.length; i += BATCH_LIMIT) {
67
+ const slice = orders.slice(i, i + BATCH_LIMIT);
68
+ const batch = ctx.db.batch();
69
+ for (const entry of slice) {
70
+ orderRepository.markPayoutRequested(batch, entry.ref, payoutId);
71
+ }
72
+ await batch.commit();
73
+ }
74
+ payoutsCreated++;
75
+ ordersProcessed += orders.length;
76
+ ctx.logger.info(`Payout created for store ${storeId}`, {
77
+ payoutId,
78
+ orderCount: orders.length,
79
+ netAmount,
80
+ grossAmount,
81
+ platformFee,
82
+ });
83
+ }
84
+ ctx.logger.info("Weekly payout eligibility sweep complete", { payoutsCreated, ordersProcessed });
85
+ }
@@ -1,28 +1,4 @@
1
- /**
2
- * HTTPS callable handler: aggregate admin analytics. Returns 12-month order
3
- * totals + monthly breakdown + top-5 products by revenue.
4
- */
5
1
  import type { CallableHandler } from "../runtime/types";
6
- export interface AdminAnalyticsResult {
7
- summary: {
8
- totalOrders: number;
9
- totalRevenue: number;
10
- newOrdersThisMonth: number;
11
- revenueThisMonth: number;
12
- totalProducts: number;
13
- publishedProducts: number;
14
- };
15
- ordersByMonth: Array<{
16
- month: string;
17
- orders: number;
18
- revenue: number;
19
- }>;
20
- topProducts: Array<{
21
- productId: string;
22
- title: string;
23
- revenue: number;
24
- orders: number;
25
- mainImage: string;
26
- }>;
27
- }
2
+ import { type AdminAnalyticsResult } from "../core/adminAnalytics";
3
+ export type { AdminAnalyticsResult };
28
4
  export declare const adminAnalyticsHandler: CallableHandler<void, AdminAnalyticsResult>;
@@ -1,98 +1,2 @@
1
- /**
2
- * HTTPS callable handler: aggregate admin analytics. Returns 12-month order
3
- * totals + monthly breakdown + top-5 products by revenue.
4
- */
5
- import { orderRepository, productRepository } from "../../../../repositories";
6
- import { formatMonthYear } from "../../../../utils/date.formatter";
7
- import { ProductStatusValues } from "../../../../features/products/schemas/firestore";
8
- function normalizeDate(raw) {
9
- return raw instanceof Date ? raw : new Date(raw);
10
- }
11
- async function loadOrdersSince(isoStart, pageCap) {
12
- const out = [];
13
- let page = 1;
14
- let hasMore = true;
15
- while (hasMore && page <= pageCap) {
16
- const result = await orderRepository.listAll({
17
- filters: `createdAt>=${isoStart}`,
18
- sorts: "-createdAt",
19
- page: String(page),
20
- pageSize: "500",
21
- });
22
- out.push(...result.items);
23
- hasMore = result.hasMore;
24
- page += 1;
25
- }
26
- return out;
27
- }
28
- export const adminAnalyticsHandler = async (_input, ctx) => {
29
- ctx.logger.info("Admin analytics requested");
30
- const now = new Date();
31
- const twelveMonthsAgo = new Date(now.getFullYear() - 1, now.getMonth(), 1).toISOString();
32
- const monthStart = new Date(now.getFullYear(), now.getMonth(), 1).toISOString();
33
- const [allTimeTotalsResult, past12, thisMonth, totalProductsResult, publishedProductsResult] = await Promise.all([
34
- orderRepository.listAll({ page: "1", pageSize: "1" }),
35
- loadOrdersSince(twelveMonthsAgo, 10),
36
- loadOrdersSince(monthStart, 10),
37
- productRepository.list({ page: "1", pageSize: "1" }),
38
- productRepository.list({
39
- filters: `status==${ProductStatusValues.PUBLISHED}`,
40
- page: "1",
41
- pageSize: "1",
42
- }, { status: ProductStatusValues.PUBLISHED }),
43
- ]);
44
- const totalRevenue = past12.reduce((sum, o) => sum + (o.totalPrice ?? 0), 0);
45
- const newOrdersThisMonth = thisMonth.length;
46
- const revenueThisMonth = thisMonth.reduce((sum, o) => sum + (o.totalPrice ?? 0), 0);
47
- const monthMap = new Map();
48
- for (let i = 11; i >= 0; i--) {
49
- const d = new Date(now.getFullYear(), now.getMonth() - i, 1);
50
- const key = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}`;
51
- monthMap.set(key, { month: formatMonthYear(d), orders: 0, revenue: 0 });
52
- }
53
- for (const order of past12) {
54
- const d = normalizeDate(order.createdAt);
55
- const key = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}`;
56
- const entry = monthMap.get(key);
57
- if (entry) {
58
- entry.orders += 1;
59
- entry.revenue += order.totalPrice ?? 0;
60
- }
61
- }
62
- const revenueByProduct = new Map();
63
- for (const order of past12) {
64
- const existing = revenueByProduct.get(order.productId);
65
- if (existing) {
66
- existing.revenue += order.totalPrice ?? 0;
67
- existing.orders += 1;
68
- }
69
- else {
70
- revenueByProduct.set(order.productId, {
71
- productId: order.productId,
72
- title: order.productTitle,
73
- revenue: order.totalPrice ?? 0,
74
- orders: 1,
75
- });
76
- }
77
- }
78
- const topProducts = Array.from(revenueByProduct.values())
79
- .sort((a, b) => b.revenue - a.revenue)
80
- .slice(0, 5);
81
- const topProductDocs = await Promise.all(topProducts.map((p) => productRepository.findById(p.productId)));
82
- const topProductsWithImages = topProducts.map((p, i) => ({
83
- ...p,
84
- mainImage: topProductDocs[i]?.mainImage ?? "",
85
- }));
86
- return {
87
- summary: {
88
- totalOrders: allTimeTotalsResult.total,
89
- totalRevenue,
90
- newOrdersThisMonth,
91
- revenueThisMonth,
92
- totalProducts: totalProductsResult.total,
93
- publishedProducts: publishedProductsResult.total,
94
- },
95
- ordersByMonth: Array.from(monthMap.values()),
96
- topProducts: topProductsWithImages,
97
- };
98
- };
1
+ import { runAdminAnalytics } from "../core/adminAnalytics";
2
+ export const adminAnalyticsHandler = runAdminAnalytics;
@@ -1,24 +1,3 @@
1
- /**
2
- * assignSpinPrize — HTTP callable (SB9-E).
3
- *
4
- * Weighted random selection from an event's `spinPrizes` config using
5
- * `crypto.randomInt`. Enforces one spin per user (checks `spinUsed=true` on
6
- * the user's event entry). Sets `spinPrizeId` + `spinWonAt` on the entry doc.
7
- * Issues a coupon code if the prize has `spinPrizeCouponId` set.
8
- */
9
1
  import type { CallableHandler } from "../runtime/types";
10
- interface AssignSpinPrizeInput {
11
- eventId: string;
12
- userId: string;
13
- }
14
- interface AssignSpinPrizeResult {
15
- eventId: string;
16
- userId: string;
17
- spinPrizeId?: string;
18
- spinPrizeTitle?: string;
19
- spinPrizeCouponCode?: string;
20
- alreadyUsed?: boolean;
21
- reason?: string;
22
- }
2
+ import { type AssignSpinPrizeInput, type AssignSpinPrizeResult } from "../core/assignSpinPrize";
23
3
  export declare const assignSpinPrizeHandler: CallableHandler<AssignSpinPrizeInput, AssignSpinPrizeResult>;
24
- export {};
@@ -1,86 +1,2 @@
1
- /**
2
- * assignSpinPrize HTTP callable (SB9-E).
3
- *
4
- * Weighted random selection from an event's `spinPrizes` config using
5
- * `crypto.randomInt`. Enforces one spin per user (checks `spinUsed=true` on
6
- * the user's event entry). Sets `spinPrizeId` + `spinWonAt` on the entry doc.
7
- * Issues a coupon code if the prize has `spinPrizeCouponId` set.
8
- */
9
- import crypto from "node:crypto";
10
- const EVENTS_COLLECTION = "events";
11
- const EVENT_ENTRIES_COLLECTION = "eventEntries";
12
- const COUPONS_COLLECTION = "coupons";
13
- export const assignSpinPrizeHandler = async (input, ctx) => {
14
- const { eventId, userId } = input;
15
- const eventSnap = await ctx.db.collection(EVENTS_COLLECTION).doc(eventId).get();
16
- if (!eventSnap.exists) {
17
- return { eventId, userId, reason: "event_not_found" };
18
- }
19
- const event = eventSnap.data();
20
- const prizes = Array.isArray(event.spinPrizes) ? event.spinPrizes : [];
21
- const totalWeight = prizes.reduce((s, p) => s + (p.weight ?? 0), 0);
22
- if (totalWeight <= 0) {
23
- return { eventId, userId, reason: "no_prizes_configured" };
24
- }
25
- const entriesSnap = await ctx.db
26
- .collection(EVENT_ENTRIES_COLLECTION)
27
- .where("eventId", "==", eventId)
28
- .where("userId", "==", userId)
29
- .limit(1)
30
- .get();
31
- if (entriesSnap.empty) {
32
- return { eventId, userId, reason: "entry_not_found" };
33
- }
34
- const entryDoc = entriesSnap.docs[0];
35
- const entry = entryDoc.data();
36
- if (entry.spinUsed) {
37
- return {
38
- eventId,
39
- userId,
40
- spinPrizeId: entry.spinPrizeId,
41
- alreadyUsed: true,
42
- };
43
- }
44
- // Weighted pick: roll a uniform integer in [0, totalWeight) and walk.
45
- const roll = crypto.randomInt(0, totalWeight);
46
- let cumulative = 0;
47
- let pick;
48
- for (const p of prizes) {
49
- cumulative += p.weight ?? 0;
50
- if (roll < cumulative) {
51
- pick = p;
52
- break;
53
- }
54
- }
55
- if (!pick)
56
- pick = prizes[prizes.length - 1];
57
- let spinPrizeCouponCode;
58
- if (pick.couponId) {
59
- const coupSnap = await ctx.db
60
- .collection(COUPONS_COLLECTION)
61
- .doc(pick.couponId)
62
- .get();
63
- if (coupSnap.exists) {
64
- spinPrizeCouponCode = coupSnap.data().code;
65
- }
66
- }
67
- await entryDoc.ref.update({
68
- spinUsed: true,
69
- spinPrizeId: pick.id,
70
- spinWonAt: ctx.now,
71
- spinPrizeCouponCode: spinPrizeCouponCode ?? null,
72
- updatedAt: ctx.now,
73
- });
74
- ctx.logger.info("Spin prize assigned", {
75
- eventId,
76
- userId,
77
- spinPrizeId: pick.id,
78
- });
79
- return {
80
- eventId,
81
- userId,
82
- spinPrizeId: pick.id,
83
- spinPrizeTitle: pick.title,
84
- spinPrizeCouponCode,
85
- };
86
- };
1
+ import { runAssignSpinPrize, } from "../core/assignSpinPrize";
2
+ export const assignSpinPrizeHandler = runAssignSpinPrize;
@@ -1,70 +1,2 @@
1
- import { bidRepository, notificationRepository, orderRepository, productRepository, } from "../../../../repositories";
2
- import { ProductStatusValues } from "../../../../features/products/schemas/firestore";
3
- import { AUCTION_MESSAGES } from "./messages";
4
- async function settleAuction(ctx, product) {
5
- const activeBids = await bidRepository.getActiveByProduct(product.id);
6
- const batch = ctx.db.batch();
7
- if (activeBids.length === 0) {
8
- productRepository.updateStatusInBatch(batch, product.id, ProductStatusValues.OUT_OF_STOCK);
9
- await batch.commit();
10
- ctx.logger.info(AUCTION_MESSAGES.NO_BIDS_LOG(product.id));
11
- return;
12
- }
13
- const [winnerEntry, ...loserEntries] = activeBids;
14
- bidRepository.markWon(batch, winnerEntry.ref);
15
- loserEntries.forEach(({ ref }) => bidRepository.markLost(batch, ref));
16
- const orderRef = orderRepository.createFromAuction(batch, {
17
- productId: product.id,
18
- productTitle: product.title,
19
- userId: winnerEntry.data.userId,
20
- userName: winnerEntry.data.userName,
21
- userEmail: winnerEntry.data.userEmail,
22
- storeId: product.storeId,
23
- amount: winnerEntry.data.bidAmount,
24
- currency: winnerEntry.data.currency,
25
- auctionProductId: product.id,
26
- });
27
- productRepository.updateStatusInBatch(batch, product.id, ProductStatusValues.SOLD);
28
- notificationRepository.createInBatch(batch, {
29
- userId: winnerEntry.data.userId,
30
- type: "bid_won",
31
- priority: "high",
32
- title: AUCTION_MESSAGES.WON_TITLE,
33
- message: AUCTION_MESSAGES.WON_MESSAGE(product.title, winnerEntry.data.currency, winnerEntry.data.bidAmount),
34
- relatedId: product.id,
35
- relatedType: "product",
36
- });
37
- loserEntries.slice(0, 50).forEach(({ data: bid }) => {
38
- notificationRepository.createInBatch(batch, {
39
- userId: bid.userId,
40
- type: "bid_lost",
41
- priority: "normal",
42
- title: AUCTION_MESSAGES.LOST_TITLE,
43
- message: AUCTION_MESSAGES.LOST_MESSAGE(product.title),
44
- relatedId: product.id,
45
- relatedType: "product",
46
- });
47
- });
48
- await batch.commit();
49
- ctx.logger.info(`Settled auction ${product.id}`, {
50
- winner: winnerEntry.data.userId,
51
- winningBid: winnerEntry.data.bidAmount,
52
- losersCount: loserEntries.length,
53
- orderId: orderRef.id,
54
- });
55
- }
56
- export const auctionSettlementHandler = async (ctx) => {
57
- ctx.logger.info("Starting auction settlement sweep");
58
- const expired = await productRepository.getExpiredAuctions(ctx.now);
59
- if (expired.length === 0) {
60
- ctx.logger.info("No expired auctions found");
61
- return;
62
- }
63
- ctx.logger.info(`Found ${expired.length} expired auction(s) to settle`);
64
- const results = await Promise.allSettled(expired.map(({ data }) => settleAuction(ctx, data)));
65
- const failed = results.filter((r) => r.status === "rejected");
66
- if (failed.length > 0) {
67
- ctx.logger.error(`${failed.length} auction(s) failed to settle`, failed);
68
- }
69
- ctx.logger.info(`Settlement complete — ${expired.length - failed.length} succeeded, ${failed.length} failed`);
70
- };
1
+ import { runAuctionSettlement } from "../core/auctionSettlement";
2
+ export const auctionSettlementHandler = runAuctionSettlement;
@@ -1,110 +1,2 @@
1
- import { orderRepository, payoutRepository, storeRepository, userRepository, } from "../../../../repositories";
2
- import { getDefaultCurrency } from "../../../../core/index";
3
- import { BATCH_LIMIT } from "./messages";
4
- const AUTO_PAYOUT_WINDOW_DAYS = 7;
5
- const PLATFORM_COMMISSION_RATE = 0.05;
6
- const GATEWAY_FEE_RATE = 0.0236;
7
- const GST_RATE = 0.18;
8
- /** Returns the start of the business day N days ago (10 AM IST = 04:30 UTC). */
9
- function getBusinessDayCutoff(daysAgo) {
10
- const now = new Date();
11
- const cutoff = new Date(now);
12
- cutoff.setUTCDate(cutoff.getUTCDate() - daysAgo);
13
- cutoff.setUTCHours(4, 30, 0, 0);
14
- return cutoff;
15
- }
16
- export const autoPayoutEligibilityHandler = async (ctx) => {
17
- ctx.logger.info("Starting daily auto-payout eligibility sweep", {
18
- windowDays: AUTO_PAYOUT_WINDOW_DAYS,
19
- });
20
- const cutoff = getBusinessDayCutoff(AUTO_PAYOUT_WINDOW_DAYS);
21
- const eligible = await orderRepository.getEligibleAutomatic(cutoff);
22
- if (eligible.length === 0) {
23
- ctx.logger.info("No auto-payout eligible orders found");
24
- return;
25
- }
26
- ctx.logger.info(`Found ${eligible.length} eligible order(s) — grouping by seller`);
27
- const byStore = new Map();
28
- for (const entry of eligible) {
29
- const storeId = entry.data.storeId;
30
- if (!storeId) {
31
- ctx.logger.warn(`Order ${entry.id} has no storeId — skipping`);
32
- continue;
33
- }
34
- if (!byStore.has(storeId))
35
- byStore.set(storeId, []);
36
- byStore.get(storeId).push(entry);
37
- }
38
- let payoutsCreated = 0;
39
- let ordersProcessed = 0;
40
- for (const [storeId, orders] of byStore.entries()) {
41
- const store = await storeRepository.findBySlug(storeId);
42
- const seller = store ? await userRepository.findById(store.ownerId) : null;
43
- if (!seller) {
44
- ctx.logger.warn(`Store/seller ${storeId} not found — skipping ${orders.length} order(s)`, { orderIds: orders.map((o) => o.id) });
45
- continue;
46
- }
47
- const sellerId = store.ownerId;
48
- const grossAmount = orders.reduce((sum, o) => sum + (o.data.totalPrice ?? 0), 0);
49
- const platformFee = Math.round(grossAmount * PLATFORM_COMMISSION_RATE * 100) / 100;
50
- const gatewayFee = Math.round(grossAmount * GATEWAY_FEE_RATE * 100) / 100;
51
- const gstAmount = Math.round(platformFee * GST_RATE * 100) / 100;
52
- const netAmount = Math.round((grossAmount - platformFee - gatewayFee - gstAmount) * 100) / 100;
53
- const payoutInput = {
54
- storeId,
55
- sellerName: (seller.displayName ?? seller.email ?? sellerId),
56
- sellerEmail: (seller.email ?? ""),
57
- orderIds: orders.map((o) => o.id),
58
- amount: netAmount,
59
- grossAmount,
60
- platformFee,
61
- platformFeeRate: PLATFORM_COMMISSION_RATE,
62
- gatewayFee,
63
- gatewayFeeRate: GATEWAY_FEE_RATE,
64
- gstAmount,
65
- gstRate: GST_RATE,
66
- isAutomatic: true,
67
- currency: getDefaultCurrency(),
68
- status: "pending",
69
- paymentMethod: seller.payoutDetails?.method === "upi"
70
- ? "upi"
71
- : "bank_transfer",
72
- upiId: seller.payoutDetails?.method === "upi" ? seller.payoutDetails.upiId : undefined,
73
- bankAccount: seller.payoutDetails?.method === "bank_transfer" &&
74
- seller.payoutDetails.bankAccount
75
- ? {
76
- accountHolderName: seller.payoutDetails.bankAccount.accountHolderName,
77
- accountNumberMasked: seller.payoutDetails.bankAccount.accountNumberMasked,
78
- ifscCode: seller.payoutDetails.bankAccount.ifscCode,
79
- bankName: seller.payoutDetails.bankAccount.bankName,
80
- }
81
- : undefined,
82
- notes: `Auto-payout — ${orders.length} delivered order(s) past ${AUTO_PAYOUT_WINDOW_DAYS}-day window`,
83
- requestedAt: new Date(),
84
- };
85
- const { id: payoutId } = await payoutRepository.create(payoutInput);
86
- for (let i = 0; i < orders.length; i += BATCH_LIMIT) {
87
- const slice = orders.slice(i, i + BATCH_LIMIT);
88
- const batch = ctx.db.batch();
89
- for (const entry of slice) {
90
- orderRepository.markPayoutRequested(batch, entry.ref, payoutId);
91
- }
92
- await batch.commit();
93
- }
94
- ctx.logger.info(`Auto-payout created for store ${storeId}`, {
95
- payoutId,
96
- orderCount: orders.length,
97
- grossAmount,
98
- platformFee,
99
- gatewayFee,
100
- gstAmount,
101
- netAmount,
102
- });
103
- payoutsCreated++;
104
- ordersProcessed += orders.length;
105
- }
106
- ctx.logger.info("Daily auto-payout eligibility sweep complete", {
107
- payoutsCreated,
108
- ordersProcessed,
109
- });
110
- };
1
+ import { runAutoPayoutEligibility } from "../core/autoPayoutEligibility";
2
+ export const autoPayoutEligibilityHandler = runAutoPayoutEligibility;
@@ -1,18 +1,2 @@
1
- /**
2
- * scheduledBundleStockSync — daily 10am IST safety net.
3
- *
4
- * SB-UNI-V: bundles live on the `categories` collection with
5
- * categoryType:"bundle". Each bundle row owns `bundleProductIds[]` +
6
- * `bundleStockStatus`. This sweep recomputes `bundleStockStatus` for
7
- * every active bundle by inspecting its members' product status.
8
- *
9
- * Status transitions:
10
- * all members published + available → "in_stock"
11
- * ≥1 member unavailable, ≥minActive → "partial"
12
- * ≥1 member unavailable, <minActive → "out_of_stock"
13
- *
14
- * The realtime onProductStockChange Firestore-trigger handles individual
15
- * writes; this is the cheap nightly safety net for any missed events.
16
- */
17
1
  import type { ScheduleHandler } from "../runtime/types";
18
2
  export declare const bundleStockSyncHandler: ScheduleHandler;
@@ -1,80 +1,2 @@
1
- /**
2
- * scheduledBundleStockSync daily 10am IST safety net.
3
- *
4
- * SB-UNI-V: bundles live on the `categories` collection with
5
- * categoryType:"bundle". Each bundle row owns `bundleProductIds[]` +
6
- * `bundleStockStatus`. This sweep recomputes `bundleStockStatus` for
7
- * every active bundle by inspecting its members' product status.
8
- *
9
- * Status transitions:
10
- * all members published + available → "in_stock"
11
- * ≥1 member unavailable, ≥minActive → "partial"
12
- * ≥1 member unavailable, <minActive → "out_of_stock"
13
- *
14
- * The realtime onProductStockChange Firestore-trigger handles individual
15
- * writes; this is the cheap nightly safety net for any missed events.
16
- */
17
- const CATEGORIES_COLLECTION = "categories";
18
- const PRODUCT_COLLECTION = "products";
19
- const UNAVAILABLE = new Set(["sold", "out_of_stock", "discontinued"]);
20
- const MIN_ACTIVE_DEFAULT = 1;
21
- async function computeBundleStockStatus(productIds, minActive, ctx) {
22
- if (productIds.length === 0)
23
- return "out_of_stock";
24
- let unavailable = 0;
25
- for (let i = 0; i < productIds.length; i += 30) {
26
- const chunk = productIds.slice(i, i + 30);
27
- const snap = await ctx.db
28
- .collection(PRODUCT_COLLECTION)
29
- .where("__name__", "in", chunk)
30
- .get();
31
- for (const doc of snap.docs) {
32
- const status = doc.data().status;
33
- if (!status || UNAVAILABLE.has(status))
34
- unavailable++;
35
- }
36
- // Account for missing docs (deleted products).
37
- if (snap.size < chunk.length)
38
- unavailable += chunk.length - snap.size;
39
- }
40
- const active = productIds.length - unavailable;
41
- if (unavailable === 0)
42
- return "in_stock";
43
- if (active < minActive)
44
- return "out_of_stock";
45
- return "partial";
46
- }
47
- export const bundleStockSyncHandler = async (ctx) => {
48
- ctx.logger.info("Bundle stock sync starting (SB-UNI-V categories)");
49
- const snap = await ctx.db
50
- .collection(CATEGORIES_COLLECTION)
51
- .where("categoryType", "==", "bundle")
52
- .where("isActive", "==", true)
53
- .limit(500)
54
- .get();
55
- if (snap.empty) {
56
- ctx.logger.info("No active bundle categories to scan");
57
- return;
58
- }
59
- let updated = 0;
60
- for (const bundleDoc of snap.docs) {
61
- const data = bundleDoc.data();
62
- const productIds = data.bundleProductIds ?? [];
63
- if (productIds.length === 0)
64
- continue;
65
- const minActive = data.minActiveMembers ?? MIN_ACTIVE_DEFAULT;
66
- const nextStatus = await computeBundleStockStatus(productIds, minActive, ctx);
67
- if (nextStatus !== data.bundleStockStatus) {
68
- await bundleDoc.ref.update({
69
- bundleStockStatus: nextStatus,
70
- bundleQueryResolvedAt: ctx.now,
71
- updatedAt: ctx.now,
72
- });
73
- updated++;
74
- }
75
- }
76
- ctx.logger.info("Bundle stock sync complete", {
77
- scanned: snap.size,
78
- updated,
79
- });
80
- };
1
+ import { runBundleStockSync } from "../core/bundleStockSync";
2
+ export const bundleStockSyncHandler = runBundleStockSync;
@@ -1,13 +1,2 @@
1
- import { cartRepository } from "../../../../repositories";
2
- import { CART_TTL_DAYS } from "./messages";
3
- import { batchDelete } from "./_helpers";
4
- export const cartPruneHandler = async (ctx) => {
5
- ctx.logger.info(`Pruning carts idle for > ${CART_TTL_DAYS} days`);
6
- const refs = await cartRepository.getStaleRefs(CART_TTL_DAYS);
7
- if (refs.length === 0) {
8
- ctx.logger.info("No stale carts found");
9
- return;
10
- }
11
- const deleted = await batchDelete(ctx, refs);
12
- ctx.logger.info("Cart prune complete", { deleted });
13
- };
1
+ import { runCartPrune } from "../core/cartPrune";
2
+ export const cartPruneHandler = runCartPrune;