@mohasinac/appkit 4.64.1 → 4.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +4 -1
  3. package/dist/_internal/client/features/digital-code/DigitalContentPoolManager.js +5 -1
  4. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +1 -1
  5. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +3 -1
  6. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -2
  7. package/dist/_internal/client/features/lottery/LotteryAdminSlotView.js +5 -1
  8. package/dist/_internal/client/features/lottery/LotteryDetailView.js +6 -1
  9. package/dist/_internal/client/features/lottery/LotteryEntriesView.js +6 -1
  10. package/dist/_internal/client/features/lottery/LotteryListView.js +7 -1
  11. package/dist/_internal/client/features/lottery/LotteryPullForm.js +3 -1
  12. package/dist/_internal/client/features/lottery/LotterySlotGrid.js +3 -1
  13. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +6 -1
  14. package/dist/_internal/client/scaffolds/AppShell.js +3 -1
  15. package/dist/_internal/server/features/account/data.js +2 -1
  16. package/dist/_internal/server/features/auctions/service.js +1 -1
  17. package/dist/_internal/server/features/auth/capabilities.js +1 -1
  18. package/dist/_internal/server/features/auth/permissions.js +1 -1
  19. package/dist/_internal/server/features/brands/actions.js +1 -1
  20. package/dist/_internal/server/features/brands/data.js +1 -1
  21. package/dist/_internal/server/features/brands/service.js +1 -1
  22. package/dist/_internal/server/features/bundles/actions.js +1 -1
  23. package/dist/_internal/server/features/bundles/data.js +2 -2
  24. package/dist/_internal/server/features/cart/actions.js +1 -1
  25. package/dist/_internal/server/features/cart/data.js +1 -1
  26. package/dist/_internal/server/features/cart/service.js +1 -1
  27. package/dist/_internal/server/features/categories/data.js +1 -1
  28. package/dist/_internal/server/features/checkout/actions.js +20 -3
  29. package/dist/_internal/server/features/checkout/group-rule-revalidation.js +1 -1
  30. package/dist/_internal/server/features/checkout/locked-lines.js +1 -1
  31. package/dist/_internal/server/features/checkout/upi-resolution.js +2 -1
  32. package/dist/_internal/server/features/grouped/data.js +2 -1
  33. package/dist/_internal/server/features/history/actions.d.ts +1 -1
  34. package/dist/_internal/server/features/history/actions.js +1 -1
  35. package/dist/_internal/server/features/history/data.d.ts +1 -1
  36. package/dist/_internal/server/features/history/data.js +1 -1
  37. package/dist/_internal/server/features/item-requests/data.js +1 -1
  38. package/dist/_internal/server/features/messages/actions.js +1 -1
  39. package/dist/_internal/server/features/payouts/actions.js +1 -1
  40. package/dist/_internal/server/features/pre-orders/actions.js +1 -1
  41. package/dist/_internal/server/features/pre-orders/service.js +1 -1
  42. package/dist/_internal/server/features/prize-draws/actions.js +1 -1
  43. package/dist/_internal/server/features/products/actions.js +1 -1
  44. package/dist/_internal/server/features/products/data.js +1 -1
  45. package/dist/_internal/server/features/products/list-public.js +1 -1
  46. package/dist/_internal/server/features/products/service.js +1 -1
  47. package/dist/_internal/server/features/promotions/actions.js +1 -1
  48. package/dist/_internal/server/features/promotions/adapters.js +9 -0
  49. package/dist/_internal/server/features/promotions/data.d.ts +24 -3
  50. package/dist/_internal/server/features/promotions/data.js +41 -6
  51. package/dist/_internal/server/features/promotions/index.d.ts +1 -1
  52. package/dist/_internal/server/features/promotions/index.js +1 -1
  53. package/dist/_internal/server/features/promotions/service.js +1 -1
  54. package/dist/_internal/server/features/search/index-build/sources.js +27 -12
  55. package/dist/_internal/server/features/seo/sitemap.js +79 -13
  56. package/dist/_internal/server/features/shared/listing-data-factory.js +1 -1
  57. package/dist/_internal/server/features/shipping/courier-block.js +1 -1
  58. package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
  59. package/dist/_internal/server/features/site-settings/adapters.js +16 -1
  60. package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +1 -1
  61. package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
  62. package/dist/_internal/server/features/stores/adapters.js +14 -0
  63. package/dist/_internal/server/features/stores/data.js +1 -1
  64. package/dist/_internal/server/features/stores/tabs.d.ts +19 -15
  65. package/dist/_internal/server/features/stores/tabs.js +20 -21
  66. package/dist/_internal/server/features/sublisting-categories/data.js +1 -1
  67. package/dist/_internal/server/features/wishlist/actions.d.ts +1 -1
  68. package/dist/_internal/server/features/wishlist/actions.js +1 -1
  69. package/dist/_internal/server/features/wishlist/data.d.ts +1 -1
  70. package/dist/_internal/server/features/wishlist/data.js +1 -1
  71. package/dist/_internal/server/jobs/core/analyticsAlertEvaluate.js +9 -4
  72. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +1 -1
  73. package/dist/_internal/server/jobs/core/cartPrune.js +1 -1
  74. package/dist/_internal/server/jobs/core/catalogueImageStalenessReminder.js +1 -1
  75. package/dist/_internal/server/jobs/core/categoryTaxonomyBackfill.js +22 -0
  76. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +1 -1
  77. package/dist/_internal/server/jobs/core/countersReconcile.js +0 -1
  78. package/dist/_internal/server/jobs/core/couponExpiry.js +1 -1
  79. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +2 -1
  80. package/dist/_internal/server/jobs/core/draftPrune.js +1 -1
  81. package/dist/_internal/server/jobs/core/hardBanReinstatement.js +1 -1
  82. package/dist/_internal/server/jobs/core/newsletterExport.js +1 -1
  83. package/dist/_internal/server/jobs/core/notificationPrune.js +1 -1
  84. package/dist/_internal/server/jobs/core/onJobCreated.js +1 -1
  85. package/dist/_internal/server/jobs/core/onOrderCreate.js +3 -1
  86. package/dist/_internal/server/jobs/core/onProductWrite.js +2 -1
  87. package/dist/_internal/server/jobs/core/onScamReportCreate.js +2 -1
  88. package/dist/_internal/server/jobs/core/onScamReportRejected.js +1 -1
  89. package/dist/_internal/server/jobs/core/onScamReportVerified.js +1 -1
  90. package/dist/_internal/server/jobs/core/revenueRollup.js +1 -1
  91. package/dist/_internal/server/jobs/core/runJobOnce.js +1 -1
  92. package/dist/_internal/server/jobs/core/sellerStandingRollup.js +1 -1
  93. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +1 -1
  94. package/dist/_internal/server/jobs/handlers/onCatalogueSubmittedForApproval.js +2 -2
  95. package/dist/_internal/shared/features/blog/schema.d.ts +12 -12
  96. package/dist/_internal/shared/features/brands/schema.d.ts +19 -19
  97. package/dist/_internal/shared/features/cart/schema.d.ts +17 -17
  98. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +60 -60
  99. package/dist/_internal/shared/features/events/schema.d.ts +4 -4
  100. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  101. package/dist/_internal/shared/features/products/schema.d.ts +2 -2
  102. package/dist/_internal/shared/features/promotions/schema.d.ts +12 -12
  103. package/dist/_internal/shared/features/reviews/schema.d.ts +3 -3
  104. package/dist/_internal/shared/features/site-settings/types.d.ts +10 -2
  105. package/dist/_internal/shared/features/sticker-trace/trace/segment.js +13 -2
  106. package/dist/_internal/shared/listing-types/feature-flags.d.ts +54 -0
  107. package/dist/_internal/shared/listing-types/feature-flags.js +72 -0
  108. package/dist/client.d.ts +225 -117
  109. package/dist/client.js +148 -74
  110. package/dist/constants/field-names.d.ts +1 -0
  111. package/dist/constants/field-names.js +14 -0
  112. package/dist/errors/error-handler.d.ts +1 -1
  113. package/dist/features/about/components/AboutView.js +9 -1
  114. package/dist/features/about/components/DeveloperView.js +8 -2
  115. package/dist/features/about/components/FAQPageView.js +5 -2
  116. package/dist/features/about/components/FeesView.js +4 -1
  117. package/dist/features/about/components/GstExplainerView.js +6 -1
  118. package/dist/features/about/components/GuidesHubView.js +5 -1
  119. package/dist/features/about/components/HelpPageView.js +6 -2
  120. package/dist/features/about/components/HowAuctionsWorkView.js +6 -2
  121. package/dist/features/about/components/HowCheckoutWorksView.js +6 -2
  122. package/dist/features/about/components/HowEmiWorksView.js +7 -2
  123. package/dist/features/about/components/HowOffersWorkView.js +6 -2
  124. package/dist/features/about/components/HowOrdersWorkView.js +6 -2
  125. package/dist/features/about/components/HowPayoutsWorkView.js +6 -2
  126. package/dist/features/about/components/HowPreOrdersWorkView.js +6 -2
  127. package/dist/features/about/components/HowReviewsWorkView.js +6 -2
  128. package/dist/features/about/components/PolicyPageView.js +6 -3
  129. package/dist/features/about/components/ProseHero.js +3 -1
  130. package/dist/features/about/components/PublicProfileView.js +6 -1
  131. package/dist/features/about/components/SecurityPrivacyView.js +6 -2
  132. package/dist/features/about/components/ShippingPolicyView.js +7 -3
  133. package/dist/features/about/components/SpotAFakeView.js +6 -1
  134. package/dist/features/about/components/TrackOrderView.js +5 -2
  135. package/dist/features/about/components/UnauthorizedView.js +5 -2
  136. package/dist/features/about/schemas/index.d.ts +18 -18
  137. package/dist/features/account/api/[userId]/addresses/route.js +1 -5
  138. package/dist/features/account/components/AddressBook.js +4 -1
  139. package/dist/features/account/components/AddressFilters.js +1 -1
  140. package/dist/features/account/components/AddressForm.js +1 -1
  141. package/dist/features/account/components/AddressSelectorCreate.js +2 -1
  142. package/dist/features/account/components/AddressesIndexListing.js +5 -1
  143. package/dist/features/account/components/BecomeSellerView.js +2 -1
  144. package/dist/features/account/components/BuyerAccountGuideView.js +6 -1
  145. package/dist/features/account/components/BuyerAuctionsGuideView.js +5 -1
  146. package/dist/features/account/components/BuyerOrdersGuideView.js +5 -1
  147. package/dist/features/account/components/BuyerShoppingGuideView.js +5 -1
  148. package/dist/features/account/components/LinkedAccountsSection.js +5 -1
  149. package/dist/features/account/components/NotificationBell.js +8 -1
  150. package/dist/features/account/components/NotificationPreferencesPanel.js +6 -1
  151. package/dist/features/account/components/OrderDetailView.d.ts +1 -1
  152. package/dist/features/account/components/OrderDetailView.js +1 -1
  153. package/dist/features/account/components/ProfileView.d.ts +1 -1
  154. package/dist/features/account/components/ProfileView.js +1 -1
  155. package/dist/features/account/components/UserAccountHubView.d.ts +1 -1
  156. package/dist/features/account/components/UserAccountHubView.js +1 -1
  157. package/dist/features/account/components/UserBidsView.js +5 -1
  158. package/dist/features/account/components/UserOffersPanel.js +9 -1
  159. package/dist/features/account/components/UserOrderTrackView.d.ts +1 -1
  160. package/dist/features/account/components/UserOrderTrackView.js +1 -1
  161. package/dist/features/account/components/UserOrdersView.js +6 -1
  162. package/dist/features/account/components/UserReturnsView.js +3 -1
  163. package/dist/features/account/components/UserSidebar.js +8 -1
  164. package/dist/features/account/schemas/index.d.ts +10 -10
  165. package/dist/features/addresses/repository/addresses.repository.js +1 -1
  166. package/dist/features/addresses/schemas/address-form.d.ts +16 -16
  167. package/dist/features/addresses/schemas/index.d.ts +2 -2
  168. package/dist/features/admin/actions/admin-actions.d.ts +3 -3
  169. package/dist/features/admin/actions/admin-coupon-actions.d.ts +1 -1
  170. package/dist/features/admin/actions/admin-read-actions.d.ts +3 -3
  171. package/dist/features/admin/api/bids/route.js +1 -5
  172. package/dist/features/admin/api/coupons/route.js +1 -5
  173. package/dist/features/admin/api/products/route.js +1 -5
  174. package/dist/features/admin/api/reviews/route.js +1 -5
  175. package/dist/features/admin/components/AdminActionIndexView.d.ts +1 -1
  176. package/dist/features/admin/components/AdminActionIndexView.js +7 -1
  177. package/dist/features/admin/components/AdminAdEditorView.d.ts +1 -1
  178. package/dist/features/admin/components/AdminAdEditorView.js +8 -1
  179. package/dist/features/admin/components/AdminAddressBookView.js +8 -1
  180. package/dist/features/admin/components/AdminAddressClustersView.js +7 -1
  181. package/dist/features/admin/components/AdminAddressEditorView.d.ts +1 -1
  182. package/dist/features/admin/components/AdminAddressEditorView.js +4 -1
  183. package/dist/features/admin/components/AdminAddressesView.js +6 -1
  184. package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +1 -1
  185. package/dist/features/admin/components/AdminAllEventEntriesView.js +5 -1
  186. package/dist/features/admin/components/AdminAnalyticsGuideView.js +5 -1
  187. package/dist/features/admin/components/AdminAnalyticsView.js +4 -2
  188. package/dist/features/admin/components/AdminArtView.d.ts +1 -1
  189. package/dist/features/admin/components/AdminArtView.js +1 -1
  190. package/dist/features/admin/components/AdminAuditLogView.d.ts +1 -1
  191. package/dist/features/admin/components/AdminAuditLogView.js +5 -1
  192. package/dist/features/admin/components/AdminBeysView.d.ts +1 -1
  193. package/dist/features/admin/components/AdminBeysView.js +3 -1
  194. package/dist/features/admin/components/AdminBidsView.d.ts +1 -1
  195. package/dist/features/admin/components/AdminBidsView.js +7 -2
  196. package/dist/features/admin/components/AdminBlogEditorView.d.ts +1 -1
  197. package/dist/features/admin/components/AdminBlogEditorView.js +14 -2
  198. package/dist/features/admin/components/AdminBlogView.d.ts +1 -1
  199. package/dist/features/admin/components/AdminBlogView.js +2 -1
  200. package/dist/features/admin/components/AdminBrandEditorView.d.ts +1 -1
  201. package/dist/features/admin/components/AdminBrandEditorView.js +7 -2
  202. package/dist/features/admin/components/AdminBrandsView.d.ts +1 -1
  203. package/dist/features/admin/components/AdminBrandsView.js +4 -2
  204. package/dist/features/admin/components/AdminBundleEditorView.d.ts +1 -1
  205. package/dist/features/admin/components/AdminBundleEditorView.js +3 -1
  206. package/dist/features/admin/components/AdminBundlesView.js +7 -1
  207. package/dist/features/admin/components/AdminCarouselEditorView.d.ts +1 -1
  208. package/dist/features/admin/components/AdminCarouselEditorView.js +12 -3
  209. package/dist/features/admin/components/AdminCarouselGroupEditorView.d.ts +1 -1
  210. package/dist/features/admin/components/AdminCarouselView.d.ts +1 -1
  211. package/dist/features/admin/components/AdminCarouselView.js +16 -2
  212. package/dist/features/admin/components/AdminCartsView.d.ts +1 -1
  213. package/dist/features/admin/components/AdminCartsView.js +3 -1
  214. package/dist/features/admin/components/AdminCatalogGuideView.js +5 -1
  215. package/dist/features/admin/components/AdminCategoriesView.d.ts +1 -1
  216. package/dist/features/admin/components/AdminCategoriesView.js +3 -1
  217. package/dist/features/admin/components/AdminCategoryEditorView.d.ts +1 -1
  218. package/dist/features/admin/components/AdminCategoryEditorView.js +2 -2
  219. package/dist/features/admin/components/AdminClassifiedView.d.ts +1 -1
  220. package/dist/features/admin/components/AdminClassifiedView.js +1 -1
  221. package/dist/features/admin/components/AdminContactView.d.ts +1 -1
  222. package/dist/features/admin/components/AdminContactView.js +5 -1
  223. package/dist/features/admin/components/AdminContentGuideView.js +5 -1
  224. package/dist/features/admin/components/AdminCouponEditorView.d.ts +1 -1
  225. package/dist/features/admin/components/AdminCouponEditorView.js +5 -1
  226. package/dist/features/admin/components/AdminCouponsView.d.ts +1 -1
  227. package/dist/features/admin/components/AdminCouponsView.js +6 -1
  228. package/dist/features/admin/components/AdminDashboardView.d.ts +1 -1
  229. package/dist/features/admin/components/AdminDashboardView.js +2 -2
  230. package/dist/features/admin/components/AdminDigitalCodesView.d.ts +1 -1
  231. package/dist/features/admin/components/AdminDigitalCodesView.js +1 -1
  232. package/dist/features/admin/components/AdminFaqEditorView.d.ts +1 -1
  233. package/dist/features/admin/components/AdminFaqEditorView.js +12 -2
  234. package/dist/features/admin/components/AdminFaqsView.d.ts +1 -1
  235. package/dist/features/admin/components/AdminFaqsView.js +3 -1
  236. package/dist/features/admin/components/AdminFeatureEditorView.d.ts +1 -1
  237. package/dist/features/admin/components/AdminFeatureEditorView.js +6 -2
  238. package/dist/features/admin/components/AdminFeaturesView.d.ts +1 -1
  239. package/dist/features/admin/components/AdminFeaturesView.js +2 -1
  240. package/dist/features/admin/components/AdminFulfillmentView.js +2 -1
  241. package/dist/features/admin/components/AdminGatewayEventsView.d.ts +1 -1
  242. package/dist/features/admin/components/AdminGatewayEventsView.js +8 -1
  243. package/dist/features/admin/components/AdminGroupedListingsView.d.ts +1 -1
  244. package/dist/features/admin/components/AdminGroupedListingsView.js +7 -2
  245. package/dist/features/admin/components/AdminGuideHubView.js +7 -2
  246. package/dist/features/admin/components/AdminHistoryView.d.ts +1 -1
  247. package/dist/features/admin/components/AdminHistoryView.js +1 -1
  248. package/dist/features/admin/components/AdminIntegrationsView.js +6 -1
  249. package/dist/features/admin/components/AdminInvoicingView.js +6 -1
  250. package/dist/features/admin/components/AdminLiveView.d.ts +1 -1
  251. package/dist/features/admin/components/AdminLiveView.js +1 -1
  252. package/dist/features/admin/components/AdminMediaView.d.ts +1 -1
  253. package/dist/features/admin/components/AdminMediaView.js +11 -1
  254. package/dist/features/admin/components/AdminMoneyCasesView.d.ts +1 -1
  255. package/dist/features/admin/components/AdminMoneyCasesView.js +7 -1
  256. package/dist/features/admin/components/AdminNavEditorView.js +3 -1
  257. package/dist/features/admin/components/AdminNavigationView.d.ts +1 -1
  258. package/dist/features/admin/components/AdminNavigationView.js +10 -1
  259. package/dist/features/admin/components/AdminNewsletterView.d.ts +1 -1
  260. package/dist/features/admin/components/AdminNewsletterView.js +7 -1
  261. package/dist/features/admin/components/AdminNotificationsView.d.ts +1 -1
  262. package/dist/features/admin/components/AdminNotificationsView.js +5 -1
  263. package/dist/features/admin/components/AdminOffersView.d.ts +1 -1
  264. package/dist/features/admin/components/AdminOffersView.js +5 -1
  265. package/dist/features/admin/components/AdminOrderEditorView.js +8 -2
  266. package/dist/features/admin/components/AdminOrdersGuideView.js +4 -1
  267. package/dist/features/admin/components/AdminOrdersView.d.ts +1 -1
  268. package/dist/features/admin/components/AdminOrdersView.js +3 -1
  269. package/dist/features/admin/components/AdminPartsView.d.ts +1 -1
  270. package/dist/features/admin/components/AdminPartsView.js +3 -1
  271. package/dist/features/admin/components/AdminPaymentClustersView.js +7 -1
  272. package/dist/features/admin/components/AdminPaymentMethodsView.js +7 -1
  273. package/dist/features/admin/components/AdminPaymentsGuideView.js +4 -1
  274. package/dist/features/admin/components/AdminPayoutsView.d.ts +1 -1
  275. package/dist/features/admin/components/AdminPayoutsView.js +5 -1
  276. package/dist/features/admin/components/AdminPrizeDrawsView.d.ts +1 -1
  277. package/dist/features/admin/components/AdminPrizeDrawsView.js +7 -1
  278. package/dist/features/admin/components/AdminProductEditorView.d.ts +1 -1
  279. package/dist/features/admin/components/AdminProductEditorView.js +5 -2
  280. package/dist/features/admin/components/AdminProductsView.d.ts +1 -1
  281. package/dist/features/admin/components/AdminProductsView.js +5 -2
  282. package/dist/features/admin/components/AdminReturnRequestsView.js +3 -1
  283. package/dist/features/admin/components/AdminReviewsView.d.ts +1 -1
  284. package/dist/features/admin/components/AdminReviewsView.js +8 -1
  285. package/dist/features/admin/components/AdminScammersView.d.ts +1 -1
  286. package/dist/features/admin/components/AdminScammersView.js +5 -1
  287. package/dist/features/admin/components/AdminSectionsView.js +1 -1
  288. package/dist/features/admin/components/AdminSessionsManager.js +1 -1
  289. package/dist/features/admin/components/AdminSessionsView.d.ts +1 -1
  290. package/dist/features/admin/components/AdminSessionsView.js +6 -1
  291. package/dist/features/admin/components/AdminSidebar.js +7 -1
  292. package/dist/features/admin/components/AdminSiteConfigGuideView.js +5 -1
  293. package/dist/features/admin/components/AdminSiteSettingsView.d.ts +1 -1
  294. package/dist/features/admin/components/AdminSiteSettingsView.js +21 -5
  295. package/dist/features/admin/components/AdminSparesView.d.ts +1 -1
  296. package/dist/features/admin/components/AdminSparesView.js +1 -1
  297. package/dist/features/admin/components/AdminStickersView.d.ts +1 -1
  298. package/dist/features/admin/components/AdminStickersView.js +1 -1
  299. package/dist/features/admin/components/AdminStoreAddressesView.js +1 -1
  300. package/dist/features/admin/components/AdminStoreEditorView.js +7 -1
  301. package/dist/features/admin/components/AdminStoresGuideView.js +5 -1
  302. package/dist/features/admin/components/AdminStoresView.d.ts +1 -1
  303. package/dist/features/admin/components/AdminStoresView.js +4 -1
  304. package/dist/features/admin/components/AdminSublistingCategoryEditorView.d.ts +1 -1
  305. package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +8 -3
  306. package/dist/features/admin/components/AdminSupportTicketDetailView.js +12 -1
  307. package/dist/features/admin/components/AdminSupportTicketsView.d.ts +1 -1
  308. package/dist/features/admin/components/AdminSupportTicketsView.js +4 -1
  309. package/dist/features/admin/components/AdminTaxCodeEditorView.d.ts +1 -1
  310. package/dist/features/admin/components/AdminTaxCodeEditorView.js +4 -1
  311. package/dist/features/admin/components/AdminTaxCodesView.d.ts +1 -1
  312. package/dist/features/admin/components/AdminTaxCodesView.js +1 -1
  313. package/dist/features/admin/components/AdminTeamGuideView.js +5 -1
  314. package/dist/features/admin/components/AdminTeamView.d.ts +1 -1
  315. package/dist/features/admin/components/AdminTeamView.js +4 -1
  316. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.d.ts +1 -1
  317. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +4 -1
  318. package/dist/features/admin/components/AdminTesterChecklistView.d.ts +1 -1
  319. package/dist/features/admin/components/AdminTesterChecklistView.js +4 -1
  320. package/dist/features/admin/components/AdminTopBar.js +1 -1
  321. package/dist/features/admin/components/AdminTrustGuideView.js +5 -1
  322. package/dist/features/admin/components/AdminUserEditorView.js +12 -1
  323. package/dist/features/admin/components/AdminUsersGuideView.js +5 -1
  324. package/dist/features/admin/components/AdminUsersView.d.ts +1 -1
  325. package/dist/features/admin/components/AdminViewCards.js +4 -1
  326. package/dist/features/admin/components/AdminWishlistsView.d.ts +1 -1
  327. package/dist/features/admin/components/AdminWishlistsView.js +1 -1
  328. package/dist/features/admin/components/DashboardStats.js +3 -1
  329. package/dist/features/admin/components/DataListingView.d.ts +1 -1
  330. package/dist/features/admin/components/DataListingView.js +14 -2
  331. package/dist/features/admin/components/DataTable.js +7 -1
  332. package/dist/features/admin/components/OwnerQuickActions.d.ts +7 -1
  333. package/dist/features/admin/components/OwnerQuickActions.js +3 -2
  334. package/dist/features/admin/components/QuickEditMenu.js +2 -1
  335. package/dist/features/admin/components/ViewAuditLogEntryModal.js +6 -1
  336. package/dist/features/admin/components/ViewNotificationModal.js +6 -1
  337. package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +2 -1
  338. package/dist/features/admin/components/analytics/AdminStatCard.js +3 -1
  339. package/dist/features/admin/components/analytics/AdminTopProductsTable.js +3 -1
  340. package/dist/features/admin/components/sections/adminSectionsTypes.js +1 -0
  341. package/dist/features/admin/constants/site-settings-tabs.d.ts +1 -1
  342. package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
  343. package/dist/features/admin/hooks/useOptimisticRowFlag.js +1 -1
  344. package/dist/features/admin/schemas/action-index-form.d.ts +2 -2
  345. package/dist/features/admin/schemas/admin-editor-forms.d.ts +12 -12
  346. package/dist/features/admin/schemas/admin-editor-forms.js +0 -1
  347. package/dist/features/admin/schemas/admin-ops-forms.d.ts +8 -8
  348. package/dist/features/admin/schemas/admin-user-form.d.ts +8 -8
  349. package/dist/features/admin/schemas/firestore.d.ts +52 -0
  350. package/dist/features/admin/schemas/firestore.js +20 -0
  351. package/dist/features/admin/schemas/nav-item-form.d.ts +8 -8
  352. package/dist/features/auctions/actions/bid-actions.js +1 -1
  353. package/dist/features/auctions/api/route.js +1 -8
  354. package/dist/features/auctions/components/AuctionBidsTable.js +6 -1
  355. package/dist/features/auctions/components/AuctionBottomActions.js +1 -1
  356. package/dist/features/auctions/components/AuctionDetailPageView.js +12 -9
  357. package/dist/features/auctions/components/AuctionFilters.js +1 -1
  358. package/dist/features/auctions/components/AuctionLiveStatusBadge.js +1 -1
  359. package/dist/features/auctions/components/AuctionsListView.js +3 -1
  360. package/dist/features/auctions/components/CollapsibleBidHistory.js +4 -1
  361. package/dist/features/auctions/components/LiveBidPrice.js +3 -1
  362. package/dist/features/auctions/components/LiveMinIncrement.js +1 -1
  363. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +1 -1
  364. package/dist/features/auctions/components/MarketplaceAuctionCard.js +9 -3
  365. package/dist/features/auctions/components/MarketplaceAuctionGrid.d.ts +1 -1
  366. package/dist/features/auctions/components/MarketplaceAuctionGrid.js +3 -1
  367. package/dist/features/auctions/components/PlaceBidFormClient.js +8 -1
  368. package/dist/features/auctions/schemas/index.d.ts +34 -34
  369. package/dist/features/auth/components/ForgotPasswordView.js +6 -1
  370. package/dist/features/auth/components/Guards.js +4 -1
  371. package/dist/features/auth/components/LoginForm.js +7 -1
  372. package/dist/features/auth/components/OAuthLoadingView.js +3 -1
  373. package/dist/features/auth/components/RegisterForm.js +5 -1
  374. package/dist/features/auth/components/ResetPasswordView.js +6 -1
  375. package/dist/features/auth/components/SocialAuthButtons.js +4 -1
  376. package/dist/features/auth/components/VerifyEmailView.js +4 -1
  377. package/dist/features/auth/hooks/useAuth.js +1 -1
  378. package/dist/features/auth/schemas/index.d.ts +2 -2
  379. package/dist/features/before-after/api/route.js +1 -5
  380. package/dist/features/before-after/components/BeforeAfterGallery.js +3 -1
  381. package/dist/features/before-after/components/BeforeAfterSlider.js +3 -1
  382. package/dist/features/before-after/schemas/index.d.ts +4 -4
  383. package/dist/features/beys/components/BeyDetailPageView.js +7 -1
  384. package/dist/features/blog/actions/blog-actions.d.ts +39 -39
  385. package/dist/features/blog/api/route.js +1 -8
  386. package/dist/features/blog/components/BlogFeaturedCard.js +6 -1
  387. package/dist/features/blog/components/BlogFilters.js +1 -1
  388. package/dist/features/blog/components/BlogIndexListing.js +7 -1
  389. package/dist/features/blog/components/BlogIndexPageView.d.ts +2 -3
  390. package/dist/features/blog/components/BlogIndexPageView.js +9 -10
  391. package/dist/features/blog/components/BlogListView.js +6 -1
  392. package/dist/features/blog/components/BlogPostForm.js +9 -2
  393. package/dist/features/blog/components/BlogPostView.js +5 -1
  394. package/dist/features/blog/schemas/blog-form.d.ts +10 -10
  395. package/dist/features/blog/schemas/index.d.ts +80 -80
  396. package/dist/features/cart/actions/cart-actions.js +1 -1
  397. package/dist/features/cart/api/route.js +1 -5
  398. package/dist/features/cart/components/CartDrawer.js +6 -1
  399. package/dist/features/cart/components/CartGroupLineRow.js +5 -1
  400. package/dist/features/cart/components/CartPriceBreakdown.js +4 -1
  401. package/dist/features/cart/components/CartSummary.js +2 -1
  402. package/dist/features/cart/components/CartView.js +3 -1
  403. package/dist/features/cart/components/CheckoutAddressStep.js +3 -1
  404. package/dist/features/cart/components/CheckoutSuccessView.d.ts +1 -1
  405. package/dist/features/cart/components/CheckoutSuccessView.js +1 -1
  406. package/dist/features/cart/components/CheckoutView.js +3 -1
  407. package/dist/features/cart/components/PointsTenderPicker.js +3 -1
  408. package/dist/features/cart/components/ShippingPicker.js +4 -1
  409. package/dist/features/cart/components/StoreAddonsPicker.js +3 -1
  410. package/dist/features/cart/schemas/index.d.ts +30 -30
  411. package/dist/features/cart/utils/guest-cart.js +1 -5
  412. package/dist/features/catalogue/actions/approve-catalogue-listing.js +1 -1
  413. package/dist/features/catalogue/actions/list-from-catalogue.js +2 -1
  414. package/dist/features/catalogue/actions/submit-for-approval.js +1 -1
  415. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +6 -1
  416. package/dist/features/catalogue/components/CatalogueItemEditorView.js +1 -1
  417. package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +6 -1
  418. package/dist/features/catalogue/components/PublicCatalogueView.js +5 -1
  419. package/dist/features/catalogue/components/UserCatalogueView.js +7 -1
  420. package/dist/features/catalogue/repository/catalogue.repository.js +1 -1
  421. package/dist/features/catalogue/schemas/validation.d.ts +12 -12
  422. package/dist/features/catalogue/utils/product-from-item.js +1 -1
  423. package/dist/features/categories/api/route.js +5 -23
  424. package/dist/features/categories/components/BrandDetailPageView.js +6 -2
  425. package/dist/features/categories/components/BrandDetailTabs.js +2 -1
  426. package/dist/features/categories/components/BreadcrumbTrail.js +4 -2
  427. package/dist/features/categories/components/BundleBuyNowCta.js +5 -2
  428. package/dist/features/categories/components/BundleCollage.js +5 -1
  429. package/dist/features/categories/components/BundleDetailView.js +6 -1
  430. package/dist/features/categories/components/BundleDynamicRuleEditor.js +6 -1
  431. package/dist/features/categories/components/BundleItemsPicker.js +7 -1
  432. package/dist/features/categories/components/BundlesListView.d.ts +2 -3
  433. package/dist/features/categories/components/BundlesListView.js +6 -7
  434. package/dist/features/categories/components/CategoriesIndexListing.js +55 -6
  435. package/dist/features/categories/components/CategoriesIndexPageView.d.ts +2 -3
  436. package/dist/features/categories/components/CategoriesIndexPageView.js +3 -33
  437. package/dist/features/categories/components/CategoryBundlesListing.js +8 -2
  438. package/dist/features/categories/components/CategoryDetailPageView.js +7 -2
  439. package/dist/features/categories/components/CategoryDetailTabs.js +2 -1
  440. package/dist/features/categories/components/CategoryFilters.js +1 -1
  441. package/dist/features/categories/components/CategoryForm.js +3 -1
  442. package/dist/features/categories/components/CategoryGrid.js +3 -1
  443. package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +3 -1
  444. package/dist/features/categories/components/CategoryProductsListing.js +8 -1
  445. package/dist/features/categories/components/CategorySelectorCreate.js +6 -1
  446. package/dist/features/categories/components/CategorySortSelect.js +4 -1
  447. package/dist/features/categories/components/CategoryStoresListing.js +2 -1
  448. package/dist/features/categories/components/CategoryTableColumns.js +6 -2
  449. package/dist/features/categories/components/CategoryTemplatePicker.js +4 -1
  450. package/dist/features/categories/components/CategoryTree.js +2 -1
  451. package/dist/features/categories/components/ConcernCard.js +3 -1
  452. package/dist/features/categories/components/ConcernGrid.js +1 -1
  453. package/dist/features/categories/components/PriceGuidanceHint.js +3 -1
  454. package/dist/features/categories/components/SubcategoryCardRow.js +4 -1
  455. package/dist/features/categories/constants/category-tabs.d.ts +1 -1
  456. package/dist/features/categories/constants/category-tabs.js +7 -0
  457. package/dist/features/categories/hooks/useCategories.d.ts +6 -0
  458. package/dist/features/categories/hooks/useCategories.js +73 -2
  459. package/dist/features/categories/schemas/bundle-form.d.ts +22 -22
  460. package/dist/features/categories/schemas/index.d.ts +100 -100
  461. package/dist/features/categories/types/index.d.ts +1 -1
  462. package/dist/features/checkout/components/CheckoutStepper.js +3 -1
  463. package/dist/features/classified/components/ClassifiedDetailPageView.js +9 -9
  464. package/dist/features/classified/components/ClassifiedFilters.js +3 -1
  465. package/dist/features/collections/api/route.js +1 -5
  466. package/dist/features/collections/components/CollectionCard.js +4 -1
  467. package/dist/features/collections/schemas/index.d.ts +9 -9
  468. package/dist/features/consultation/api/route.js +1 -5
  469. package/dist/features/consultation/components/ConsultationForm.js +3 -1
  470. package/dist/features/consultation/schemas/index.d.ts +8 -8
  471. package/dist/features/contact/components/ContactForm.js +5 -2
  472. package/dist/features/contact/components/ContactInfoSidebar.js +4 -1
  473. package/dist/features/contact/components/ContactPageView.js +6 -1
  474. package/dist/features/contact/email.js +2 -5
  475. package/dist/features/corporate/api/route.js +1 -5
  476. package/dist/features/corporate/components/CorporateInquiryForm.js +3 -1
  477. package/dist/features/dashboard/components/DashboardHubView.js +7 -1
  478. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +8 -8
  479. package/dist/features/digital-codes/components/DigitalCodeFilters.js +1 -1
  480. package/dist/features/dispute-reasons/components/AdminDisputeReasonsView.js +4 -1
  481. package/dist/features/events/components/AdminEventEditorView.d.ts +1 -1
  482. package/dist/features/events/components/AdminEventEditorView.js +14 -3
  483. package/dist/features/events/components/AdminEventEntriesView.js +10 -2
  484. package/dist/features/events/components/AdminEventsView.d.ts +1 -1
  485. package/dist/features/events/components/AdminEventsView.js +2 -1
  486. package/dist/features/events/components/EventBanner.js +3 -1
  487. package/dist/features/events/components/EventCard.js +7 -1
  488. package/dist/features/events/components/EventDetailView.d.ts +1 -1
  489. package/dist/features/events/components/EventDetailView.js +1 -1
  490. package/dist/features/events/components/EventFilters.js +1 -1
  491. package/dist/features/events/components/EventFormDrawer.js +1 -1
  492. package/dist/features/events/components/EventInsights.js +3 -1
  493. package/dist/features/events/components/EventLeaderboard.js +3 -1
  494. package/dist/features/events/components/EventLikeButton.js +4 -1
  495. package/dist/features/events/components/EventLikersRail.js +5 -1
  496. package/dist/features/events/components/EventOfferCard.js +3 -1
  497. package/dist/features/events/components/EventParticipateView.js +1 -1
  498. package/dist/features/events/components/EventPollWidget.js +8 -1
  499. package/dist/features/events/components/EventRaffleEntryForm.js +3 -1
  500. package/dist/features/events/components/EventRaffleWinnerView.js +6 -1
  501. package/dist/features/events/components/EventRafflesSection.js +3 -1
  502. package/dist/features/events/components/EventSaleBanner.js +4 -1
  503. package/dist/features/events/components/EventStatusBadge.js +1 -1
  504. package/dist/features/events/components/EventTypeBadge.js +1 -1
  505. package/dist/features/events/components/EventsIndexListing.js +7 -1
  506. package/dist/features/events/components/EventsListPageView.d.ts +2 -3
  507. package/dist/features/events/components/EventsListPageView.js +11 -12
  508. package/dist/features/events/components/EventsListView.js +4 -1
  509. package/dist/features/events/components/RelatedEventsCarousel.js +3 -1
  510. package/dist/features/events/components/SpinWheel.js +1 -1
  511. package/dist/features/events/components/SpinWheelView.js +7 -1
  512. package/dist/features/events/schemas/event-form.d.ts +5 -0
  513. package/dist/features/events/schemas/event-form.js +17 -0
  514. package/dist/features/events/schemas/firestore.d.ts +49 -1
  515. package/dist/features/events/schemas/index.d.ts +184 -184
  516. package/dist/features/events/utils/carousel-slide.d.ts +0 -9
  517. package/dist/features/events/utils/carousel-slide.js +38 -1
  518. package/dist/features/faq/actions/faq-actions.d.ts +12 -12
  519. package/dist/features/faq/components/ContactCTA.js +5 -1
  520. package/dist/features/faq/components/FAQAccordion.js +6 -1
  521. package/dist/features/faq/components/FAQCategorySidebar.js +5 -1
  522. package/dist/features/faq/components/FAQHelpfulButtons.js +3 -1
  523. package/dist/features/faq/components/FAQPageContent.js +8 -1
  524. package/dist/features/faq/components/FAQSearchableList.js +2 -1
  525. package/dist/features/faq/components/FAQSortDropdown.js +4 -1
  526. package/dist/features/faq/components/RelatedFAQs.js +4 -1
  527. package/dist/features/faq/constants/help-guides.d.ts +8 -5
  528. package/dist/features/faq/constants/help-guides.js +9 -5
  529. package/dist/features/faq/schemas/index.d.ts +14 -14
  530. package/dist/features/filters/AsyncFacetSection.js +8 -3
  531. package/dist/features/filters/FilterFacetSection.js +11 -6
  532. package/dist/features/filters/FilterPanel.js +1 -1
  533. package/dist/features/filters/RangeFilter.js +8 -3
  534. package/dist/features/filters/SwitchFilter.js +7 -3
  535. package/dist/features/filters/filterUtils.d.ts +0 -2
  536. package/dist/features/filters/filterUtils.js +0 -4
  537. package/dist/features/filters/index.d.ts +1 -1
  538. package/dist/features/filters/index.js +1 -1
  539. package/dist/features/forms/Checkbox.js +7 -4
  540. package/dist/features/forms/Input.js +7 -5
  541. package/dist/features/forms/Radio.js +9 -6
  542. package/dist/features/forms/Select.js +5 -3
  543. package/dist/features/forms/Slider.js +6 -3
  544. package/dist/features/forms/Textarea.js +6 -3
  545. package/dist/features/forms/Toggle.js +6 -4
  546. package/dist/features/forms/index.d.ts +1 -1
  547. package/dist/features/forms/index.js +1 -1
  548. package/dist/features/forms/utils.d.ts +0 -2
  549. package/dist/features/forms/utils.js +0 -4
  550. package/dist/features/gateway-events/schemas/index.d.ts +10 -10
  551. package/dist/features/grouped/components/GroupedListingDetailView.js +4 -1
  552. package/dist/features/grouped/components/GroupedListingEditorView.js +5 -2
  553. package/dist/features/grouped/components/GroupedListingsCarousel.js +1 -1
  554. package/dist/features/grouped/schemas/grouped-listing-form.d.ts +8 -8
  555. package/dist/features/grouped/schemas/index.d.ts +8 -8
  556. package/dist/features/history/hooks/useHistory.js +1 -1
  557. package/dist/features/history/utils/guest-history.js +1 -5
  558. package/dist/features/homepage/actions/homepage-section-actions.d.ts +4 -4
  559. package/dist/features/homepage/components/AdSlot.js +3 -1
  560. package/dist/features/homepage/components/BrandsSection.js +6 -1
  561. package/dist/features/homepage/components/CTABannerSection.js +6 -1
  562. package/dist/features/homepage/components/CharacterHotspot.js +5 -1
  563. package/dist/features/homepage/components/CharacterHotspotForm.js +8 -1
  564. package/dist/features/homepage/components/CollectionCardsSection.js +4 -1
  565. package/dist/features/homepage/components/CustomCardsSection.js +13 -2
  566. package/dist/features/homepage/components/CustomerReviewsSection.js +5 -1
  567. package/dist/features/homepage/components/FAQSection.js +8 -1
  568. package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +6 -1
  569. package/dist/features/homepage/components/FeaturedBundlesSection.js +4 -2
  570. package/dist/features/homepage/components/GoogleReviewsSection.js +6 -1
  571. package/dist/features/homepage/components/HeroCarousel.js +6 -1
  572. package/dist/features/homepage/components/HomepageCouponsSection.d.ts +25 -0
  573. package/dist/features/homepage/components/HomepageCouponsSection.js +42 -0
  574. package/dist/features/homepage/components/HowItWorksSection.d.ts +1 -1
  575. package/dist/features/homepage/components/HowItWorksSection.js +7 -1
  576. package/dist/features/homepage/components/MarketplaceHomepageView.js +52 -4
  577. package/dist/features/homepage/components/NewsletterSection.js +4 -1
  578. package/dist/features/homepage/components/PromoGrid.js +4 -1
  579. package/dist/features/homepage/components/SectionCarousel.d.ts +1 -1
  580. package/dist/features/homepage/components/SectionCarousel.js +6 -1
  581. package/dist/features/homepage/components/SecurityHighlightsSection.js +6 -1
  582. package/dist/features/homepage/components/ShopByCategorySection.js +7 -1
  583. package/dist/features/homepage/components/SocialFeedSection.js +6 -1
  584. package/dist/features/homepage/components/SocialPostCard.js +4 -1
  585. package/dist/features/homepage/components/StatsCounterSection.js +5 -1
  586. package/dist/features/homepage/components/TestimonialsCarousel.js +4 -1
  587. package/dist/features/homepage/components/TrustFeaturesSection.js +5 -1
  588. package/dist/features/homepage/components/WelcomeSection.js +10 -1
  589. package/dist/features/homepage/components/WhatsAppCommunitySection.js +8 -1
  590. package/dist/features/homepage/lib/section-renderer.d.ts +2 -0
  591. package/dist/features/homepage/lib/section-renderer.js +8 -0
  592. package/dist/features/homepage/schemas/firestore.d.ts +23 -2
  593. package/dist/features/homepage/schemas/firestore.js +2 -0
  594. package/dist/features/homepage/schemas/index.d.ts +133 -133
  595. package/dist/features/inventory/components/ReceiveStationView.js +9 -1
  596. package/dist/features/jobs/actions/enqueue-job.js +1 -1
  597. package/dist/features/layout/AppLayoutShell.d.ts +23 -1
  598. package/dist/features/layout/AppLayoutShell.js +13 -12
  599. package/dist/features/layout/AutoBreadcrumbs.js +3 -1
  600. package/dist/features/layout/BackToTop.js +2 -1
  601. package/dist/features/layout/BottomActions.js +5 -1
  602. package/dist/features/layout/BottomActionsContext.d.ts +1 -1
  603. package/dist/features/layout/BottomChrome.js +1 -1
  604. package/dist/features/layout/BottomNavItem.d.ts +9 -1
  605. package/dist/features/layout/BottomNavItem.js +20 -5
  606. package/dist/features/layout/BottomNavLayout.js +1 -1
  607. package/dist/features/layout/BottomSheet.js +4 -1
  608. package/dist/features/layout/Breadcrumbs.js +2 -1
  609. package/dist/features/layout/FooterLayout.js +5 -1
  610. package/dist/features/layout/LocaleSwitcher.js +1 -1
  611. package/dist/features/layout/NavItem.js +2 -1
  612. package/dist/features/layout/NavbarLayout.js +5 -1
  613. package/dist/features/layout/PageTabs.js +1 -1
  614. package/dist/features/layout/SideActionDock.js +7 -1
  615. package/dist/features/layout/SidebarLayout.d.ts +1 -1
  616. package/dist/features/layout/SidebarLayout.js +2 -1
  617. package/dist/features/layout/TitleBarLayout.js +9 -1
  618. package/dist/features/layout/index.d.ts +1 -1
  619. package/dist/features/live/components/LiveItemDetailPageView.js +8 -8
  620. package/dist/features/live/components/LiveItemFilters.js +3 -1
  621. package/dist/features/lottery/schemas/config-write.d.ts +10 -10
  622. package/dist/features/lottery/schemas/zod.d.ts +6 -6
  623. package/dist/features/media/MediaLightbox.js +3 -5
  624. package/dist/features/media/modals/ImageCropModal.js +6 -1
  625. package/dist/features/media/modals/ImageEditor.js +6 -1
  626. package/dist/features/media/modals/VideoTrimModal.js +6 -1
  627. package/dist/features/media/types/index.d.ts +4 -4
  628. package/dist/features/media/upload/MediaUploadList.js +7 -1
  629. package/dist/features/orders/components/OrderAddonBadges.js +2 -1
  630. package/dist/features/orders/components/OrderCompletionPanel.d.ts +1 -1
  631. package/dist/features/orders/components/OrderCompletionPanel.js +1 -1
  632. package/dist/features/orders/components/OrderFilters.js +1 -1
  633. package/dist/features/orders/components/OrderPaymentSummary.js +4 -1
  634. package/dist/features/orders/components/OrderProvenanceCard.js +5 -1
  635. package/dist/features/orders/components/OrderScopeTabs.js +1 -1
  636. package/dist/features/orders/components/OrderSiblingPayments.js +3 -1
  637. package/dist/features/orders/components/OrderStatusTimeline.js +4 -1
  638. package/dist/features/orders/components/OrdersList.js +4 -1
  639. package/dist/features/orders/components/RaiseDisputeForm.js +1 -1
  640. package/dist/features/orders/components/RefundHistoryTable.js +4 -1
  641. package/dist/features/orders/components/RefundRequestView.js +2 -2
  642. package/dist/features/orders/components/YourPurchaseStrip.js +5 -1
  643. package/dist/features/orders/schemas/index.d.ts +86 -86
  644. package/dist/features/parts/components/AssemblyDrawer.js +8 -1
  645. package/dist/features/parts/components/ModelCompositionPanel.js +5 -1
  646. package/dist/features/parts/components/PartDetailPageView.js +7 -1
  647. package/dist/features/parts/components/PartsIndexPageView.js +6 -1
  648. package/dist/features/parts/components/PartsSearchBox.js +5 -1
  649. package/dist/features/parts/schemas/firestore.d.ts +274 -0
  650. package/dist/features/parts/schemas/firestore.js +19 -0
  651. package/dist/features/payments/repository/saved-payment-methods.repository.js +1 -1
  652. package/dist/features/payments/schemas/index.d.ts +10 -10
  653. package/dist/features/points/schemas/adjust-form.d.ts +2 -2
  654. package/dist/features/pre-orders/api/admin/route.js +1 -5
  655. package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +1 -1
  656. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +10 -3
  657. package/dist/features/pre-orders/components/PreOrderActionsClient.js +6 -1
  658. package/dist/features/pre-orders/components/PreOrderBadge.js +2 -1
  659. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +10 -9
  660. package/dist/features/pre-orders/components/PreOrderFilters.js +1 -1
  661. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +11 -2
  662. package/dist/features/pre-orders/components/PreOrdersListView.js +3 -1
  663. package/dist/features/pre-orders/components/PreorderCard.js +1 -1
  664. package/dist/features/pre-orders/schemas/index.d.ts +15 -15
  665. package/dist/features/price-index/components/PriceIndexToolView.js +4 -1
  666. package/dist/features/pricing/components/AdminPricingView.js +4 -1
  667. package/dist/features/print/components/BoxLabelPrintView.js +5 -1
  668. package/dist/features/print/components/LabelProfilePicker.js +3 -1
  669. package/dist/features/print/components/labels.js +3 -1
  670. package/dist/features/products/api/route.js +1 -3
  671. package/dist/features/products/columns/productTableColumns.js +5 -1
  672. package/dist/features/products/components/ArtStickersListView.js +3 -1
  673. package/dist/features/products/components/AuctionDetailView.d.ts +1 -1
  674. package/dist/features/products/components/AuctionDetailView.js +2 -1
  675. package/dist/features/products/components/AuctionsIndexListing.js +10 -2
  676. package/dist/features/products/components/AvailabilityScopeHint.js +3 -1
  677. package/dist/features/products/components/AvailabilityTabs.js +1 -1
  678. package/dist/features/products/components/BidHistory.js +4 -1
  679. package/dist/features/products/components/CityCollectiblesView.js +6 -1
  680. package/dist/features/products/components/CompareOverlay.js +6 -1
  681. package/dist/features/products/components/CustomFieldsEditor.js +6 -1
  682. package/dist/features/products/components/CustomSectionTabContent.js +4 -6
  683. package/dist/features/products/components/CustomSectionsEditor.js +6 -1
  684. package/dist/features/products/components/FeatureBadge.js +2 -1
  685. package/dist/features/products/components/GroupMemberPicker.js +9 -2
  686. package/dist/features/products/components/GroupSettingsPanel.js +13 -2
  687. package/dist/features/products/components/MakeOfferButton.js +6 -1
  688. package/dist/features/products/components/MarketplaceBundleCard.js +6 -1
  689. package/dist/features/products/components/MarketplacePrizeDrawCard.js +7 -1
  690. package/dist/features/products/components/NonRefundableConsentModal.js +6 -1
  691. package/dist/features/products/components/PreOrderDetailView.d.ts +1 -1
  692. package/dist/features/products/components/PreOrderDetailView.js +1 -1
  693. package/dist/features/products/components/PrizeDrawCollage.js +6 -1
  694. package/dist/features/products/components/PrizeDrawDetailPageView.js +7 -8
  695. package/dist/features/products/components/PrizeDrawEntryActions.d.ts +1 -1
  696. package/dist/features/products/components/PrizeDrawEntryActions.js +8 -2
  697. package/dist/features/products/components/PrizeDrawWinnerMappingView.js +7 -1
  698. package/dist/features/products/components/PrizeDrawsIndexListing.js +8 -1
  699. package/dist/features/products/components/PrizeDrawsListingView.js +3 -1
  700. package/dist/features/products/components/PrizeDrawsSection.js +3 -1
  701. package/dist/features/products/components/PrizeRevealModal.js +6 -1
  702. package/dist/features/products/components/ProductCardMetadataSection.js +3 -1
  703. package/dist/features/products/components/ProductDetailActions.js +4 -1
  704. package/dist/features/products/components/ProductDetailPageView.js +11 -9
  705. package/dist/features/products/components/ProductDetailView.d.ts +1 -1
  706. package/dist/features/products/components/ProductDetailView.js +1 -1
  707. package/dist/features/products/components/ProductFeatureBadges.js +4 -1
  708. package/dist/features/products/components/ProductFeaturesSelector.js +3 -1
  709. package/dist/features/products/components/ProductFilters.js +2 -1
  710. package/dist/features/products/components/ProductForm.js +1 -1
  711. package/dist/features/products/components/ProductGalleryClient.js +4 -1
  712. package/dist/features/products/components/ProductGradingTab.js +4 -1
  713. package/dist/features/products/components/ProductGrid.d.ts +1 -1
  714. package/dist/features/products/components/ProductGrid.js +7 -1
  715. package/dist/features/products/components/ProductsIndexListing.js +11 -3
  716. package/dist/features/products/components/ProductsIndexPageView.js +6 -2
  717. package/dist/features/products/components/RelatedItemsSection.js +1 -1
  718. package/dist/features/products/components/RelatedProducts.js +3 -1
  719. package/dist/features/products/components/ShowGroupSection.js +7 -1
  720. package/dist/features/products/components/SparesListView.js +4 -1
  721. package/dist/features/products/components/SublistingCarouselSection.js +4 -1
  722. package/dist/features/products/components/SublistingCategorySelect.js +2 -1
  723. package/dist/features/products/hooks/useProducts.js +1 -1
  724. package/dist/features/products/repository/products.repository.js +0 -1
  725. package/dist/features/products/schemas/index.d.ts +70 -70
  726. package/dist/features/products/schemas/product-features.validators.d.ts +52 -52
  727. package/dist/features/promotions/actions/promotions-actions.js +22 -6
  728. package/dist/features/promotions/api/route.js +1 -8
  729. package/dist/features/promotions/components/AttachedCouponsSection.js +5 -2
  730. package/dist/features/promotions/components/CouponCard.js +8 -1
  731. package/dist/features/promotions/components/CouponCodeCopyRow.js +2 -1
  732. package/dist/features/promotions/components/CouponHelpDetails.js +4 -1
  733. package/dist/features/promotions/components/CouponsIndexListing.js +12 -1
  734. package/dist/features/promotions/components/PromotionsView.js +4 -1
  735. package/dist/features/promotions/constants/attached-coupons.d.ts +14 -0
  736. package/dist/features/promotions/repository/coupons.repository.js +32 -2
  737. package/dist/features/promotions/schemas/firestore.d.ts +33 -0
  738. package/dist/features/promotions/schemas/firestore.js +44 -0
  739. package/dist/features/promotions/schemas/index.d.ts +108 -108
  740. package/dist/features/reviews/components/ReviewDetailPageView.js +4 -1
  741. package/dist/features/reviews/components/ReviewDetailShell.js +8 -1
  742. package/dist/features/reviews/components/ReviewFilters.js +1 -1
  743. package/dist/features/reviews/components/ReviewModal.js +7 -2
  744. package/dist/features/reviews/components/ReviewSummary.js +4 -2
  745. package/dist/features/reviews/components/ReviewsIndexPageView.d.ts +2 -3
  746. package/dist/features/reviews/components/ReviewsIndexPageView.js +12 -13
  747. package/dist/features/reviews/components/ReviewsList.js +7 -2
  748. package/dist/features/reviews/components/ReviewsListingPanel.js +7 -1
  749. package/dist/features/reviews/schemas/index.d.ts +40 -40
  750. package/dist/features/scams/components/ScamAwarenessModal.js +7 -1
  751. package/dist/features/scams/components/ScamProfileView.js +11 -1
  752. package/dist/features/scams/constants/scammer-status-display.d.ts +1 -1
  753. package/dist/features/scams/schemas/index.d.ts +22 -22
  754. package/dist/features/scams/schemas/report-form.d.ts +4 -4
  755. package/dist/features/search/components/EntityTypeahead.js +5 -1
  756. package/dist/features/search/components/Search.js +7 -1
  757. package/dist/features/search/components/SearchFacetRail.js +4 -1
  758. package/dist/features/search/components/SearchResultsClient.js +1 -1
  759. package/dist/features/search/components/SearchResultsPageView.js +5 -1
  760. package/dist/features/seller/api/coupons/route.js +1 -5
  761. package/dist/features/seller/api/products/route.js +1 -5
  762. package/dist/features/seller/components/BulkStockModal.js +2 -1
  763. package/dist/features/seller/components/CategoryChipPicker.js +3 -1
  764. package/dist/features/seller/components/FulfillmentView.js +2 -1
  765. package/dist/features/seller/components/GroupInlineSelect.js +1 -1
  766. package/dist/features/seller/components/SellerAddressesView.js +11 -2
  767. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +9 -1
  768. package/dist/features/seller/components/SellerAnalyticsView.d.ts +1 -1
  769. package/dist/features/seller/components/SellerAnalyticsView.js +4 -1
  770. package/dist/features/seller/components/SellerBidsView.js +8 -2
  771. package/dist/features/seller/components/SellerBundlesView.js +7 -1
  772. package/dist/features/seller/components/SellerCouponEditorView.js +5 -1
  773. package/dist/features/seller/components/SellerCouponsView.d.ts +1 -1
  774. package/dist/features/seller/components/SellerCouponsView.js +5 -1
  775. package/dist/features/seller/components/SellerDashboardView.d.ts +1 -1
  776. package/dist/features/seller/components/SellerDashboardView.js +4 -1
  777. package/dist/features/seller/components/SellerFeaturesView.js +8 -1
  778. package/dist/features/seller/components/SellerGoogleReviewsView.js +7 -1
  779. package/dist/features/seller/components/SellerGroupedListingsView.js +4 -1
  780. package/dist/features/seller/components/SellerGuideView.d.ts +1 -1
  781. package/dist/features/seller/components/SellerGuideView.js +1 -1
  782. package/dist/features/seller/components/SellerListingTypeView.js +4 -1
  783. package/dist/features/seller/components/SellerOffersView.d.ts +1 -1
  784. package/dist/features/seller/components/SellerOffersView.js +4 -1
  785. package/dist/features/seller/components/SellerOrdersView.js +8 -1
  786. package/dist/features/seller/components/SellerPayoutHistoryTable.js +2 -1
  787. package/dist/features/seller/components/SellerPayoutMethodsView.js +7 -1
  788. package/dist/features/seller/components/SellerPayoutRequestView.js +8 -1
  789. package/dist/features/seller/components/SellerPayoutSettingsView.js +3 -2
  790. package/dist/features/seller/components/SellerPayoutStats.js +1 -1
  791. package/dist/features/seller/components/SellerPayoutsView.d.ts +1 -1
  792. package/dist/features/seller/components/SellerPayoutsView.js +10 -1
  793. package/dist/features/seller/components/SellerProductShell.js +1 -2
  794. package/dist/features/seller/components/SellerProductsCards.js +7 -1
  795. package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -1
  796. package/dist/features/seller/components/SellerProductsView.js +7 -1
  797. package/dist/features/seller/components/SellerReviewsView.js +11 -1
  798. package/dist/features/seller/components/SellerShippingConfigsView.js +6 -1
  799. package/dist/features/seller/components/SellerShippingView.js +2 -2
  800. package/dist/features/seller/components/SellerSidebar.js +7 -1
  801. package/dist/features/seller/components/SellerStoreCategoriesView.js +5 -1
  802. package/dist/features/seller/components/SellerStoreSetupView.js +2 -1
  803. package/dist/features/seller/components/SellerStorefrontView.js +1 -1
  804. package/dist/features/seller/components/SellerSupportView.d.ts +1 -1
  805. package/dist/features/seller/components/SellerSupportView.js +4 -1
  806. package/dist/features/seller/components/SellersListView.d.ts +1 -1
  807. package/dist/features/seller/components/SellersListView.js +1 -1
  808. package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +1 -1
  809. package/dist/features/seller/components/analytics/SellerRevenueChart.js +2 -1
  810. package/dist/features/seller/components/analytics/SellerTopProducts.js +3 -1
  811. package/dist/features/seller/hooks/useSellerListingData.js +0 -30
  812. package/dist/features/seller/schemas/coupon-form.d.ts +50 -50
  813. package/dist/features/seller/schemas/index.d.ts +22 -22
  814. package/dist/features/seller/schemas/order-forms.d.ts +12 -12
  815. package/dist/features/server-errors/schemas/index.d.ts +4 -4
  816. package/dist/features/shell/CommandPalette.js +7 -1
  817. package/dist/features/shell/FormShell.js +5 -1
  818. package/dist/features/shell/SectionForm.js +4 -1
  819. package/dist/features/shipments/components/AdminShipmentEditorView.js +9 -1
  820. package/dist/features/shipments/components/AdminShipmentLotItemsView.js +11 -1
  821. package/dist/features/shipments/components/AdminShipmentProjectionsView.js +10 -1
  822. package/dist/features/shipments/components/AdminShipmentsView.d.ts +1 -1
  823. package/dist/features/shipments/components/AdminShipmentsView.js +3 -1
  824. package/dist/features/shipments/components/ShipmentItemLinkModal.js +7 -1
  825. package/dist/features/shipments/schemas/validation.d.ts +44 -44
  826. package/dist/features/site-settings/components/ActionPermissionsManager.js +7 -2
  827. package/dist/features/site-settings/components/NavPermissionsManager.js +6 -2
  828. package/dist/features/site-settings/components/ThemeManagerView.js +9 -1
  829. package/dist/features/status-history/components/StatusTimeline.js +4 -1
  830. package/dist/features/sticker-trace/components/StickerPrintPanel.js +6 -1
  831. package/dist/features/sticker-trace/components/StickerRetryPanel.js +4 -1
  832. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +5 -1
  833. package/dist/features/sticker-trace/components/StickerTraceStudio.js +5 -1
  834. package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +5 -5
  835. package/dist/features/store-extensions/schemas/custom-role-form.d.ts +12 -12
  836. package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +2 -2
  837. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +13 -13
  838. package/dist/features/store-extensions/schemas/payout-method-form.d.ts +10 -10
  839. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +12 -12
  840. package/dist/features/store-extensions/schemas/store-category-form.d.ts +10 -10
  841. package/dist/features/stores/api/[storeSlug]/auctions/route.js +1 -10
  842. package/dist/features/stores/api/[storeSlug]/products/route.js +1 -10
  843. package/dist/features/stores/components/InteractiveStoreCard.js +15 -2
  844. package/dist/features/stores/components/SellerStandingPanel.js +3 -1
  845. package/dist/features/stores/components/SellerTierBadge.js +2 -1
  846. package/dist/features/stores/components/StoreAboutView.js +5 -1
  847. package/dist/features/stores/components/StoreAddressSelectorCreate.js +2 -1
  848. package/dist/features/stores/components/StoreAuctionsListing.js +8 -1
  849. package/dist/features/stores/components/StoreAuctionsView.d.ts +1 -1
  850. package/dist/features/stores/components/StoreAuctionsView.js +1 -1
  851. package/dist/features/stores/components/StoreBundlesPageView.js +1 -1
  852. package/dist/features/stores/components/StoreCapabilitiesGuideView.js +6 -1
  853. package/dist/features/stores/components/StoreClassifiedsListing.js +7 -1
  854. package/dist/features/stores/components/StoreCreateForm.js +3 -1
  855. package/dist/features/stores/components/StoreDetailLayoutView.js +5 -2
  856. package/dist/features/stores/components/StoreDigitalCodesListing.js +7 -1
  857. package/dist/features/stores/components/StoreFilters.js +1 -1
  858. package/dist/features/stores/components/StoreFinanceGuideView.js +6 -1
  859. package/dist/features/stores/components/StoreGuideHubView.js +7 -2
  860. package/dist/features/stores/components/StoreHeader.js +6 -1
  861. package/dist/features/stores/components/StoreListingsGuideView.js +6 -1
  862. package/dist/features/stores/components/StoreLiveItemsListing.js +7 -1
  863. package/dist/features/stores/components/StoreNavTabs.js +3 -1
  864. package/dist/features/stores/components/StoreOrdersGuideView.js +7 -1
  865. package/dist/features/stores/components/StorePreOrdersListing.js +7 -1
  866. package/dist/features/stores/components/StoreProductsListing.js +8 -1
  867. package/dist/features/stores/components/StoreProductsView.js +5 -1
  868. package/dist/features/stores/components/StoreReviewsView.d.ts +1 -1
  869. package/dist/features/stores/components/StoreReviewsView.js +1 -1
  870. package/dist/features/stores/components/StoreSettingsGuideView.js +6 -1
  871. package/dist/features/stores/components/StoresIndexListing.js +9 -2
  872. package/dist/features/stores/components/StoresIndexPageView.d.ts +2 -3
  873. package/dist/features/stores/components/StoresIndexPageView.js +10 -11
  874. package/dist/features/stores/hooks/useStoreAddressSelector.d.ts +1 -1
  875. package/dist/features/stores/schemas/firestore.d.ts +27 -0
  876. package/dist/features/stores/schemas/firestore.js +2 -0
  877. package/dist/features/stores/schemas/index.d.ts +28 -28
  878. package/dist/features/support/schemas/index.d.ts +14 -14
  879. package/dist/features/support/schemas/ticket-create-form.d.ts +4 -4
  880. package/dist/features/tax-codes/schemas/tax-code-form.d.ts +4 -4
  881. package/dist/features/tax-codes/schemas/tax-codes.validators.d.ts +10 -10
  882. package/dist/features/tester/actions/checklist-item-actions.d.ts +3 -3
  883. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +7 -1
  884. package/dist/features/tester/components/AdminTesterFeedbackListView.js +5 -1
  885. package/dist/features/tester/components/AdminTesterFeedbackReportView.js +2 -1
  886. package/dist/features/tester/components/AdminTesterFeedbackView.js +5 -1
  887. package/dist/features/tester/components/TesterChecklistStepRow.js +8 -1
  888. package/dist/features/tester/components/TesterFeedbackChart.js +3 -1
  889. package/dist/features/tester/schemas/checklist-item-form.d.ts +2 -2
  890. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +8 -1
  891. package/dist/features/wishlist/components/WishlistCapWatcher.js +1 -1
  892. package/dist/features/wishlist/components/WishlistHeartButton.js +2 -1
  893. package/dist/features/wishlist/components/WishlistPage.js +5 -1
  894. package/dist/features/wishlist/components/WishlistView.js +3 -1
  895. package/dist/features/wishlist/hooks/useWishlistToggle.js +1 -1
  896. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  897. package/dist/features/wishlist/schemas/index.d.ts +2 -2
  898. package/dist/features/wishlist/utils/guest-wishlist.js +1 -5
  899. package/dist/index.d.ts +2496 -2452
  900. package/dist/index.js +1549 -1500
  901. package/dist/next/api/routeHandler.js +1 -1
  902. package/dist/providers/db-firebase/admin-app-lite.js +14 -2
  903. package/dist/providers/db-firebase/admin.js +8 -2
  904. package/dist/react/hooks/use-action-dispatch.d.ts +1 -1
  905. package/dist/react/hooks/use-action-dispatch.js +1 -1
  906. package/dist/react/hooks/useBrowsePageFlags.d.ts +26 -0
  907. package/dist/react/hooks/useBrowsePageFlags.js +18 -0
  908. package/dist/schemas/registry.d.ts +492 -487
  909. package/dist/schemas/sieve.d.ts +5 -5
  910. package/dist/schemas/webhooks/google-oauth.d.ts +4 -4
  911. package/dist/security/csp.d.ts +32 -2
  912. package/dist/security/csp.js +32 -2
  913. package/dist/server.d.ts +369 -362
  914. package/dist/server.js +355 -351
  915. package/dist/styles.css +1 -1
  916. package/dist/tailwind-utilities.css +1 -1
  917. package/dist/ui/components/Button.js +1 -1
  918. package/dist/ui/components/Chart.js +0 -1
  919. package/dist/ui/components/HorizontalScroller.js +27 -2
  920. package/dist/ui/components/Repeater.js +4 -1
  921. package/dist/ui/rich-text/RichText.js +1 -3
  922. package/dist/ui/rich-text/RichTextRenderer.js +1 -3
  923. package/dist/utils/browser-storage.d.ts +14 -0
  924. package/dist/utils/browser-storage.js +18 -0
  925. package/dist/utils/classnames.d.ts +19 -0
  926. package/dist/utils/classnames.js +21 -0
  927. package/dist/utils/search-params.d.ts +44 -0
  928. package/dist/utils/search-params.js +46 -0
  929. package/dist/utils/sieve-builder.d.ts +13 -0
  930. package/dist/utils/sieve-builder.js +22 -0
  931. package/dist/utils/string.formatter.d.ts +12 -0
  932. package/dist/utils/string.formatter.js +17 -0
  933. package/dist/validation/schemas.d.ts +26 -26
  934. package/package.json +90 -2
