@mohasinac/appkit 4.11.1 → 4.11.3

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 (212) hide show
  1. package/dist/_internal/server/features/checkout/actions.d.ts +4 -0
  2. package/dist/_internal/server/features/checkout/actions.js +138 -27
  3. package/dist/_internal/server/features/checkout/data.d.ts +10 -0
  4. package/dist/_internal/server/features/checkout/locked-lines.d.ts +30 -0
  5. package/dist/_internal/server/features/checkout/locked-lines.js +116 -0
  6. package/dist/_internal/server/features/orders/adapters.js +7 -0
  7. package/dist/_internal/server/features/products/data.d.ts +12 -3
  8. package/dist/_internal/server/features/products/data.js +55 -4
  9. package/dist/_internal/server/features/products/index.d.ts +2 -1
  10. package/dist/_internal/server/features/products/index.js +2 -1
  11. package/dist/_internal/server/features/products/list-public.d.ts +130 -0
  12. package/dist/_internal/server/features/products/list-public.js +375 -0
  13. package/dist/_internal/server/features/reviews/data.d.ts +1 -1
  14. package/dist/_internal/server/features/reviews/data.js +3 -2
  15. package/dist/_internal/server/features/tester/visibility.js +3 -3
  16. package/dist/_internal/server/jobs/core/auctionSettlement.js +89 -16
  17. package/dist/_internal/server/jobs/core/offerExpiry.js +116 -4
  18. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +1 -1
  19. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +4 -1
  20. package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +2 -0
  21. package/dist/_internal/server/jobs/handlers/_helpers.js +4 -1
  22. package/dist/_internal/server/jobs/handlers/messages.d.ts +5 -0
  23. package/dist/_internal/server/jobs/handlers/messages.js +5 -0
  24. package/dist/_internal/shared/checkout/lanes.d.ts +41 -0
  25. package/dist/_internal/shared/checkout/lanes.js +106 -0
  26. package/dist/_internal/shared/checkout/order-math.d.ts +19 -0
  27. package/dist/_internal/shared/checkout/order-math.js +30 -6
  28. package/dist/_internal/shared/features/promotions/schema.d.ts +0 -16
  29. package/dist/_internal/shared/features/promotions/schema.js +0 -2
  30. package/dist/_internal/shared/features/reviews/config.d.ts +8 -1
  31. package/dist/_internal/shared/features/reviews/config.js +8 -1
  32. package/dist/_internal/shared/listing-types/_registry.d.ts +88 -1
  33. package/dist/_internal/shared/listing-types/_registry.js +63 -1
  34. package/dist/_internal/shared/listing-types/art/config.d.ts +59 -0
  35. package/dist/_internal/shared/listing-types/art/config.js +12 -0
  36. package/dist/_internal/shared/listing-types/auction/config.d.ts +53 -0
  37. package/dist/_internal/shared/listing-types/auction/config.js +17 -0
  38. package/dist/_internal/shared/listing-types/classified/config.d.ts +59 -0
  39. package/dist/_internal/shared/listing-types/classified/config.js +14 -0
  40. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +59 -0
  41. package/dist/_internal/shared/listing-types/digital-code/config.js +12 -0
  42. package/dist/_internal/shared/listing-types/feature-flags.d.ts +1 -0
  43. package/dist/_internal/shared/listing-types/feature-flags.js +24 -10
  44. package/dist/_internal/shared/listing-types/live/config.d.ts +59 -0
  45. package/dist/_internal/shared/listing-types/live/config.js +14 -0
  46. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +110 -0
  47. package/dist/_internal/shared/listing-types/pre-order/config.js +14 -0
  48. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +44 -0
  49. package/dist/_internal/shared/listing-types/prize-draw/config.js +10 -0
  50. package/dist/_internal/shared/listing-types/standard/config.d.ts +59 -0
  51. package/dist/_internal/shared/listing-types/standard/config.js +9 -0
  52. package/dist/_internal/shared/listing-types/stickers/config.d.ts +59 -0
  53. package/dist/_internal/shared/listing-types/stickers/config.js +12 -0
  54. package/dist/client.d.ts +7 -2
  55. package/dist/client.js +8 -2
  56. package/dist/constants/field-names.d.ts +12 -0
  57. package/dist/constants/field-names.js +12 -0
  58. package/dist/constants/table-keys.d.ts +2 -0
  59. package/dist/constants/table-keys.js +2 -0
  60. package/dist/features/account/components/NotificationBell.js +1 -0
  61. package/dist/features/account/components/UserOffersPanel.js +8 -1
  62. package/dist/features/account/components/UserOrdersView.js +27 -5
  63. package/dist/features/admin/actions/notification-actions.js +1 -1
  64. package/dist/features/admin/components/AdminAddressesView.js +3 -1
  65. package/dist/features/admin/components/AdminCouponEditorView.js +1 -4
  66. package/dist/features/admin/components/AdminPaymentMethodsView.js +3 -1
  67. package/dist/features/admin/components/AdminProductsView.js +34 -18
  68. package/dist/features/admin/constants/filter-tabs.d.ts +26 -9
  69. package/dist/features/admin/constants/filter-tabs.js +22 -9
  70. package/dist/features/admin/schemas/firestore.d.ts +2 -1
  71. package/dist/features/admin/schemas/firestore.js +1 -0
  72. package/dist/features/auctions/actions/bid-actions.d.ts +11 -1
  73. package/dist/features/auctions/actions/bid-actions.js +29 -15
  74. package/dist/features/auctions/components/AuctionBidsTable.js +6 -2
  75. package/dist/features/auctions/components/AuctionBottomActions.js +1 -0
  76. package/dist/features/auctions/components/AuctionDetailPageView.js +13 -11
  77. package/dist/features/auctions/components/AuctionsListView.js +12 -53
  78. package/dist/features/auctions/components/PlaceBidFormClient.js +10 -1
  79. package/dist/features/auctions/repository/bid.repository.d.ts +15 -0
  80. package/dist/features/auctions/repository/bid.repository.js +19 -0
  81. package/dist/features/auctions/schemas/firestore.d.ts +11 -1
  82. package/dist/features/auctions/schemas/firestore.js +1 -0
  83. package/dist/features/cart/actions/cart-actions.d.ts +11 -0
  84. package/dist/features/cart/actions/cart-actions.js +24 -0
  85. package/dist/features/cart/repository/cart.repository.d.ts +24 -1
  86. package/dist/features/cart/repository/cart.repository.js +71 -6
  87. package/dist/features/cart/schemas/firestore.d.ts +23 -4
  88. package/dist/features/categories/components/BrandDetailTabs.js +31 -11
  89. package/dist/features/categories/components/CategoryDetailTabs.js +27 -7
  90. package/dist/features/categories/components/CategoryProductsListing.d.ts +9 -1
  91. package/dist/features/categories/components/CategoryProductsListing.js +5 -2
  92. package/dist/features/classified/components/ClassifiedDetailPageView.js +2 -1
  93. package/dist/features/contact/email.js +56 -1
  94. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +17 -16
  95. package/dist/features/homepage/components/FeaturedResultsSection.js +1 -1
  96. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  97. package/dist/features/homepage/components/ShopByCategorySection.js +1 -1
  98. package/dist/features/layout/AppLayoutShell.js +9 -2
  99. package/dist/features/layout/BottomActions.js +26 -3
  100. package/dist/features/layout/BottomActionsContext.d.ts +14 -0
  101. package/dist/features/layout/BottomActionsContext.js +13 -1
  102. package/dist/features/layout/hooks/useBottomActions.d.ts +6 -1
  103. package/dist/features/layout/hooks/useBottomActions.js +4 -1
  104. package/dist/features/layout/index.d.ts +1 -1
  105. package/dist/features/live/components/LiveItemDetailPageView.js +7 -6
  106. package/dist/features/orders/repository/orders.repository.d.ts +4 -15
  107. package/dist/features/orders/repository/orders.repository.js +4 -27
  108. package/dist/features/orders/types/index.d.ts +16 -0
  109. package/dist/features/orders/utils/order-splitter.js +14 -2
  110. package/dist/features/pre-orders/components/PreOrderBottomActions.d.ts +1 -1
  111. package/dist/features/pre-orders/components/PreOrderBottomActions.js +3 -19
  112. package/dist/features/pre-orders/components/PreOrdersListView.js +11 -39
  113. package/dist/features/products/components/ArtStickersListView.js +10 -49
  114. package/dist/features/products/components/AuctionsIndexListing.js +1 -2
  115. package/dist/features/products/components/ListingBottomActions.d.ts +28 -0
  116. package/dist/features/products/components/ListingBottomActions.js +25 -0
  117. package/dist/features/products/components/PrizeDrawBottomActions.d.ts +1 -1
  118. package/dist/features/products/components/PrizeDrawBottomActions.js +3 -21
  119. package/dist/features/products/components/ProductDetailActions.js +4 -0
  120. package/dist/features/products/components/ProductDetailPageView.js +7 -7
  121. package/dist/features/products/components/ProductsIndexPageView.js +9 -62
  122. package/dist/features/products/constants/listing-tabs.d.ts +43 -198
  123. package/dist/features/products/constants/listing-tabs.js +71 -58
  124. package/dist/features/products/constants/sieve.d.ts +104 -1
  125. package/dist/features/products/constants/sieve.js +27 -7
  126. package/dist/features/products/repository/products.repository.d.ts +45 -1
  127. package/dist/features/products/repository/products.repository.js +67 -8
  128. package/dist/features/products/utils/listing-badge-variant.d.ts +20 -1
  129. package/dist/features/products/utils/listing-badge-variant.js +26 -1
  130. package/dist/features/products/utils/listing-type.d.ts +24 -0
  131. package/dist/features/products/utils/listing-type.js +48 -0
  132. package/dist/features/promotions/actions/coupon-actions.d.ts +7 -0
  133. package/dist/features/promotions/actions/coupon-actions.js +12 -1
  134. package/dist/features/promotions/actions/coupon-stacking.d.ts +24 -0
  135. package/dist/features/promotions/actions/coupon-stacking.js +21 -0
  136. package/dist/features/promotions/actions/index.d.ts +1 -0
  137. package/dist/features/promotions/actions/index.js +1 -0
  138. package/dist/features/promotions/actions/seller-coupon-actions.d.ts +0 -1
  139. package/dist/features/promotions/actions/seller-coupon-actions.js +0 -1
  140. package/dist/features/promotions/components/CouponHelpDetails.d.ts +20 -0
  141. package/dist/features/promotions/components/CouponHelpDetails.js +17 -0
  142. package/dist/features/promotions/components/CouponsIndexListing.js +2 -1
  143. package/dist/features/promotions/components/index.d.ts +2 -0
  144. package/dist/features/promotions/components/index.js +1 -0
  145. package/dist/features/promotions/constants/coupon-help.d.ts +27 -0
  146. package/dist/features/promotions/constants/coupon-help.js +42 -0
  147. package/dist/features/promotions/repository/coupons.repository.d.ts +10 -1
  148. package/dist/features/promotions/repository/coupons.repository.js +22 -8
  149. package/dist/features/promotions/schemas/firestore.d.ts +0 -1
  150. package/dist/features/promotions/schemas/firestore.js +1 -1
  151. package/dist/features/promotions/schemas/index.d.ts +0 -20
  152. package/dist/features/promotions/schemas/index.js +0 -1
  153. package/dist/features/reviews/actions/review-actions.js +5 -1
  154. package/dist/features/reviews/components/ReviewDetailPageView.js +2 -1
  155. package/dist/features/reviews/components/ReviewFilters.d.ts +7 -1
  156. package/dist/features/reviews/components/ReviewFilters.js +4 -3
  157. package/dist/features/reviews/components/ReviewsIndexListing.d.ts +6 -0
  158. package/dist/features/reviews/components/ReviewsIndexListing.js +9 -109
  159. package/dist/features/reviews/components/ReviewsListingPanel.d.ts +41 -0
  160. package/dist/features/reviews/components/ReviewsListingPanel.js +226 -0
  161. package/dist/features/reviews/components/index.d.ts +2 -0
  162. package/dist/features/reviews/components/index.js +1 -0
  163. package/dist/features/reviews/hooks/useReviews.d.ts +8 -0
  164. package/dist/features/reviews/hooks/useReviews.js +14 -6
  165. package/dist/features/reviews/repository/reviews.repository.d.ts +29 -1
  166. package/dist/features/reviews/repository/reviews.repository.js +77 -41
  167. package/dist/features/reviews/types/index.d.ts +8 -1
  168. package/dist/features/seller/actions/offer-actions.d.ts +6 -0
  169. package/dist/features/seller/actions/offer-actions.js +8 -9
  170. package/dist/features/seller/components/SellerOffersView.d.ts +6 -1
  171. package/dist/features/seller/components/SellerOffersView.js +59 -8
  172. package/dist/features/seller/components/SellerProductsCards.js +2 -2
  173. package/dist/features/seller/components/SellerProductsView.js +21 -18
  174. package/dist/features/seller/repository/offer.repository.d.ts +18 -2
  175. package/dist/features/seller/repository/offer.repository.js +38 -2
  176. package/dist/features/seller/schemas/firestore.d.ts +7 -2
  177. package/dist/features/seller/schemas/firestore.js +3 -0
  178. package/dist/features/seller/schemas/offer-forms.d.ts +12 -0
  179. package/dist/features/seller/schemas/offer-forms.js +28 -0
  180. package/dist/features/stores/actions/store-query-actions.js +1 -1
  181. package/dist/features/stores/components/StoreAuctionsListing.js +5 -11
  182. package/dist/features/stores/components/StorePreOrdersListing.js +6 -11
  183. package/dist/features/stores/components/StoreReviewsListing.d.ts +4 -0
  184. package/dist/features/stores/components/StoreReviewsListing.js +7 -108
  185. package/dist/features/stores/schemas/index.d.ts +2 -2
  186. package/dist/features/tester/seed-data/coupons-tester-seed-data.js +3 -3
  187. package/dist/features/tester/seed-data/index.d.ts +1 -0
  188. package/dist/features/tester/seed-data/index.js +1 -0
  189. package/dist/features/tester/seed-data/offers-tester-seed-data.d.ts +2 -0
  190. package/dist/features/tester/seed-data/offers-tester-seed-data.js +61 -0
  191. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +337 -1
  192. package/dist/index.d.ts +11 -4
  193. package/dist/index.js +15 -3
  194. package/dist/react/hooks/useListingTypeFlags.d.ts +12 -19
  195. package/dist/react/hooks/useListingTypeFlags.js +4 -9
  196. package/dist/schemas/registry.d.ts +0 -12
  197. package/dist/seed/claimed-coupons-seed-data.js +3 -3
  198. package/dist/seed/coupons-seed-data.js +29 -10
  199. package/dist/seed/faq-seed-data.js +2 -2
  200. package/dist/seed/manifest.js +2 -2
  201. package/dist/server-entry.d.ts +1 -0
  202. package/dist/server-entry.js +1 -0
  203. package/dist/server.d.ts +1 -0
  204. package/dist/server.js +3 -0
  205. package/dist/styles.css +44 -39
  206. package/dist/tailwind-utilities.css +1 -1
  207. package/dist/ui/components/FilterChipGroup.d.ts +21 -3
  208. package/dist/ui/components/FilterChipGroup.js +33 -4
  209. package/dist/ui/components/HorizontalScroller.d.ts +1 -2
  210. package/dist/ui/components/HorizontalScroller.js +9 -5
  211. package/dist/ui/components/HorizontalScroller.style.css +43 -38
  212. package/package.json +1 -1
