@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,138 @@
1
+ /**
2
+ * Core: server-to-server listing proxy. Every appkit repository routes its
3
+ * `.list()` through the same Sieve adapter, so adding a new collection is a
4
+ * one-line addition to `LISTERS`.
5
+ *
6
+ * Cursor: opaque base64 over `{ page }`. Callers may use either page-mode
7
+ * (`p` directly) or infinite-mode (forward `cursor` from previous response).
8
+ */
9
+ import { bidRepository, blogRepository, categoriesRepository, couponsRepository, eventEntryRepository, eventRepository, faqsRepository, homepageSectionsRepository, notificationRepository, orderRepository, payoutRepository, productFeaturesRepository, productRepository, productTemplateRepository, reviewRepository, scammerRepository, storeRepository, userRepository, } from "../../../../repositories";
10
+ const DEFAULT_SORT = "-createdAt";
11
+ const DEFAULT_PAGE = 1;
12
+ const DEFAULT_PAGE_SIZE = 20;
13
+ const MAX_PAGE_SIZE = 100;
14
+ class ListingError extends Error {
15
+ constructor(status, message) {
16
+ super(message);
17
+ this.name = "ListingError";
18
+ this.httpStatus = status;
19
+ }
20
+ }
21
+ function requireOpt(baseOpts, key, collection) {
22
+ const value = baseOpts[key];
23
+ if (typeof value !== "string" || value.length === 0) {
24
+ throw new ListingError(400, `${collection} listing requires baseOpts.${key}`);
25
+ }
26
+ return value;
27
+ }
28
+ function getBoolOpt(baseOpts, key, fallback) {
29
+ const value = baseOpts[key];
30
+ if (typeof value === "boolean")
31
+ return value;
32
+ if (value === "true")
33
+ return true;
34
+ if (value === "false")
35
+ return false;
36
+ return fallback;
37
+ }
38
+ const LISTERS = {
39
+ products: (m, o) => productRepository.list(m, o),
40
+ categories: (m) => categoriesRepository.list(m),
41
+ brands: (m) => categoriesRepository.list({
42
+ ...m,
43
+ filters: m.filters
44
+ ? `${m.filters},categoryType==brand`
45
+ : "categoryType==brand",
46
+ }),
47
+ orders: (m) => orderRepository.listAll(m),
48
+ reviews: (m) => reviewRepository.listAll(m),
49
+ coupons: (m) => couponsRepository.list(m),
50
+ bids: (m) => bidRepository.list(m),
51
+ payouts: (m) => payoutRepository.list(m),
52
+ blogPosts: (m) => blogRepository.listAll(m),
53
+ events: (m) => eventRepository.list(m),
54
+ faqs: (m) => faqsRepository.list(m),
55
+ notifications: (m) => notificationRepository.list(m),
56
+ scammers: (m) => scammerRepository.listAll(m),
57
+ sublistingCategories: (m) => categoriesRepository.list({
58
+ ...m,
59
+ filters: m.filters
60
+ ? `${m.filters},categoryType==sublisting`
61
+ : "categoryType==sublisting",
62
+ }),
63
+ productFeatures: (m) => productFeaturesRepository.list(m),
64
+ homepageSections: (m) => homepageSectionsRepository.list(m),
65
+ users: (m) => userRepository.list(m),
66
+ stores: (m, o) => storeRepository.listStores(m, getBoolOpt(o, "activeOnly", true)),
67
+ eventEntries: (m, o) => {
68
+ const eventId = requireOpt(o, "eventId", "eventEntries");
69
+ return eventEntryRepository.listForEvent(eventId, m);
70
+ },
71
+ productTemplates: (m, o) => {
72
+ const storeId = requireOpt(o, "storeId", "productTemplates");
73
+ return productTemplateRepository.listByStore(storeId, m);
74
+ },
75
+ };
76
+ const SUPPORTED_COLLECTIONS = Object.keys(LISTERS);
77
+ function decodeCursor(cursor) {
78
+ if (!cursor)
79
+ return null;
80
+ try {
81
+ const json = Buffer.from(cursor, "base64").toString("utf8");
82
+ const parsed = JSON.parse(json);
83
+ const page = Number(parsed.page);
84
+ return Number.isFinite(page) && page > 0 ? page : null;
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ }
90
+ function encodeCursor(page) {
91
+ return Buffer.from(JSON.stringify({ page }), "utf8").toString("base64");
92
+ }
93
+ function clampPageSize(raw) {
94
+ const n = Number(raw);
95
+ if (!Number.isFinite(n) || n <= 0)
96
+ return DEFAULT_PAGE_SIZE;
97
+ return Math.min(Math.floor(n), MAX_PAGE_SIZE);
98
+ }
99
+ function clampPage(raw) {
100
+ const n = Number(raw);
101
+ if (!Number.isFinite(n) || n < 1)
102
+ return DEFAULT_PAGE;
103
+ return Math.floor(n);
104
+ }
105
+ export async function runListingProcessor(body, ctx) {
106
+ if (!body || typeof body.collection !== "string") {
107
+ throw new ListingError(400, "Missing collection");
108
+ }
109
+ const lister = LISTERS[body.collection];
110
+ if (!lister) {
111
+ throw new ListingError(400, `Unsupported collection: ${body.collection}. Supported: ${SUPPORTED_COLLECTIONS.join(",")}`);
112
+ }
113
+ const cursorPage = decodeCursor(body.cursor);
114
+ const page = cursorPage ?? clampPage(body.p);
115
+ const pageSize = clampPageSize(body.ps);
116
+ const result = await lister({
117
+ filters: body.f ?? "",
118
+ sorts: body.s ?? DEFAULT_SORT,
119
+ page: String(page),
120
+ pageSize: String(pageSize),
121
+ }, body.baseOpts ?? {});
122
+ ctx.logger.info("listing served", {
123
+ collection: body.collection,
124
+ page: result.page,
125
+ pageSize: result.pageSize,
126
+ total: result.total,
127
+ });
128
+ return {
129
+ items: result.items,
130
+ total: result.total,
131
+ page: result.page,
132
+ pageSize: result.pageSize,
133
+ totalPages: result.totalPages,
134
+ hasMore: result.hasMore,
135
+ cursor: result.hasMore ? encodeCursor(result.page + 1) : null,
136
+ };
137
+ }
138
+ export const supportedListingCollections = SUPPORTED_COLLECTIONS;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Core: media tmp cleanup.
3
+ *
4
+ * Sweeps Firebase Storage for stale objects under the tmp/ prefix. Layer 2 of
5
+ * the dual-layer scheme — Layer 1 is the form-level onAbort() DELETE call;
6
+ * this job mops up anything that escaped (crashes, expired sessions).
7
+ *
8
+ * Safety invariants:
9
+ * - Only touches objects whose name starts with `tmp/`.
10
+ * - Only deletes objects older than `ttlHours` (default 24).
11
+ * - Idempotent: 404s on delete are swallowed (Layer 1 already removed it).
12
+ */
13
+ import type { JobContext } from "../runtime/types";
14
+ export declare function runMediaTmpCleanup(ctx: JobContext): Promise<void>;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Core: media tmp cleanup.
3
+ *
4
+ * Sweeps Firebase Storage for stale objects under the tmp/ prefix. Layer 2 of
5
+ * the dual-layer scheme — Layer 1 is the form-level onAbort() DELETE call;
6
+ * this job mops up anything that escaped (crashes, expired sessions).
7
+ *
8
+ * Safety invariants:
9
+ * - Only touches objects whose name starts with `tmp/`.
10
+ * - Only deletes objects older than `ttlHours` (default 24).
11
+ * - Idempotent: 404s on delete are swallowed (Layer 1 already removed it).
12
+ */
13
+ import { getAdminStorageLite } from "../../../../providers/db-firebase/admin-storage-lite";
14
+ const TMP_PREFIX = "tmp/";
15
+ const DEFAULT_TTL_HOURS = 24;
16
+ function getBucket() {
17
+ const bucketName = process.env.FIREBASE_ADMIN_STORAGE_BUCKET?.trim() ??
18
+ process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET?.trim();
19
+ return bucketName ? getAdminStorageLite().bucket(bucketName) : getAdminStorageLite().bucket();
20
+ }
21
+ export async function runMediaTmpCleanup(ctx) {
22
+ const ttlHours = Number(ctx.env("MEDIA_TMP_TTL_HOURS") ?? DEFAULT_TTL_HOURS);
23
+ const cutoff = new Date(Date.now() - ttlHours * 60 * 60 * 1000);
24
+ ctx.logger.info("Starting media tmp cleanup", { prefix: TMP_PREFIX, ttlHours });
25
+ let scanned = 0;
26
+ let deleted = 0;
27
+ let skipped = 0;
28
+ let errors = 0;
29
+ try {
30
+ const bucket = getBucket();
31
+ const [files] = await bucket.getFiles({ prefix: TMP_PREFIX, autoPaginate: true });
32
+ scanned = files.length;
33
+ ctx.logger.info("Objects under tmp prefix", { count: scanned });
34
+ for (const file of files) {
35
+ try {
36
+ if (!file.name.startsWith(TMP_PREFIX)) {
37
+ skipped++;
38
+ continue;
39
+ }
40
+ const [metadata] = await file.getMetadata();
41
+ const updated = metadata.updated ?? metadata.timeCreated;
42
+ if (!updated) {
43
+ skipped++;
44
+ continue;
45
+ }
46
+ if (new Date(updated) >= cutoff) {
47
+ skipped++;
48
+ continue;
49
+ }
50
+ await file.delete();
51
+ deleted++;
52
+ }
53
+ catch (fileError) {
54
+ errors++;
55
+ const code = fileError?.code;
56
+ if (code === 404) {
57
+ continue;
58
+ }
59
+ ctx.logger.error("Failed to delete tmp file", fileError, { name: file.name });
60
+ }
61
+ }
62
+ }
63
+ catch (err) {
64
+ ctx.logger.error("Fatal error during media tmp cleanup", err);
65
+ throw err;
66
+ }
67
+ ctx.logger.info("Media tmp cleanup complete", { scanned, deleted, skipped, errors });
68
+ }
@@ -0,0 +1,2 @@
1
+ import type { JobContext } from "../runtime/types";
2
+ export declare function runNotificationPrune(ctx: JobContext): Promise<void>;
@@ -0,0 +1,13 @@
1
+ import { notificationRepository } from "../../../../repositories";
2
+ import { NOTIFICATION_TTL_DAYS } from "../handlers/messages";
3
+ import { batchDelete } from "../handlers/_helpers";
4
+ export async function runNotificationPrune(ctx) {
5
+ ctx.logger.info(`Pruning read notifications older than ${NOTIFICATION_TTL_DAYS} days`);
6
+ const refs = await notificationRepository.getOldReadRefs(NOTIFICATION_TTL_DAYS);
7
+ if (refs.length === 0) {
8
+ ctx.logger.info("No stale read notifications found");
9
+ return;
10
+ }
11
+ const deleted = await batchDelete(ctx, refs);
12
+ ctx.logger.info("Notification prune complete", { deleted });
13
+ }
@@ -0,0 +1,2 @@
1
+ import type { JobContext } from "../runtime/types";
2
+ export declare function runOfferExpiry(ctx: JobContext): Promise<void>;
@@ -0,0 +1,50 @@
1
+ import { offerRepository, notificationRepository } from "../../../../repositories";
2
+ export async function runOfferExpiry(ctx) {
3
+ ctx.logger.info("Starting offer expiry sweep");
4
+ let expiredOffers;
5
+ try {
6
+ expiredOffers = await offerRepository.findExpiredActive(ctx.now);
7
+ }
8
+ catch (err) {
9
+ ctx.logger.error("Failed to query expired offers", err);
10
+ throw err;
11
+ }
12
+ if (expiredOffers.length === 0) {
13
+ ctx.logger.info("No expired offers found");
14
+ return;
15
+ }
16
+ ctx.logger.info(`Found ${expiredOffers.length} expired offer(s) to process`);
17
+ const expiredIds = [];
18
+ for (const offer of expiredOffers) {
19
+ try {
20
+ expiredIds.push(offer.id);
21
+ await notificationRepository.create({
22
+ userId: offer.buyerUid,
23
+ type: "offer_expired",
24
+ priority: "normal",
25
+ title: "Offer expired",
26
+ message: `Your offer on "${offer.productTitle}" expired without a response.`,
27
+ relatedId: offer.id,
28
+ relatedType: "offer",
29
+ });
30
+ }
31
+ catch (err) {
32
+ ctx.logger.warn(`Failed to process expiry for offer ${offer.id}`, {
33
+ error: err instanceof Error ? err.message : String(err),
34
+ });
35
+ }
36
+ }
37
+ if (expiredIds.length > 0) {
38
+ try {
39
+ await offerRepository.expireMany(expiredIds);
40
+ }
41
+ catch (err) {
42
+ ctx.logger.error("Failed to batch-expire offers", err);
43
+ throw err;
44
+ }
45
+ }
46
+ ctx.logger.info("Offer expiry complete", {
47
+ processed: expiredIds.length,
48
+ skipped: expiredOffers.length - expiredIds.length,
49
+ });
50
+ }
@@ -0,0 +1,15 @@
1
+ import type { JobContext } from "../runtime/types";
2
+ export interface NewBid {
3
+ id: string;
4
+ productId: string;
5
+ productTitle: string;
6
+ userId: string;
7
+ userName: string;
8
+ bidAmount: number;
9
+ currency: string;
10
+ }
11
+ export interface HandleBidPlacedInput {
12
+ bidId: string;
13
+ bid: NewBid;
14
+ }
15
+ export declare function handleBidPlaced(input: HandleBidPlacedInput, ctx: JobContext): Promise<void>;
@@ -0,0 +1,59 @@
1
+ import { bidRepository, notificationRepository, productRepository, } from "../../../../repositories";
2
+ import { decryptPii } from "../../../../security/index";
3
+ import { getAdminRealtimeDb } from "../../../../providers/db-firebase";
4
+ import { BID_MESSAGES } from "../handlers/messages";
5
+ const BIDS_COLLECTION = "bids";
6
+ export async function handleBidPlaced(input, ctx) {
7
+ const { bidId, bid: newBid } = input;
8
+ newBid.userName = decryptPii(newBid.userName);
9
+ try {
10
+ const prevWinning = await bidRepository.getWinningBid(newBid.productId);
11
+ const batch = ctx.db.batch();
12
+ const newBidRef = ctx.db.collection(BIDS_COLLECTION).doc(bidId);
13
+ bidRepository.markWinning(batch, newBidRef);
14
+ let outbidUserId = null;
15
+ if (prevWinning && prevWinning.data.userId !== newBid.userId) {
16
+ outbidUserId = prevWinning.data.userId;
17
+ bidRepository.markOutbid(batch, prevWinning.ref);
18
+ notificationRepository.createInBatch(batch, {
19
+ userId: outbidUserId,
20
+ type: "bid_outbid",
21
+ priority: "high",
22
+ title: BID_MESSAGES.OUTBID_TITLE,
23
+ message: BID_MESSAGES.OUTBID_MESSAGE(newBid.productTitle, newBid.currency, newBid.bidAmount),
24
+ relatedId: newBid.productId,
25
+ relatedType: "product",
26
+ });
27
+ }
28
+ productRepository.incrementBidCountInBatch(batch, newBid.productId, newBid.bidAmount);
29
+ await batch.commit();
30
+ try {
31
+ if (outbidUserId) {
32
+ await getAdminRealtimeDb()
33
+ .ref(`notifications/${outbidUserId}`)
34
+ .push({
35
+ type: "bid_outbid",
36
+ title: BID_MESSAGES.OUTBID_TITLE,
37
+ message: BID_MESSAGES.OUTBID_MESSAGE(newBid.productTitle, newBid.currency, newBid.bidAmount),
38
+ timestamp: Date.now(),
39
+ read: false,
40
+ });
41
+ }
42
+ }
43
+ catch (rtdbError) {
44
+ ctx.logger.error("Realtime DB push failed (non-fatal)", rtdbError);
45
+ }
46
+ ctx.logger.info(`Bid placed on ${newBid.productId}`, {
47
+ bidId,
48
+ amount: newBid.bidAmount,
49
+ outbidUserId,
50
+ });
51
+ }
52
+ catch (error) {
53
+ ctx.logger.error("Error handling bid placement", error, {
54
+ bidId,
55
+ productId: newBid.productId,
56
+ });
57
+ throw error;
58
+ }
59
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Core: maintain DFS `position` + `subtreeSize` on every category write.
3
+ * CREATE → insert into parent's subtree + shift later siblings;
4
+ * DELETE → shift back; MOVE → mark `positionDirty` so the nightly reconcile
5
+ * job rebuilds.
6
+ */
7
+ import type { JobContext } from "../runtime/types";
8
+ export type CategoryDoc = Record<string, unknown>;
9
+ export interface HandleCategoryWriteInput {
10
+ categoryId: string;
11
+ before: CategoryDoc | null;
12
+ after: CategoryDoc | null;
13
+ }
14
+ export declare function handleCategoryWrite(input: HandleCategoryWriteInput, ctx: JobContext): Promise<void>;
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Core: maintain DFS `position` + `subtreeSize` on every category write.
3
+ * CREATE → insert into parent's subtree + shift later siblings;
4
+ * DELETE → shift back; MOVE → mark `positionDirty` so the nightly reconcile
5
+ * job rebuilds.
6
+ */
7
+ import { FieldValue } from "firebase-admin/firestore";
8
+ import { BATCH_LIMIT } from "../handlers/messages";
9
+ const CATEGORIES = "categories";
10
+ async function shiftPositions(ctx, threshold, delta, excludeId) {
11
+ const snap = await ctx.db.collection(CATEGORIES).where("position", ">=", threshold).get();
12
+ const docs = snap.docs.filter((d) => d.id !== excludeId && d.data().position >= threshold);
13
+ if (docs.length === 0)
14
+ return 0;
15
+ for (let i = 0; i < docs.length; i += BATCH_LIMIT) {
16
+ const batch = ctx.db.batch();
17
+ for (const doc of docs.slice(i, i + BATCH_LIMIT)) {
18
+ batch.update(doc.ref, {
19
+ position: doc.data().position + delta,
20
+ updatedAt: new Date(),
21
+ });
22
+ }
23
+ await batch.commit();
24
+ }
25
+ return docs.length;
26
+ }
27
+ async function adjustAncestorSubtreeSize(ctx, ancestorIds, delta) {
28
+ if (ancestorIds.length === 0)
29
+ return;
30
+ for (let i = 0; i < ancestorIds.length; i += BATCH_LIMIT) {
31
+ const batch = ctx.db.batch();
32
+ for (const id of ancestorIds.slice(i, i + BATCH_LIMIT)) {
33
+ batch.update(ctx.db.collection(CATEGORIES).doc(id), {
34
+ subtreeSize: FieldValue.increment(delta),
35
+ updatedAt: new Date(),
36
+ });
37
+ }
38
+ await batch.commit();
39
+ }
40
+ }
41
+ async function getMaxPosition(ctx, excludeId) {
42
+ const snap = await ctx.db
43
+ .collection(CATEGORIES)
44
+ .orderBy("position", "desc")
45
+ .limit(excludeId ? 2 : 1)
46
+ .get();
47
+ for (const doc of snap.docs) {
48
+ if (doc.id === excludeId)
49
+ continue;
50
+ return doc.data().position ?? 0;
51
+ }
52
+ return 0;
53
+ }
54
+ export async function handleCategoryWrite(input, ctx) {
55
+ const { categoryId, before, after } = input;
56
+ const isCreate = !before && !!after;
57
+ const isDelete = !!before && !after;
58
+ const isUpdate = !!before && !!after;
59
+ try {
60
+ if (isCreate) {
61
+ const parentIds = after.parentIds ?? [];
62
+ const parentId = parentIds.length > 0 ? parentIds[parentIds.length - 1] : null;
63
+ let insertPosition;
64
+ if (parentId) {
65
+ const parentSnap = await ctx.db.collection(CATEGORIES).doc(parentId).get();
66
+ if (!parentSnap.exists) {
67
+ ctx.logger.warn("Parent not found, appending at end", { categoryId, parentId });
68
+ insertPosition = (await getMaxPosition(ctx, categoryId)) + 1;
69
+ }
70
+ else {
71
+ const p = parentSnap.data();
72
+ const parentPos = p.position ?? 0;
73
+ const parentSize = p.subtreeSize ?? 1;
74
+ insertPosition = parentPos + parentSize;
75
+ }
76
+ }
77
+ else {
78
+ insertPosition = (await getMaxPosition(ctx, categoryId)) + 1;
79
+ }
80
+ const shifted = await shiftPositions(ctx, insertPosition, +1, categoryId);
81
+ await ctx.db.collection(CATEGORIES).doc(categoryId).update({
82
+ position: insertPosition,
83
+ subtreeSize: 1,
84
+ updatedAt: new Date(),
85
+ });
86
+ await adjustAncestorSubtreeSize(ctx, parentIds, +1);
87
+ ctx.logger.info("Category created — position assigned", {
88
+ categoryId,
89
+ position: insertPosition,
90
+ parentId,
91
+ shifted,
92
+ });
93
+ }
94
+ else if (isDelete) {
95
+ const deletedPos = before.position ?? 0;
96
+ const deletedSize = before.subtreeSize ?? 1;
97
+ const parentIds = before.parentIds ?? [];
98
+ if (deletedPos === 0) {
99
+ ctx.logger.warn("Deleted category had no position — skipping shift", { categoryId });
100
+ return;
101
+ }
102
+ const shifted = await shiftPositions(ctx, deletedPos + deletedSize, -deletedSize);
103
+ await adjustAncestorSubtreeSize(ctx, parentIds, -deletedSize);
104
+ ctx.logger.info("Category deleted — positions shifted", {
105
+ categoryId,
106
+ position: deletedPos,
107
+ subtreeSize: deletedSize,
108
+ shifted,
109
+ });
110
+ }
111
+ else if (isUpdate) {
112
+ const beforeParents = before.parentIds ?? [];
113
+ const afterParents = after.parentIds ?? [];
114
+ const beforeParent = beforeParents[beforeParents.length - 1] ?? null;
115
+ const afterParent = afterParents[afterParents.length - 1] ?? null;
116
+ if (beforeParent !== afterParent) {
117
+ await ctx.db
118
+ .collection(CATEGORIES)
119
+ .doc(categoryId)
120
+ .update({ positionDirty: true, updatedAt: new Date() });
121
+ ctx.logger.warn("Category moved — positionDirty flagged for nightly reconcile", {
122
+ categoryId,
123
+ fromParent: beforeParent,
124
+ toParent: afterParent,
125
+ });
126
+ }
127
+ }
128
+ }
129
+ catch (err) {
130
+ ctx.logger.error("Position update failed (non-fatal — will heal on next reconcile)", err, {
131
+ categoryId,
132
+ });
133
+ }
134
+ }
@@ -0,0 +1,18 @@
1
+ import type { JobContext } from "../runtime/types";
2
+ interface OrderItem {
3
+ title?: string;
4
+ name?: string;
5
+ }
6
+ export interface NewOrder {
7
+ buyerDisplayName?: string;
8
+ buyerId?: string;
9
+ items?: OrderItem[];
10
+ totalAmount?: number;
11
+ storeId?: string;
12
+ }
13
+ export interface HandleOrderCreateInput {
14
+ orderId: string;
15
+ order: NewOrder;
16
+ }
17
+ export declare function handleOrderCreate(input: HandleOrderCreateInput, ctx: JobContext): Promise<void>;
18
+ export {};
@@ -0,0 +1,78 @@
1
+ import { storeRepository, userRepository } from "../../../../repositories";
2
+ import { decryptPii } from "../../../../security/index";
3
+ import { sendWhatsAppBusinessMessage, buildPurchaseAnnouncementMessage, } from "../../../../features/whatsapp-bot/server";
4
+ async function sendAnnouncement(ctx, toPhone, message, phoneNumberId, accessToken, label, orderId) {
5
+ try {
6
+ const sent = await sendWhatsAppBusinessMessage({
7
+ toPhone,
8
+ message,
9
+ phoneNumberId,
10
+ accessToken,
11
+ });
12
+ if (sent) {
13
+ ctx.logger.info(`Announcement sent to ${label}`, {
14
+ orderId,
15
+ toPhone: `...${toPhone.slice(-4)}`,
16
+ });
17
+ }
18
+ else {
19
+ ctx.logger.error(`Announcement delivery failed for ${label} (non-fatal)`, null, { orderId });
20
+ }
21
+ }
22
+ catch (err) {
23
+ ctx.logger.error(`Announcement send threw for ${label} (non-fatal)`, err, { orderId });
24
+ }
25
+ }
26
+ export async function handleOrderCreate(input, ctx) {
27
+ const { orderId, order } = input;
28
+ const phoneNumberId = ctx.env("WHATSAPP_PHONE_NUMBER_ID") ?? "";
29
+ const accessToken = ctx.env("WHATSAPP_CLOUD_API_TOKEN") ?? "";
30
+ if (!phoneNumberId || !accessToken) {
31
+ ctx.logger.info("WhatsApp Cloud API not configured — skipping announcement", { orderId });
32
+ return;
33
+ }
34
+ const items = order.items ?? [];
35
+ const firstItem = items[0];
36
+ const firstItemName = firstItem?.title ?? firstItem?.name ?? "an item";
37
+ const additionalItemCount = Math.max(0, items.length - 1);
38
+ const buyerName = order.buyerDisplayName ?? "A customer";
39
+ const message = buildPurchaseAnnouncementMessage({
40
+ buyerName,
41
+ firstItemName,
42
+ additionalItemCount,
43
+ totalAmount: order.totalAmount ?? 0,
44
+ orderId,
45
+ });
46
+ const adminNumbersRaw = ctx.env("WHATSAPP_ADMIN_NOTIFY_NUMBERS") ?? "";
47
+ const adminNumbers = adminNumbersRaw
48
+ .split(",")
49
+ .map((n) => n.trim().replace(/\D/g, ""))
50
+ .filter(Boolean);
51
+ for (const num of adminNumbers) {
52
+ await sendAnnouncement(ctx, num, message, phoneNumberId, accessToken, "admin", orderId);
53
+ }
54
+ const storeId = order.storeId;
55
+ if (storeId) {
56
+ try {
57
+ const store = await storeRepository.findBySlug(storeId);
58
+ if (store?.ownerId) {
59
+ const owner = await userRepository.findById(store.ownerId);
60
+ const encryptedPhone = owner?.phoneNumber;
61
+ if (encryptedPhone) {
62
+ const ownerPhone = decryptPii(encryptedPhone);
63
+ if (ownerPhone) {
64
+ await sendAnnouncement(ctx, ownerPhone, message, phoneNumberId, accessToken, "store-owner", orderId);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ catch (err) {
70
+ ctx.logger.error("Store owner lookup failed (non-fatal)", err, { orderId, storeId });
71
+ }
72
+ }
73
+ ctx.logger.info(`Order announcement complete`, {
74
+ orderId,
75
+ adminCount: adminNumbers.length,
76
+ storeId: storeId ?? "unknown",
77
+ });
78
+ }
@@ -0,0 +1,19 @@
1
+ import type { JobContext } from "../runtime/types";
2
+ type OrderStatus = "pending" | "confirmed" | "shipped" | "delivered" | "cancelled" | "returned";
3
+ export type OrderAfter = {
4
+ status: OrderStatus;
5
+ userId: string;
6
+ userEmail: string;
7
+ productTitle: string;
8
+ trackingNumber?: string;
9
+ };
10
+ export type OrderBefore = {
11
+ status: OrderStatus;
12
+ };
13
+ export interface HandleOrderStatusChangeInput {
14
+ orderId: string;
15
+ before: OrderBefore | null;
16
+ after: OrderAfter | null;
17
+ }
18
+ export declare function handleOrderStatusChange(input: HandleOrderStatusChangeInput, ctx: JobContext): Promise<void>;
19
+ export {};