@@ -15,13 +15,34 @@ export declare const getCouponByCode: (code: string) => Promise<import("../../..
15
15
  * 🛑 EXPIRED AND INACTIVE COUPONS ARE DROPPED HERE, not in the renderer.
16
16
  * A blog post from March that still advertises a code which now errors at
17
17
  * checkout is worse than one that advertises nothing: the reader does the
18
- * work of copying it and is refused at the till. `isCouponValid` is the same
19
- * predicate checkout applies (active + inside its window + under its total
20
- * limit), so the page cannot promise what the till will decline.
18
+ * work of copying it and is refused at the till.
19
+ *
20
+ * 🛑 BUT A NOT-YET-OPEN CODE IS KEPT — `isCouponDisplayable`, not
21
+ * `isCouponValid`. This used to be the checkout predicate, which also requires
22
+ * `startDate <= now`, and that single clause is why the Diwali event rendered
23
+ * ONE coupon where it carries five: all four attached codes open on Dhanteras.
24
+ * Publishing a code ahead of time is deliberate ("save it ahead of time," says
25
+ * the event's own copy); hiding it breaks the page's own promise.
21
26
  *
22
27
  * It does NOT check `perUserLimit` — that is per-reader and unknowable on a
23
28
  * cached public page. A reader who has personally exhausted a still-valid
24
29
  * coupon is refused at checkout with a message that can explain why; that is
25
30
  * the correct place for it.
26
31
  */
32
+ /**
33
+ * Every live coupon, for the homepage `coupons` rail.
34
+ *
35
+ * 🛑 SAME DISPLAY PREDICATE AS `/promotions` AND THE EVENT PAGE, deliberately.
36
+ * These are the same claim made in three places; a code visible on one and
37
+ * absent from another reads as a broken link. One `isCouponDisplayable` call
38
+ * is what keeps them from drifting — this codebase has paid for hand-written
39
+ * copies of a money predicate before (Root Cause #75), and these three had in
40
+ * fact already drifted from `/api/coupons`, which never applied the
41
+ * start-date clause and so rendered codes the server surfaces swore did not
42
+ * exist.
43
+ *
44
+ * `limit` is applied LAST, after filtering, so an expired code can never
45
+ * occupy one of the rail's slots and silently push a live one off the end.
46
+ */
47
+ export declare const getHomepageCoupons: (limit: number) => Promise<AttachedCoupon[]>;
27
48
  export declare const getAttachedCoupons: (couponIds: readonly string[] | undefined) => Promise<AttachedCoupon[]>;
@@ -1,6 +1,6 @@
1
1
  import { cache } from "react";
2
- import { couponsRepository } from "../../../../repositories/index.js";
3
- import { isCouponValid } from "../../../../features/promotions/schemas/index.js";
2
+ import { couponsRepository } from "../../../../features/promotions/repository/coupons.repository.js";
3
+ import { isCouponDisplayable } from "../../../../features/promotions/schemas/index.js";
4
4
  import { toAttachedCoupon } from "./adapters.js";
5
5
  import { safeRead } from "../../../../errors/safe-read.js";
6
6
  export const getCouponByCode = cache(async (code) => {
@@ -21,15 +21,50 @@ export const getCouponByCode = cache(async (code) => {
21
21
  * 🛑 EXPIRED AND INACTIVE COUPONS ARE DROPPED HERE, not in the renderer.
22
22
  * A blog post from March that still advertises a code which now errors at
23
23
  * checkout is worse than one that advertises nothing: the reader does the
24
- * work of copying it and is refused at the till. `isCouponValid` is the same
25
- * predicate checkout applies (active + inside its window + under its total
26
- * limit), so the page cannot promise what the till will decline.
24
+ * work of copying it and is refused at the till.
25
+ *
26
+ * 🛑 BUT A NOT-YET-OPEN CODE IS KEPT — `isCouponDisplayable`, not
27
+ * `isCouponValid`. This used to be the checkout predicate, which also requires
28
+ * `startDate <= now`, and that single clause is why the Diwali event rendered
29
+ * ONE coupon where it carries five: all four attached codes open on Dhanteras.
30
+ * Publishing a code ahead of time is deliberate ("save it ahead of time," says
31
+ * the event's own copy); hiding it breaks the page's own promise.
27
32
  *
28
33
  * It does NOT check `perUserLimit` — that is per-reader and unknowable on a
29
34
  * cached public page. A reader who has personally exhausted a still-valid
30
35
  * coupon is refused at checkout with a message that can explain why; that is
31
36
  * the correct place for it.
32
37
  */
38
+ /**
39
+ * Every live coupon, for the homepage `coupons` rail.
40
+ *
41
+ * 🛑 SAME DISPLAY PREDICATE AS `/promotions` AND THE EVENT PAGE, deliberately.
42
+ * These are the same claim made in three places; a code visible on one and
43
+ * absent from another reads as a broken link. One `isCouponDisplayable` call
44
+ * is what keeps them from drifting — this codebase has paid for hand-written
45
+ * copies of a money predicate before (Root Cause #75), and these three had in
46
+ * fact already drifted from `/api/coupons`, which never applied the
47
+ * start-date clause and so rendered codes the server surfaces swore did not
48
+ * exist.
49
+ *
50
+ * `limit` is applied LAST, after filtering, so an expired code can never
51
+ * occupy one of the rail's slots and silently push a live one off the end.
52
+ */
53
+ export const getHomepageCoupons = cache(async (limit) => {
54
+ /*
55
+ * `safeRead`, for the reason given on `getAttachedCoupons` below: the
56
+ * homepage is prerendered and an unguarded throw during the prerender
57
+ * ATTEMPT is fatal to the production build. A failed read costs the page
58
+ * its coupon rail and records a DEGRADED_READ — it does not cost the
59
+ * homepage.
60
+ */
61
+ const docs = await safeRead(() => couponsRepository.getActiveCoupons(), {
62
+ route: "/",
63
+ key: "promotions.getActiveCoupons",
64
+ fallback: [],
65
+ });
66
+ return docs.filter(isCouponDisplayable).map(toAttachedCoupon).slice(0, limit);
67
+ });
33
68
  export const getAttachedCoupons = cache(async (couponIds) => {
34
69
  if (!couponIds || couponIds.length === 0)
35
70
  return [];
@@ -46,5 +81,5 @@ export const getAttachedCoupons = cache(async (couponIds) => {
46
81
  key: "promotions.findByIds",
47
82
  fallback: [],
48
83
  });
49
- return docs.filter(isCouponValid).map(toAttachedCoupon);
84
+ return docs.filter(isCouponDisplayable).map(toAttachedCoupon);
50
85
  });
@@ -1,4 +1,4 @@
1
- export { getCouponByCode, getAttachedCoupons } from "./data";
1
+ export { getCouponByCode, getAttachedCoupons, getHomepageCoupons } from "./data";
2
2
  export { toAttachedCoupon } from "./adapters";
3
3
  export { validateCoupon, computeDiscount } from "./service";
4
4
  export { applyCouponAction, createCouponAction, updateCouponAction, deactivateCouponAction } from "./actions";
@@ -1,4 +1,4 @@
1
- export { getCouponByCode, getAttachedCoupons } from "./data.js";
1
+ export { getCouponByCode, getAttachedCoupons, getHomepageCoupons } from "./data.js";
2
2
  export { toAttachedCoupon } from "./adapters.js";
3
3
  export { validateCoupon, computeDiscount } from "./service.js";
4
4
  export { applyCouponAction, createCouponAction, updateCouponAction, deactivateCouponAction } from "./actions.js";
@@ -1,4 +1,4 @@
1
- import { couponsRepository } from "../../../../repositories/index.js";
1
+ import { couponsRepository } from "../../../../features/promotions/repository/coupons.repository.js";
2
2
  import { roundRupees } from "../../../../utils/number.formatter.js";
3
3
  import { CouponNotFoundError, CouponExpiredError, CouponUsageLimitError, CouponPerUserLimitError, CouponMinPurchaseError, CouponScopeError, } from "../../../shared/features/promotions/errors.js";
4
4
  export async function validateCoupon(input, userId) {
@@ -39,6 +39,7 @@
39
39
  * @tag sideEffects:none
40
40
  */
41
41
  import { pluginFor } from "../../../../shared/listing-types/_registry.js";
42
+ import { ROUTES } from "../../../../../next/routing/route-map.js";
42
43
  // Defined here, not in `_registry` — imported from the DEFINING module
43
44
  // (Root Cause #18).
44
45
  import { ALL_LISTING_TYPES } from "../../../../shared/listing-types/feature-flags.js";
@@ -82,23 +83,37 @@ export const INDEX_TYPES = [
82
83
  weight: t === "standard" ? 1.0 : 0.98,
83
84
  };
84
85
  }),
85
- { key: "category", hrefTemplate: "/categories/{s}", moreHref: "/categories", weight: 0.95 },
86
- { key: "brand", hrefTemplate: "/brands/{s}", moreHref: "/brands", weight: 0.9 },
87
- { key: "part", hrefTemplate: "/parts/{s}", moreHref: "/parts", weight: 0.9 },
88
- { key: "model", hrefTemplate: "/categories/{s}", moreHref: "/categories", weight: 0.85 },
89
- { key: "store", hrefTemplate: "/stores/{s}", moreHref: "/stores", weight: 0.8 },
90
- { key: "blog", hrefTemplate: "/blog/{s}", moreHref: "/blog", weight: 0.7 },
91
- { key: "event", hrefTemplate: "/events/{s}", moreHref: "/events", weight: 0.7 },
92
- { key: "faq", hrefTemplate: "/faqs/{s}", moreHref: "/faqs", weight: 0.6 },
93
- { key: "review", hrefTemplate: "/reviews/{s}", moreHref: "/reviews", weight: 0.5 },
94
- { key: "group", hrefTemplate: "/groups/{s}", moreHref: "/products", weight: 0.5 },
95
- { key: "scammer", hrefTemplate: "/scams/{s}", moreHref: "/scams", weight: 0.5 },
86
+ /*
87
+ * 🛑 Built from ROUTES, exactly as the listing-type entries above are built
88
+ * from `pluginFor`. These ten were hand-written path literals until
89
+ * 2026-10-24 — sitting directly beside a block whose own comment says "One
90
+ * source of truth, no second mapping" and cites Root Cause #48 for the
91
+ * version of this bug that shipped. A renamed segment would have moved every
92
+ * real page and left the search index pointing at the old one, with each
93
+ * result rendering correctly and navigating to a 404.
94
+ *
95
+ * `{s}` is the placeholder the template engine substitutes, so the builder
96
+ * functions are handed it directly — the same trick `detailRoute("{s}")` uses
97
+ * above rather than re-deriving the shape.
98
+ */
99
+ { key: "category", hrefTemplate: ROUTES.PUBLIC.CATEGORY_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.CATEGORIES), weight: 0.95 },
100
+ { key: "brand", hrefTemplate: ROUTES.PUBLIC.BRAND_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.BRANDS), weight: 0.9 },
101
+ { key: "part", hrefTemplate: ROUTES.PUBLIC.PART_CLASSIFICATION("{s}"), moreHref: String(ROUTES.PUBLIC.PARTS), weight: 0.9 },
102
+ /* A model IS a category row, which is why it shares the category route. */
103
+ { key: "model", hrefTemplate: ROUTES.PUBLIC.CATEGORY_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.CATEGORIES), weight: 0.85 },
104
+ { key: "store", hrefTemplate: ROUTES.PUBLIC.STORE_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.STORES), weight: 0.8 },
105
+ { key: "blog", hrefTemplate: ROUTES.BLOG.ARTICLE("{s}"), moreHref: String(ROUTES.BLOG.LIST), weight: 0.7 },
106
+ { key: "event", hrefTemplate: ROUTES.PUBLIC.EVENT_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.EVENTS), weight: 0.7 },
107
+ { key: "faq", hrefTemplate: ROUTES.PUBLIC.FAQ_CATEGORY("{s}"), moreHref: String(ROUTES.PUBLIC.FAQS), weight: 0.6 },
108
+ { key: "review", hrefTemplate: ROUTES.PUBLIC.REVIEW_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.REVIEWS), weight: 0.5 },
109
+ { key: "group", hrefTemplate: ROUTES.PUBLIC.GROUP_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.PRODUCTS), weight: 0.5 },
110
+ { key: "scammer", hrefTemplate: ROUTES.PUBLIC.SCAM_DETAIL("{s}"), moreHref: String(ROUTES.PUBLIC.SCAMS), weight: 0.5 },
96
111
  /* `/promotions` has no per-coupon page, so `{s}` is absent on purpose and
97
112
  * `hrefFor`'s replace is a no-op. Eleven rows all landing on one page would
98
113
  * be noise in the federated GROUP (which is why `search-sources.ts` omits
99
114
  * coupons), but in the index it is the difference between a code being
100
115
  * findable and not. */