@@ -1389,10 +1389,8 @@ export declare const SCHEMAS: {
1389
1389
  excludeProducts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
1390
1390
  excludeCategories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
1391
1391
  firstTimeUserOnly: import("zod").ZodBoolean;
1392
- combineWithSellerCoupons: import("zod").ZodBoolean;
1393
1392
  }, "strip", import("zod").ZodTypeAny, {
1394
1393
  firstTimeUserOnly: boolean;
1395
- combineWithSellerCoupons: boolean;
1396
1394
  applicableProducts?: string[] | undefined;
1397
1395
  applicableCategories?: string[] | undefined;
1398
1396
  applicableSellers?: string[] | undefined;
@@ -1400,7 +1398,6 @@ export declare const SCHEMAS: {
1400
1398
  excludeCategories?: string[] | undefined;
1401
1399
  }, {
1402
1400
  firstTimeUserOnly: boolean;
1403
- combineWithSellerCoupons: boolean;
1404
1401
  applicableProducts?: string[] | undefined;
1405
1402
  applicableCategories?: string[] | undefined;
1406
1403
  applicableSellers?: string[] | undefined;
@@ -1418,7 +1415,6 @@ export declare const SCHEMAS: {
1418
1415
  };
1419
1416
  restrictions: {
1420
1417
  firstTimeUserOnly: boolean;
1421
- combineWithSellerCoupons: boolean;
1422
1418
  applicableProducts?: string[] | undefined;
1423
1419
  applicableCategories?: string[] | undefined;
1424
1420
  applicableSellers?: string[] | undefined;
@@ -1438,7 +1434,6 @@ export declare const SCHEMAS: {
1438
1434
  };
1439
1435
  restrictions: {
1440
1436
  firstTimeUserOnly: boolean;
1441
- combineWithSellerCoupons: boolean;
1442
1437
  applicableProducts?: string[] | undefined;
1443
1438
  applicableCategories?: string[] | undefined;
1444
1439
  applicableSellers?: string[] | undefined;
@@ -1499,7 +1494,6 @@ export declare const SCHEMAS: {
1499
1494
  };
1500
1495
  restrictions: {
1501
1496
  firstTimeUserOnly: boolean;
1502
- combineWithSellerCoupons: boolean;
1503
1497
  applicableProducts?: string[] | undefined;
1504
1498
  applicableCategories?: string[] | undefined;
1505
1499
  applicableSellers?: string[] | undefined;
@@ -1540,7 +1534,6 @@ export declare const SCHEMAS: {
1540
1534
  };
1541
1535
  restrictions: {
1542
1536
  firstTimeUserOnly: boolean;
1543
- combineWithSellerCoupons: boolean;
1544
1537
  applicableProducts?: string[] | undefined;
1545
1538
  applicableCategories?: string[] | undefined;
1546
1539
  applicableSellers?: string[] | undefined;
@@ -1812,10 +1805,8 @@ export declare const SCHEMAS: {
1812
1805
  excludeProducts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
1813
1806
  excludeCategories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
1814
1807
  firstTimeUserOnly: import("zod").ZodBoolean;
1815
- combineWithSellerCoupons: import("zod").ZodBoolean;
1816
1808
  }, "strip", import("zod").ZodTypeAny, {
1817
1809
  firstTimeUserOnly: boolean;
1818
- combineWithSellerCoupons: boolean;
1819
1810
  applicableProducts?: string[] | undefined;
1820
1811
  applicableCategories?: string[] | undefined;
1821
1812
  applicableSellers?: string[] | undefined;
@@ -1823,7 +1814,6 @@ export declare const SCHEMAS: {
1823
1814
  excludeCategories?: string[] | undefined;
1824
1815
  }, {
1825
1816
  firstTimeUserOnly: boolean;
1826
- combineWithSellerCoupons: boolean;
1827
1817
  applicableProducts?: string[] | undefined;
1828
1818
  applicableCategories?: string[] | undefined;
1829
1819
  applicableSellers?: string[] | undefined;
@@ -1884,7 +1874,6 @@ export declare const SCHEMAS: {
1884
1874
  };
1885
1875
  restrictions: {
1886
1876
  firstTimeUserOnly: boolean;
1887
- combineWithSellerCoupons: boolean;
1888
1877
  applicableProducts?: string[] | undefined;
1889
1878
  applicableCategories?: string[] | undefined;
1890
1879
  applicableSellers?: string[] | undefined;
@@ -1943,7 +1932,6 @@ export declare const SCHEMAS: {
1943
1932
  };
1944
1933
  restrictions: {
1945
1934
  firstTimeUserOnly: boolean;
1946
- combineWithSellerCoupons: boolean;
1947
1935
  applicableProducts?: string[] | undefined;
1948
1936
  applicableCategories?: string[] | undefined;
1949
1937
  applicableSellers?: string[] | undefined;
@@ -30,7 +30,7 @@ export const claimedCouponsSeedData = [
30
30
  type: "percentage",
31
31
  scope: "admin",
32
32
  discount: { value: 10, maxDiscount: 500, minPurchase: 999 },
33
- restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: false },
33
+ restrictions: { firstTimeUserOnly: true },
34
34
  },
35
35
  status: "active",
36
36
  expiresAt: daysAhead(14),
@@ -51,7 +51,7 @@ export const claimedCouponsSeedData = [
51
51
  type: "fixed",
52
52
  scope: "admin",
53
53
  discount: { value: 500, minPurchase: 5000 },
54
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
54
+ restrictions: { firstTimeUserOnly: false },
55
55
  },
56
56
  status: "expired",
57
57
  expiresAt: daysAgo(5),
@@ -72,7 +72,7 @@ export const claimedCouponsSeedData = [
72
72
  type: "free_shipping",
73
73
  scope: "admin",
74
74
  discount: { value: 0, minPurchase: 499 },
75
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
75
+ restrictions: { firstTimeUserOnly: false },
76
76
  },
77
77
  status: "used",
78
78
  expiresAt: daysAhead(60),
@@ -28,7 +28,7 @@ export const couponsSeedData = [
28
28
  discount: { value: 10, maxDiscount: 200, minPurchase: 500 },
29
29
  usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 312 },
30
30
  validity: { startDate: daysAgo(90), endDate: daysAhead(180), isActive: true },
31
- restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: true },
31
+ restrictions: { firstTimeUserOnly: true },
32
32
  createdBy: "user-admin-letitrip",
33
33
  createdAt: daysAgo(90),
34
34
  updatedAt: daysAgo(5),
@@ -44,7 +44,7 @@ export const couponsSeedData = [
44
44
  discount: { value: 500, maxDiscount: 500, minPurchase: 2000 },
45
45
  usage: { totalLimit: 500, perUserLimit: 2, currentUsage: 187 },
46
46
  validity: { startDate: daysAgo(30), endDate: daysAhead(60), isActive: true },
47
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
47
+ restrictions: { firstTimeUserOnly: false },
48
48
  createdBy: "user-admin-letitrip",
49
49
  createdAt: daysAgo(30),
50
50
  updatedAt: daysAgo(3),
@@ -60,7 +60,7 @@ export const couponsSeedData = [
60
60
  discount: { value: 0, maxDiscount: 0, minPurchase: 499 },
61
61
  usage: { totalLimit: undefined, perUserLimit: 5, currentUsage: 1024 },
62
62
  validity: { startDate: daysAgo(60), endDate: daysAhead(120), isActive: true },
63
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
63
+ restrictions: { firstTimeUserOnly: false },
64
64
  createdBy: "user-admin-letitrip",
65
65
  createdAt: daysAgo(60),
66
66
  updatedAt: daysAgo(1),
@@ -76,7 +76,7 @@ export const couponsSeedData = [
76
76
  discount: { value: 20, maxDiscount: 400, minPurchase: 1000 },
77
77
  usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 89 },
78
78
  validity: { startDate: daysAgo(14), endDate: daysAhead(90), isActive: true },
79
- restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: false },
79
+ restrictions: { firstTimeUserOnly: true },
80
80
  createdBy: "user-admin-letitrip",
81
81
  createdAt: daysAgo(14),
82
82
  updatedAt: daysAgo(2),
@@ -92,7 +92,7 @@ export const couponsSeedData = [
92
92
  discount: { value: 200, maxDiscount: 200, minPurchase: 1000 },
93
93
  usage: { totalLimit: 1000, perUserLimit: 3, currentUsage: 456 },
94
94
  validity: { startDate: daysAgo(45), endDate: daysAhead(45), isActive: true },
95
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
95
+ restrictions: { firstTimeUserOnly: false },
96
96
  createdBy: "user-admin-letitrip",
97
97
  createdAt: daysAgo(45),
98
98
  updatedAt: daysAgo(1),
@@ -110,7 +110,7 @@ export const couponsSeedData = [
110
110
  discount: { value: 25, maxDiscount: 500, minPurchase: 1000 },
111
111
  usage: { totalLimit: 200, perUserLimit: 2, currentUsage: 67 },
112
112
  validity: { startDate: daysAgo(20), endDate: daysAhead(40), isActive: true },
113
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
113
+ restrictions: { firstTimeUserOnly: false },
114
114
  createdBy: "user-tyson-blader",
115
115
  createdAt: daysAgo(20),
116
116
  updatedAt: daysAgo(4),
@@ -130,7 +130,6 @@ export const couponsSeedData = [
130
130
  restrictions: {
131
131
  applicableCategories: ["category-beyblade-original", "category-beyblade-metal"],
132
132
  firstTimeUserOnly: false,
133
- combineWithSellerCoupons: false,
134
133
  },
135
134
  createdBy: "user-tyson-blader",
136
135
  createdAt: daysAgo(10),
@@ -153,7 +152,7 @@ export const couponsSeedData = [
153
152
  },
154
153
  usage: { totalLimit: 100, perUserLimit: 3, currentUsage: 34 },
155
154
  validity: { startDate: daysAgo(15), endDate: daysAhead(45), isActive: true },
156
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
155
+ restrictions: { firstTimeUserOnly: false },
157
156
  createdBy: "user-tyson-blader",
158
157
  createdAt: daysAgo(15),
159
158
  updatedAt: daysAgo(2),
@@ -173,7 +172,6 @@ export const couponsSeedData = [
173
172
  restrictions: {
174
173
  applicableCategories: ["category-beyblade-burst", "category-beyblade-x"],
175
174
  firstTimeUserOnly: false,
176
- combineWithSellerCoupons: false,
177
175
  },
178
176
  createdBy: "user-tyson-blader",
179
177
  createdAt: daysAgo(7),
@@ -194,11 +192,32 @@ export const couponsSeedData = [
194
192
  restrictions: {
195
193
  applicableCategories: ["bundle-original-collectors-set", "bundle-metal-fusion-duo", "bundle-burst-battlers-pack", "bundle-x-series-starter"],
196
194
  firstTimeUserOnly: false,
197
- combineWithSellerCoupons: false,
198
195
  },
199
196
  createdBy: "user-tyson-blader",
200
197
  createdAt: daysAgo(5),
201
198
  updatedAt: daysAgo(1),
202
199
  stats: { totalUses: 19, totalRevenue: 95000, totalDiscount: 11400 },
203
200
  },
201
+ // ── Seller coupon (LetItRip Official) ──────────────────────────────────────
202
+ // Deliberately on a SECOND store: every other seller coupon above belongs to
203
+ // store-beyblade-arena, so without this one the "one coupon per store, plus
204
+ // one platform-wide coupon" stacking rule could never be demonstrated on a
205
+ // real multi-store cart.
206
+ {
207
+ id: "coupon-official10",
208
+ code: "OFFICIAL10",
209
+ name: "LetItRip Official — 10% Off",
210
+ description: "10% off anything from the LetItRip Official store. Stacks with other stores' coupons and with a platform-wide coupon.",
211
+ type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
212
+ scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
213
+ storeId: "store-letitrip-official",
214
+ discount: { value: 10, maxDiscount: 300, minPurchase: 500 },
215
+ usage: { totalLimit: 300, perUserLimit: 2, currentUsage: 41 },
216
+ validity: { startDate: daysAgo(15), endDate: daysAhead(45), isActive: true },
217
+ restrictions: { firstTimeUserOnly: false },
218
+ createdBy: "user-admin-letitrip",
219
+ createdAt: daysAgo(15),
220
+ updatedAt: daysAgo(2),
221
+ stats: { totalUses: 41, totalRevenue: 205000, totalDiscount: 20500 },
222
+ },
204
223
  ];
@@ -256,7 +256,7 @@ export const faqSeedData = [
256
256
  {
257
257
  id: "faq-free-shipping-available",
258
258
  question: "Is free shipping available?",
259
- answer: html(`<p>Many sellers offer free shipping on orders above a certain amount. Look for the "Free Shipping" badge on product listings. You can also use the FREESHIP999 coupon for free shipping on orders ₹999+.</p>`),
259
+ answer: html(`<p>Many sellers offer free shipping on orders above a certain amount. Look for the "Free Shipping" badge on product listings. You can also use the FREESHIP499 coupon for free shipping on orders ₹499+.</p>`),
260
260
  category: "shipping_delivery",
261
261
  showOnHomepage: true,
262
262
  showInFooter: false,
@@ -543,7 +543,7 @@ export const faqSeedData = [
543
543
  {
544
544
  id: "faq-coupons-and-discounts",
545
545
  question: "How do I use coupons and discount codes?",
546
- answer: html(`<p>Enter your coupon code at checkout in the "Apply Coupon" field. Coupons may be platform-wide (from LetItRip) or store-specific (from individual sellers). Some coupons have minimum order requirements, expiry dates, or per-user limits. You cannot stack multiple coupons on a single order unless the coupon explicitly allows it.</p>`),
546
+ answer: html(`<p>Enter your coupon code at checkout in the "Apply Coupon" field. Coupons are either <strong>store coupons</strong> (issued by an individual seller) or <strong>platform-wide coupons</strong> (issued by LetItRip).</p><p><strong>Coupons stack.</strong> You can apply <strong>one coupon per store</strong> — so a cart with items from three stores can carry all three of those stores' coupons at once — <strong>plus one platform-wide coupon</strong> on top. A second coupon for the same store, or a second platform-wide coupon, is declined; remove the first one to swap it.</p><p>A store coupon only discounts that store's items. A platform-wide coupon is spread proportionally across every store in your cart. Because orders are placed per store, each store's order shows its own share of the discount.</p><p>Coupons may also have a minimum order value (measured against the items the coupon actually covers, not your whole cart), an expiry date, a per-user limit, or a total limit across all buyers. Coupons are re-checked when you place the order if one expired or ran out while it sat in your cart, it is removed and your total is recalculated before payment.</p>`),
547
547
  category: "orders_payment",
548
548
  showOnHomepage: false,
549
549
  showInFooter: false,
@@ -51,7 +51,7 @@ import { offersSeedData } from "./offers-seed-data";
51
51
  import { couponUsageSeedData } from "./coupon-usage-seed-data";
52
52
  import { claimedCouponsSeedData } from "./claimed-coupons-seed-data";
53
53
  // Tester sandbox seed fixtures live in ../features/tester/seed-data (isolated on purpose).
54
- import { testerChecklistSeedData, storesTesterSeedData, categoriesTesterSeedData, productsTesterSeedData, blogTesterSeedData, eventsTesterSeedData, couponsTesterSeedData, bidsTesterSeedData, ordersTesterSeedData, } from "../features/tester/seed-data";
54
+ import { testerChecklistSeedData, storesTesterSeedData, categoriesTesterSeedData, productsTesterSeedData, blogTesterSeedData, eventsTesterSeedData, couponsTesterSeedData, bidsTesterSeedData, ordersTesterSeedData, offersTesterSeedData, } from "../features/tester/seed-data";
55
55
  function asArr(items) {
56
56
  return items ?? [];
57
57
  }
@@ -199,7 +199,7 @@ export const SEED_MANIFEST = {
199
199
  ...f,
200
200
  name: f.label ?? f.id,
201
201
  }))),
202
- offers: pick(asArr(offersSeedData).map((o) => ({
202
+ offers: pick([...asArr(offersSeedData), ...asArr(offersTesterSeedData)].map((o) => ({
203
203
  ...o,
204
204
  name: o.productTitle ?? o.id,
205
205
  }))),
@@ -45,6 +45,7 @@ export { StoreClassifiedsPageView } from "./features/stores/components/StoreClas
45
45
  export { StoreDigitalCodesPageView } from "./features/stores/components/StoreDigitalCodesPageView";
46
46
  export { StoreLiveItemsPageView } from "./features/stores/components/StoreLiveItemsPageView";
47
47
  export { getProductForDetail, listSitemapProducts, type SitemapProduct, } from "./_internal/server/features/products/index";
48
+ export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, type PublicProductListInput, type PublicProductListResult, type PublicProductListOptions, type PublicProductExecutor, type PublicProductQuery, } from "./_internal/server/features/products/index";
48
49
  export { getAuctionForDetail, getProductFeaturesForAuction, } from "./_internal/server/features/auctions/index";
49
50
  export { getPreOrderForDetail, getProductFeaturesForPreOrder, } from "./_internal/server/features/pre-orders/index";
50
51
  export { getBrandForDetail, getBrandCategoryForDetail, createBrandAction, updateBrandAction, deleteBrandAction, toggleBrandActiveAction, } from "./_internal/server/features/brands/index";
@@ -51,6 +51,7 @@ export { StoreDigitalCodesPageView } from "./features/stores/components/StoreDig
51
51
  export { StoreLiveItemsPageView } from "./features/stores/components/StoreLiveItemsPageView";
52
52
  // S2: products data layer — deduped via React.cache()
53
53
  export { getProductForDetail, listSitemapProducts, } from "./_internal/server/features/products/index";
54
+ export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, } from "./_internal/server/features/products/index";
54
55
  // S3: auctions data layer — deduped via React.cache()
55
56
  export { getAuctionForDetail, getProductFeaturesForAuction, } from "./_internal/server/features/auctions/index";
56
57
  // S3: pre-orders data layer — deduped via React.cache()
package/dist/server.d.ts CHANGED
@@ -501,6 +501,7 @@ export type { GoogleReview, GoogleReviewsResult } from "./features/homepage/lib/
501
501
  export { GoogleReviewsSection } from "./features/homepage/components/GoogleReviewsSection";
502
502
  export type { GoogleReviewsSectionProps } from "./features/homepage/components/GoogleReviewsSection";
503
503
  export { getProductForDetail, listSitemapProducts, computeRelatedItems, toProductItem, type SitemapProduct, type RelatedItemsResult, } from "./_internal/server/features/products/index";
504
+ export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, type PublicProductListInput, type PublicProductListResult, type PublicProductListOptions, type PublicProductExecutor, type PublicProductQuery, } from "./_internal/server/features/products/index";
504
505
  export { getBundleForDetail, listBundleMembers, listFeaturedBundles, getRelatedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, type BundleDataOptions, type BundleMetadataOptions, type BundleOgData, } from "./_internal/server/features/bundles/index";
505
506
  export { getGroupsForProduct, getGroupsWithItemsForProduct, getGroupsForCategory, getGroupsForBrand } from "./_internal/server/features/grouped/index";
506
507
  export { getAuctionForDetail, getProductFeaturesForAuction } from "./_internal/server/features/auctions/index";
package/dist/server.js CHANGED
@@ -1353,6 +1353,9 @@ export { GoogleReviewsSection } from "./features/homepage/components/GoogleRevie
1353
1353
  // ---------------------------------------------------------------------------
1354
1354
  // Data layers — each wrapped in React.cache for request-scoped dedup
1355
1355
  export { getProductForDetail, listSitemapProducts, computeRelatedItems, toProductItem, } from "./_internal/server/features/products/index";
1356
+ // The single public-listing query — every SSR listing view and /api/products
1357
+ // share it so their filter semantics cannot drift (Root Cause #30).
1358
+ export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, } from "./_internal/server/features/products/index";
1356
1359
  // S-SBUNI-3/4 2026-05-13 — bundle data/metadata/og layer.
1357
1360
  export { getBundleForDetail, listBundleMembers, listFeaturedBundles, getRelatedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, } from "./_internal/server/features/bundles/index";
1358
1361
  export { getGroupsForProduct, getGroupsWithItemsForProduct, getGroupsForCategory, getGroupsForBrand } from "./_internal/server/features/grouped/index";