101
- { key: "coupon", hrefTemplate: "/promotions", moreHref: "/promotions", weight: 0.4 },
116
+ { key: "coupon", hrefTemplate: String(ROUTES.PUBLIC.PROMOTIONS), moreHref: String(ROUTES.PUBLIC.PROMOTIONS), weight: 0.4 },
102
117
  ];
103
118
  const facet = (pairs) => {
104
119
  const parts = pairs
@@ -2,7 +2,7 @@ import { normalizeError } from "../../../../errors/normalize.js";
2
2
  import { getAdminDb } from "../../../../providers/db-firebase/index.js";
3
3
  import { ROUTES } from "../../../../next/routing/route-map.js";
4
4
  import { PRODUCT_COLLECTION } from "../../../../features/products/schemas/firestore.js";
5
- import { EVENTS_COLLECTION, EVENT_FIELDS } from "../../../../features/events/index.js";
5
+ import { EVENTS_COLLECTION, EVENT_FIELDS } from "../../../../features/events/schemas/firestore.js";
6
6
  import { BLOG_POSTS_COLLECTION, BLOG_POST_FIELDS } from "../../../../features/blog/schemas/firestore.js";
7
7
  import { CATEGORIES_COLLECTION, CATEGORY_FIELDS } from "../../../../features/categories/schemas/firestore.js";
8
8
  // Imported from the DEFINING module, not the feature barrel (Root Cause #18).
@@ -14,6 +14,9 @@ import { PART_GLOSSARY_COLLECTION, ALL_PART_SLOTS } from "../../../../features/p
14
14
  import { serverLogger } from "../../../../monitoring/server-logger.js";
15
15
  import { PRODUCT_FIELDS } from "../../../../constants/field-names.js";
16
16
  import { PRODUCT_DETAIL_LISTING_TYPES } from "./product-detail-types.js";
17
+ import { safeRead } from "../../../../errors/safe-read.js";
18
+ import { siteSettingsRepository } from "../../../../features/admin/repository/site-settings.repository.js";
19
+ import { ALL_BROWSE_PAGES, browsePageForPath, isBrowsePageEnabled, } from "../../../shared/listing-types/feature-flags.js";
17
20
  // Product field strings — matches consumer field-names.ts
18
21
  const PRODUCT_STATUS = "status";
19
22
  const PRODUCT_STATUS_PUBLISHED = "published";
@@ -618,17 +621,43 @@ export async function buildSitemap({ baseUrl }) {
618
621
  bey: beyUrls.length,
619
622
  part: partUrls.length,
620
623
  };
621
- const empty = Object.entries(sections)
622
- .filter(([, n]) => n === 0)
623
- .map(([name]) => name);
624
- const total = Object.values(sections).reduce((a, b) => a + b, 0);
625
- if (empty.length > 0) {
626
- serverLogger.warn(`sitemap: ${empty.length} section(s) produced 0 URLs`, { empty, sections, total });
627
- }
628
- else {
629
- serverLogger.info("sitemap: built", { sections, total });
630
- }
631
- return [
624
+ /*
625
+ * Drop every URL belonging to a CLOSED browse section.
626
+ *
627
+ * 🛑 A single filter over the assembled list, not a condition threaded
628
+ * through the eighteen fetchers above. Section URLs are emitted from several
629
+ * of them plus `staticPages`, so gating from the inside is five edits and
630
+ * five chances to miss the sixth — and `browsePageForPath` is the same rule
631
+ * the navbar and the footer use, so the sitemap cannot end up disagreeing
632
+ * with the chrome about which sections exist.
633
+ *
634
+ * Advertising a URL that answers 404 is worse than omitting it: it is Root
635
+ * Cause #81's host/sitemap disagreement in miniature, and it spends crawl
636
+ * budget on pages we have deliberately withdrawn.
637
+ *
638
+ * 🛑 Applied BEFORE the per-section digest below. The digest is what
639
+ * `scripts/deploy.mjs` asserts against, so counting pre-filter would log
640
+ * URLs the response does not carry.
641
+ */
642
+ const settings = await safeRead(() => siteSettingsRepository.findById("global"), {
643
+ route: "sitemap.xml",
644
+ key: "sitemap.siteSettings",
645
+ // Fails OPEN: an unreadable settings document is not evidence that a
646
+ // section was closed, and silently dropping the catalogue from the sitemap
647
+ // on a transient Firestore error is the expensive direction of this guess.
648
+ fallback: null,
649
+ });
650
+ const closed = new Set(ALL_BROWSE_PAGES.filter((p) => !isBrowsePageEnabled(p, settings)));
651
+ const keep = (entry) => {
652
+ if (closed.size === 0)
653
+ return true;
654
+ const path = entry.url.startsWith("http")
655
+ ? new URL(entry.url).pathname
656
+ : entry.url;
657
+ const page = browsePageForPath(path);
658
+ return page === null || !closed.has(page);
659
+ };
660
+ const all = [
632
661
  ...staticUrls,
633
662
  ...categoryUrls,
634
663
  ...brandUrls,
@@ -648,5 +677,42 @@ export async function buildSitemap({ baseUrl }) {
648
677
  ...scammerUrls,
649
678
  ...beyUrls,
650
679
  ...partUrls,
651
- ];
680
+ ].filter(keep);
681
+ /*
682
+ * Recount AFTER the filter, and exclude a deliberately-closed section from
683
+ * the "produced 0 URLs" alarm.
684
+ *
685
+ * 🛑 Without this the feature would make its own monitoring cry wolf: the
686
+ * warning exists because `category: 0` once survived unnoticed for months,
687
+ * and a warning that fires every build for a reason everyone knows about is
688
+ * how the next real zero gets ignored. "Closed on purpose" and "broken" must
689
+ * not look the same in the log.
690
+ */
691
+ const sectionPage = {
692
+ category: "categories",
693
+ brand: "brands",
694
+ franchise: "franchise",
695
+ store: "stores",
696
+ };
697
+ for (const name of Object.keys(sections)) {
698
+ const page = sectionPage[name];
699
+ if (page && closed.has(page))
700
+ sections[name] = 0;
701
+ }
702
+ const empty = Object.entries(sections)
703
+ .filter(([name, n]) => n === 0 && !closed.has(sectionPage[name]))
704
+ .map(([name]) => name);
705
+ const total = all.length;
706
+ if (closed.size > 0) {
707
+ serverLogger.info("sitemap: browse section(s) closed, URLs withheld", {
708
+ closed: [...closed],
709
+ });
710
+ }
711
+ if (empty.length > 0) {
712
+ serverLogger.warn(`sitemap: ${empty.length} section(s) produced 0 URLs`, { empty, sections, total });
713
+ }
714
+ else {
715
+ serverLogger.info("sitemap: built", { sections, total });
716
+ }
717
+ return all;
652
718
  }
@@ -1,5 +1,5 @@
1
1
  import { cache } from "react";
2
- import { productRepository } from "../../../../repositories/index.js";
2
+ import { productRepository } from "../../../../features/products/repository/products.repository.js";
3
3
  import { safeRead } from "../../../../errors/safe-read.js";
4
4
  import { loadProductFeaturesForStore } from "../../../../features/products/repository/loadProductFeatures.js";
5
5
  import { isPubliclyVisible } from "../../../shared/listing-types/availability.js";
@@ -28,7 +28,7 @@ import { EmailContainer, EmailDoc, EmailRow, } from "../../../../features/email/
28
28
  import { paymentCasesRepository } from "../../../../features/payment-cases/repository/payment-cases.repository.js";
29
29
  // `adminNotificationsRepository` lives behind the repositories barrel — the
30
30
  // same import the two existing staff-signal call sites use.
31
- import { adminNotificationsRepository } from "../../../../repositories/index.js";
31
+ import { adminNotificationsRepository } from "../../../../features/store-extensions/repository/rbac.repositories.js";
32
32
  import { siteSettingsRepository } from "../../../../features/admin/repository/site-settings.repository.js";
33
33
  import { normalizeError } from "../../../../errors/normalize.js";
34
34
  import { serverLogger } from "../../../../monitoring/server-logger.js";
@@ -39,7 +39,7 @@ import type { PublicSiteSettings } from "../../../shared/features/site-settings/
39
39
  */
40
40
  export declare const PUBLIC_SITE_SETTINGS_FIELDS: readonly ["contact", "payment", "listings", "notificationChannels", "announcementBar", "support", "navConfig", "actionConfig", "background", "watermark", "disabledRoutes", "chat", "search"];
41
41
  /** Everything else, with the reason it stays server-side. */
42
- export declare const PRIVATE_SITE_SETTINGS_FIELDS: readonly ["rateChanges", "id", "createdAt", "updatedAt", "credentials", "emailSettings", "legalPages", "commissions", "emi", "gst", "laborRate", "adSettings", "integrations", "platformLimits", "auctionConfig", "siteName", "tagline", "motto", "logo", "favicon", "seo", "socialLinks", "features", "shipping", "returns", "faq", "aboutContent", "navbarConfig", "footerConfig", "theme", "featuredResults", "messaging"];
42
+ export declare const PRIVATE_SITE_SETTINGS_FIELDS: readonly ["rateChanges", "id", "createdAt", "updatedAt", "credentials", "emailSettings", "legalPages", "commissions", "emi", "gst", "laborRate", "adSettings", "integrations", "platformLimits", "auctionConfig", "siteName", "tagline", "motto", "logo", "favicon", "seo", "socialLinks", "features", "shipping", "returns", "faq", "aboutContent", "navbarConfig", "footerConfig", "theme", "featuredResults", "messaging", "whatsappFeed"];
43
43
  export interface ToPublicSiteSettingsOptions {
44
44
  /**
45
45
  * The resolved marker → wordmark → text watermark chain. Injected because
@@ -6,7 +6,7 @@
6
6
  export const PUBLIC_SITE_SETTINGS_FIELDS = [
7
7
  "contact", // user/orders/[id]/payment — contact.whatsappNumber (narrowed: no address/upiVpa)
8
8
  "payment", // CheckoutRouteClient — payment.otpCheckoutThreshold (narrowed)
9
- "listings", // useListingTypeFlags — narrowed to listings.listingTypes; categoryTypes has no client reader
9
+ "listings", // useListingTypeFlags + LayoutShellClient nav filter — narrowed to listings.{listingTypes,browsePages}; categoryTypes has no client reader
10
10
  "notificationChannels", // NARROWED: only {email,whatsapp,sms}.enabled — see the projection below
11
11
  "announcementBar", // the homepage banner (AdminSiteSettingsView edits it)
12
12
  /*
@@ -118,6 +118,18 @@ export const PRIVATE_SITE_SETTINGS_FIELDS = [
118
118
  // checkbox, which disables itself when email is off — is behind the admin
119
119
  // API, which returns the full document.
120
120
  "messaging",
121
+ /*
122
+ * The WhatsApp catalogue feed kill switch. Read ONLY by
123
+ * `/whatsapp/{storeSlug}/feed.csv`, which is a server route doing its own
124
+ * settings read — the same shape as `auctionConfig` above.
125
+ *
126
+ * 🛑 Deliberately NOT public, unlike its sibling `search`. That one is public
127
+ * because its reader is a GUEST's search box, so a server-only flag could not
128
+ * reach the visitor it governs. This flag's only reader is Meta's crawler
129
+ * fetching a CSV; no browser consults it, and publishing "catalogue feeds are
130
+ * currently off platform-wide" is operational detail with no client to serve.
131
+ */
132
+ "whatsappFeed",
121
133
  ];
122
134
  export function toPublicSiteSettings(doc, opts) {
123
135
  return {
@@ -137,6 +149,9 @@ export function toPublicSiteSettings(doc, opts) {
137
149
  },
138
150
  listings: {
139
151
  listingTypes: doc.listings?.listingTypes,
152
+ // Read by LayoutShellClient to drop nav/footer links into a closed
153
+ // section. `categoryTypes` is still withheld — it has no client reader.
154
+ browsePages: doc.listings?.browsePages,
140
155
  },
141
156
  /*
142
157
  * 🛑 Narrowed to the three booleans a client reads, not the group by
@@ -34,7 +34,7 @@
34
34
  import { ValidationError } from "../../../../errors/validation-error.js";
35
35
  import { serverLogger } from "../../../../monitoring/server-logger.js";
36
36
  import { normalizeError } from "../../../../errors/normalize.js";
37
- import { productRepository } from "../../../../repositories/index.js";
37
+ import { productRepository } from "../../../../features/products/repository/products.repository.js";
38
38
  import { mediaAssetsRepository } from "../../../../features/media/repository/media-assets.repository.js";
39
39
  import { stickerSheetsRepository } from "../../../../features/sticker-trace/repository/sticker-sheets.repository.js";
40
40
  /** A part that becomes its own listing: unique, and actually rendered. */
@@ -27,7 +27,7 @@ import type { StoreDetail, StoreListItem } from "../../../../features/stores/typ
27
27
  */
28
28
  export declare const PUBLIC_STORE_FIELDS: readonly ["id", "storeSlug", "ownerId", "storeName", "storeDescription", "storeCategory", "storeLogoURL", "storeBannerURL", "status", "isPublic", "stats", "bio", "location", "website", "socialLinks", "returnPolicy", "shippingPolicy", "isVacationMode", "vacationMessage", "supportsShippingProtection", "supportsSaleProtection", "allowSharedPurchase", "sharedPurchaseHandlingFee", "sharedPurchaseExtraShippingPerDestination", "isVerified", "sellerTier", "standing", "createdAt"];
29
29
  /** Everything else, with the reason it stays server-side. */
30
- export declare const PRIVATE_STORE_FIELDS: readonly ["whatsappNotifySubscribed", "trustedSeller", "acceptsPoints", "searchTxt", "whatsappNotifySubscribed", "updatedAt", "whatsappConfig", "adminNotes", "statusHistory", "statusHistoryTruncated", "tierLockedByAdmin", "suspensionReason", "capabilities", "customCommissionRate", "googleReviews", "shippingConfig", "emiEnabled", "pricesIncludeGst", "shippingPricing", "returnsDirectToSeller", "isFeatured", "vacationReturnDate", "isTestData", "testDataExpiresAt", "gstin", "legalName", "registeredAddress"];
30
+ export declare const PRIVATE_STORE_FIELDS: readonly ["whatsappNotifySubscribed", "whatsappFeedEnabled", "trustedSeller", "acceptsPoints", "searchTxt", "whatsappNotifySubscribed", "updatedAt", "whatsappConfig", "adminNotes", "statusHistory", "statusHistoryTruncated", "tierLockedByAdmin", "suspensionReason", "capabilities", "customCommissionRate", "googleReviews", "shippingConfig", "emiEnabled", "pricesIncludeGst", "shippingPricing", "returnsDirectToSeller", "isFeatured", "vacationReturnDate", "isTestData", "testDataExpiresAt", "gstin", "legalName", "registeredAddress"];
31
31
  /**
32
32
  * Accepted input: a `StoreDocument` (the common case) or a loosely-typed
33
33
  * Firestore row. The legacy top-level counters below predate `stats` and are
@@ -104,6 +104,20 @@ export const PRIVATE_STORE_FIELDS = [
104
104
  * someone can name the client that reads it.
105
105
  */
106
106
  "whatsappNotifySubscribed",
107
+ /*
108
+ * 🛑 `whatsappFeedEnabled` — a seller's own DISTRIBUTION PLUMBING.
109
+ *
110
+ * Whether this store currently publishes `/whatsapp/{slug}/feed.csv` with
111
+ * rows in it. Absent means enabled, so the field is only ever present when a
112
+ * seller (or an admin) has switched the feed off.
113
+ *
114
+ * No public reader, which is this file's bar on its own. Beyond that, a buyer
115
+ * learns nothing from it — it says nothing about the goods, the price or the
116
+ * dispatch record — while publishing it would advertise which stores are
117
+ * reachable on WhatsApp at all, which is the same disclosure
118
+ * `whatsappNotifySubscribed` directly above is private to avoid.
119
+ */
120
+ "whatsappFeedEnabled",
107
121
  /*
108
122
  * 🛑 `trustedSeller` — OUR RISK POSTURE, not a badge.
109
123
  *
@@ -1,6 +1,6 @@
1
1
  "use server";
2
2
  import { cache } from "react";
3
- import { storeRepository } from "../../../../repositories/index.js";
3
+ import { storeRepository } from "../../../../features/stores/repository/store.repository.js";
4
4
  import { STORES_PRODUCTS_PAGE_SIZE, STORES_SITEMAP_LIMIT, } from "../../../shared/features/stores/config.js";
5
5
  import { makeGetStoreListingsInitial } from "../shared/listing-data-factory.js";
6
6
  import { safeRead } from "../../../../errors/safe-read.js";
@@ -24,22 +24,26 @@ export declare function resolveStoreTabs(storeSlug: string, storeId: string | un
24
24
  /**
25
25
  * Where the bare `/stores/[slug]` route should land.
26
26
  *
27
- * Order: **About when the store has written one**, else the first
28
- * listing-type tab holding anything, else Coupons, else Reviews, else About.
29
- * `about` is always present in `tabs`, so this never falls through to nothing.
27
+ * Order: the first listing-type tab holding anything, else Coupons, else
28
+ * Reviews, else About. `about` is always present in `tabs`, so this never
29
+ * falls through to nothing.
30
30
  *
31
- * 🛑 About was promoted to first on 2026-10-21, deliberately. Previously the
32
- * richest listing tab always won, so any stocked store sent every visitor
33
- * straight to a filtered product grid — the storefront read as a search
34
- * result, and a seller who had written an introduction was the only person who
35
- * ever saw it.
31
+ * 🛑 About was promoted to FIRST on 2026-10-21 and REVERTED on 2026-10-24.
32
+ * The argument for it was that a stocked storefront opening on a filtered
33
+ * product grid "reads as a search result". What it actually produced is worse
34
+ * and was reported as a bug: `store-letitrip-official` carries a
35
+ * `storeDescription`, so every visit to `/stores/store-letitrip-official`
36
+ * 307'd to `/about` — a page with no merchandise on it — and the shop read as
37
+ * having **no products at all**. Measured the day of the revert: the store
38
+ * holds 22 published listings, its `/products` tab renders 12 of them and its
39
+ * WhatsApp feed emits all 22, while the landing page showed none of it.
36
40
  *
37
- * It is gated on the store ACTUALLY having About content rather than applied
38
- * unconditionally: landing on an empty About page would be strictly worse than
39
- * landing on products, so the old behaviour remains the fallback. The caller
40
- * supplies the flag because this module takes a `storeId`, not the document,
41
- * and giving it store-shape knowledge it does not otherwise need would make it
42
- * a second place that decides what "has an About" means.
41
+ * A storefront's job is to show stock. An introduction is a tab, and the tab
42
+ * is right there in the nav bar.
43
+ *
44
+ * 🛑 Do NOT re-add a `hasAboutContent` parameter to re-litigate this. It was
45
+ * the mechanism of the regression, not a safeguard against it: having written
46
+ * a description is not evidence that a shopper wants to read one.
43
47
  */
44
- export declare function getDefaultStoreTabPath(storeSlug: string, storeId: string | undefined, settings: SiteSettingsSnapshot, hasAboutContent?: boolean): Promise<string>;
48
+ export declare function getDefaultStoreTabPath(storeSlug: string, storeId: string | undefined, settings: SiteSettingsSnapshot): Promise<string>;
45
49
  export {};
@@ -27,7 +27,7 @@ import { ROUTES } from "../../../../next/routing/route-map.js";
27
27
  import { STORE_PAGE_TABS } from "../../../../features/products/constants/listing-tabs.js";
28
28
  import { isListingTypeEnabled, isCategoryTypeEnabled } from "../../../shared/listing-types/feature-flags.js";
29
29
  import { pluginFor } from "../../../shared/listing-types/_registry.js";
30
- import { listingTabCounts, } from "../products/listing-tab-counts.js";
30
+ import { listingTabCounts } from "../products/listing-tab-counts.js";
31
31
  function tabLabel(base, count) {
32
32
  if (!count)
33
33
  return base;
@@ -116,29 +116,28 @@ export async function resolveStoreTabs(storeSlug, storeId, settings) {
116
116
  /**
117
117
  * Where the bare `/stores/[slug]` route should land.
118
118
  *
119
- * Order: **About when the store has written one**, else the first
120
- * listing-type tab holding anything, else Coupons, else Reviews, else About.
121
- * `about` is always present in `tabs`, so this never falls through to nothing.
119
+ * Order: the first listing-type tab holding anything, else Coupons, else
120
+ * Reviews, else About. `about` is always present in `tabs`, so this never
121
+ * falls through to nothing.
122
122
  *
123
- * 🛑 About was promoted to first on 2026-10-21, deliberately. Previously the
124
- * richest listing tab always won, so any stocked store sent every visitor
125
- * straight to a filtered product grid — the storefront read as a search
126
- * result, and a seller who had written an introduction was the only person who
127
- * ever saw it.
123
+ * 🛑 About was promoted to FIRST on 2026-10-21 and REVERTED on 2026-10-24.
124
+ * The argument for it was that a stocked storefront opening on a filtered
125
+ * product grid "reads as a search result". What it actually produced is worse
126
+ * and was reported as a bug: `store-letitrip-official` carries a
127
+ * `storeDescription`, so every visit to `/stores/store-letitrip-official`
128
+ * 307'd to `/about` — a page with no merchandise on it — and the shop read as
129
+ * having **no products at all**. Measured the day of the revert: the store
130
+ * holds 22 published listings, its `/products` tab renders 12 of them and its
131
+ * WhatsApp feed emits all 22, while the landing page showed none of it.
128
132
  *
129
- * It is gated on the store ACTUALLY having About content rather than applied
130
- * unconditionally: landing on an empty About page would be strictly worse than
131
- * landing on products, so the old behaviour remains the fallback. The caller
132
- * supplies the flag because this module takes a `storeId`, not the document,
133
- * and giving it store-shape knowledge it does not otherwise need would make it
134
- * a second place that decides what "has an About" means.
133
+ * A storefront's job is to show stock. An introduction is a tab, and the tab
134
+ * is right there in the nav bar.
135
+ *
136
+ * 🛑 Do NOT re-add a `hasAboutContent` parameter to re-litigate this. It was
137
+ * the mechanism of the regression, not a safeguard against it: having written
138
+ * a description is not evidence that a shopper wants to read one.
135
139
  */
136
- export async function getDefaultStoreTabPath(storeSlug, storeId, settings, hasAboutContent) {
140
+ export async function getDefaultStoreTabPath(storeSlug, storeId, settings) {
137
141
  const { dropdownTabs, tabs } = await resolveStoreTabs(storeSlug, storeId, settings);
138
- if (hasAboutContent) {
139
- const about = tabs.find((t) => t.value === "about");
140
- if (about)
141
- return about.href;
142
- }
143
142
  return (dropdownTabs[0] ?? tabs[0]).href;
144
143
  }
@@ -1,5 +1,5 @@
1
1
  import { cache } from "react";
2
- import { categoriesRepository } from "../../../../repositories/index.js";
2
+ import { categoriesRepository } from "../../../../features/categories/repository/categories.repository.js";
3
3
  export const getSublistingCategoryForDetail = cache(async (slug) => {
4
4
  return categoriesRepository.findBySlugAndType(slug, "sublisting");
5
5
  });
@@ -1,5 +1,5 @@
1
1
  import { type ActionResult } from "../../../shared/types/action-result";
2
- import { type WishlistItem } from "../../../../repositories";
2
+ import type { UserWishlistItem as WishlistItem } from "../../../../features/wishlist/repository/user-wishlist.repository";
3
3
  export declare function addToWishlistAction(productId: string, extras?: {
4
4
  productType?: WishlistItem["productType"];
5
5
  priceAtAdd?: number;
@@ -13,7 +13,7 @@ import { normalizeError } from "../../../../errors/normalize.js";
13
13
  */
14
14
  import { wrapAction } from "../../../shared/types/action-result.js";
15
15
  import { requireRoleUser } from "../../../../providers/auth-firebase/helpers.js";
16
- import { wishlistRepository, WishlistFullError, } from "../../../../repositories/index.js";
16
+ import { wishlistRepository, WishlistFullError } from "../../../../features/wishlist/repository/user-wishlist.repository.js";
17
17
  import { WISHLIST_MAX } from "../../../shared/features/wishlist/config.js";
18
18
  import { WishlistCapError } from "../../../shared/features/wishlist/errors.js";
19
19
  export async function addToWishlistAction(productId, extras) {
@@ -1,4 +1,4 @@
1
- import { type WishlistItem } from "../../../../repositories";
1
+ import type { UserWishlistItem as WishlistItem } from "../../../../features/wishlist/repository/user-wishlist.repository";
2
2
  export declare const getWishlistForUser: (userId: string) => Promise<{
3
3
  items: WishlistItem[];
4
4
  meta: {
@@ -1,5 +1,5 @@
1
1
  import { cache } from "react";
2
- import { wishlistRepository } from "../../../../repositories/index.js";
2
+ import { wishlistRepository } from "../../../../features/wishlist/repository/user-wishlist.repository.js";
3
3
  export const getWishlistForUser = cache(async (userId) => {
4
4
  const items = await wishlistRepository.getWishlistItems(userId).catch(() => []);
5
5
  return { items, meta: { total: items.length } };