@mohasinac/appkit 4.13.1 → 4.15.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 (493) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +14 -5
  2. package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +3 -0
  3. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -0
  4. package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +8 -0
  5. package/dist/_internal/client/features/lottery/LotteryDetailView.js +4 -1
  6. package/dist/_internal/client/features/lottery/LotteryListView.d.ts +7 -0
  7. package/dist/_internal/client/features/lottery/LotteryListView.js +1 -1
  8. package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +4 -1
  9. package/dist/_internal/client/features/lottery/slot-collage-items.d.ts +15 -0
  10. package/dist/_internal/client/features/lottery/slot-collage-items.js +13 -0
  11. package/dist/_internal/server/features/auctions/actions.js +8 -2
  12. package/dist/_internal/server/features/bundles/data.d.ts +16 -0
  13. package/dist/_internal/server/features/bundles/data.js +26 -0
  14. package/dist/_internal/server/features/bundles/index.d.ts +1 -1
  15. package/dist/_internal/server/features/bundles/index.js +1 -1
  16. package/dist/_internal/server/features/cart/service.d.ts +3 -3
  17. package/dist/_internal/server/features/checkout/actions.js +25 -0
  18. package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
  19. package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
  20. package/dist/_internal/server/features/checkout/source-context.d.ts +5 -0
  21. package/dist/_internal/server/features/checkout/source-context.js +157 -0
  22. package/dist/_internal/server/features/homepage/index.d.ts +0 -1
  23. package/dist/_internal/server/features/homepage/index.js +7 -1
  24. package/dist/_internal/server/features/lottery/adapters.js +4 -0
  25. package/dist/_internal/server/features/offers/adapters.d.ts +103 -0
  26. package/dist/_internal/server/features/offers/adapters.js +88 -0
  27. package/dist/_internal/server/features/offers/index.d.ts +2 -0
  28. package/dist/_internal/server/features/offers/index.js +1 -0
  29. package/dist/_internal/server/features/orders/adapters.js +24 -0
  30. package/dist/_internal/server/features/products/data.js +15 -37
  31. package/dist/_internal/server/features/products/index.d.ts +1 -1
  32. package/dist/_internal/server/features/products/index.js +1 -1
  33. package/dist/_internal/server/features/products/list-public.d.ts +46 -20
  34. package/dist/_internal/server/features/products/list-public.js +266 -90
  35. package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
  36. package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
  37. package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
  38. package/dist/_internal/server/features/site-settings/adapters.js +75 -0
  39. package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
  40. package/dist/_internal/server/features/site-settings/index.js +1 -0
  41. package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
  42. package/dist/_internal/server/features/stores/adapters.js +91 -0
  43. package/dist/_internal/server/features/stores/index.d.ts +1 -0
  44. package/dist/_internal/server/features/stores/index.js +1 -0
  45. package/dist/_internal/server/jobs/core/auctionSettlement.js +56 -2
  46. package/dist/_internal/server/jobs/core/offerExpiry.js +55 -19
  47. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
  48. package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
  49. package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
  50. package/dist/_internal/server/jobs/handlers/messages.js +10 -0
  51. package/dist/_internal/shared/actions/action-registry.js +17 -1
  52. package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
  53. package/dist/_internal/shared/checkout/lanes.js +26 -0
  54. package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
  55. package/dist/_internal/shared/features/auctions/config.js +27 -0
  56. package/dist/_internal/shared/features/auctions/schema.d.ts +14 -2
  57. package/dist/_internal/shared/features/auctions/schema.js +13 -1
  58. package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
  59. package/dist/_internal/shared/features/cart/schema.d.ts +20 -15
  60. package/dist/_internal/shared/features/cart/schema.js +15 -0
  61. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
  62. package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
  63. package/dist/_internal/shared/features/emi/schedule.js +20 -5
  64. package/dist/_internal/shared/features/events/schema.d.ts +2 -2
  65. package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
  66. package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
  67. package/dist/_internal/shared/features/offers/config.d.ts +30 -0
  68. package/dist/_internal/shared/features/offers/config.js +59 -0
  69. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  70. package/dist/_internal/shared/features/products/schema.d.ts +30 -30
  71. package/dist/_internal/shared/features/products/to-product-item.js +6 -0
  72. package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
  73. package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
  74. package/dist/_internal/shared/features/site-settings/fees.js +39 -0
  75. package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
  76. package/dist/_internal/shared/features/site-settings/types.js +1 -0
  77. package/dist/_internal/shared/history/history.d.ts +88 -0
  78. package/dist/_internal/shared/history/history.js +198 -0
  79. package/dist/_internal/shared/history/index.d.ts +4 -0
  80. package/dist/_internal/shared/history/index.js +2 -0
  81. package/dist/_internal/shared/history/types.d.ts +61 -0
  82. package/dist/_internal/shared/history/types.js +6 -0
  83. package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
  84. package/dist/_internal/shared/listing-types/_registry.js +67 -0
  85. package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
  86. package/dist/_internal/shared/listing-types/art/config.js +5 -0
  87. package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
  88. package/dist/_internal/shared/listing-types/auction/config.js +21 -0
  89. package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
  90. package/dist/_internal/shared/listing-types/availability.js +104 -0
  91. package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
  92. package/dist/_internal/shared/listing-types/capabilities.js +12 -0
  93. package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
  94. package/dist/_internal/shared/listing-types/classified/config.js +5 -0
  95. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
  96. package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
  97. package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
  98. package/dist/_internal/shared/listing-types/live/config.js +5 -0
  99. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
  100. package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
  101. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
  102. package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
  103. package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
  104. package/dist/_internal/shared/listing-types/standard/config.js +5 -0
  105. package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
  106. package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
  107. package/dist/client.d.ts +20 -7
  108. package/dist/client.js +22 -4
  109. package/dist/constants/api-endpoints.d.ts +6 -0
  110. package/dist/constants/api-endpoints.js +2 -0
  111. package/dist/constants/field-names.d.ts +57 -8
  112. package/dist/constants/field-names.js +101 -8
  113. package/dist/constants/table-keys.d.ts +17 -0
  114. package/dist/constants/table-keys.js +17 -0
  115. package/dist/errors/error-codes.d.ts +13 -1
  116. package/dist/errors/error-codes.js +13 -1
  117. package/dist/errors/error-display-map.js +12 -3
  118. package/dist/errors/messages.d.ts +10 -2
  119. package/dist/errors/messages.js +10 -2
  120. package/dist/features/about/components/AboutView.d.ts +3 -0
  121. package/dist/features/about/components/AboutView.js +3 -2
  122. package/dist/features/about/components/PolicyPageView.d.ts +2 -1
  123. package/dist/features/about/components/PolicyPageView.js +61 -23
  124. package/dist/features/about/components/PublicProfileView.js +5 -0
  125. package/dist/features/about/schemas/firestore.d.ts +3 -0
  126. package/dist/features/account/components/UserBidsView.js +12 -4
  127. package/dist/features/account/components/UserOrdersView.js +7 -0
  128. package/dist/features/account/components/UserReturnsView.d.ts +3 -0
  129. package/dist/features/account/components/UserReturnsView.js +17 -1
  130. package/dist/features/account/components/index.d.ts +0 -2
  131. package/dist/features/account/components/index.js +0 -1
  132. package/dist/features/account/schemas/index.d.ts +2 -2
  133. package/dist/features/account/types/index.d.ts +21 -2
  134. package/dist/features/addresses/schemas/index.d.ts +4 -4
  135. package/dist/features/admin/components/AdminArtView.js +8 -3
  136. package/dist/features/admin/components/AdminAuditLogView.js +1 -0
  137. package/dist/features/admin/components/AdminBidsView.js +15 -2
  138. package/dist/features/admin/components/AdminBlogEditorView.js +65 -33
  139. package/dist/features/admin/components/AdminClassifiedView.js +8 -3
  140. package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
  141. package/dist/features/admin/components/AdminFeatureEditorView.js +35 -6
  142. package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
  143. package/dist/features/admin/components/AdminLiveView.js +8 -3
  144. package/dist/features/admin/components/AdminNavEditorView.js +15 -5
  145. package/dist/features/admin/components/AdminNewsletterView.js +18 -2
  146. package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
  147. package/dist/features/admin/components/AdminOffersView.js +230 -0
  148. package/dist/features/admin/components/AdminOrdersView.js +10 -1
  149. package/dist/features/admin/components/AdminPaymentMethodsView.js +24 -4
  150. package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
  151. package/dist/features/admin/components/AdminProductsView.js +16 -29
  152. package/dist/features/admin/components/AdminScammerEditorView.d.ts +2 -1
  153. package/dist/features/admin/components/AdminScammerEditorView.js +3 -13
  154. package/dist/features/admin/components/AdminScammersView.js +3 -8
  155. package/dist/features/admin/components/AdminSectionsView.js +32 -23
  156. package/dist/features/admin/components/AdminSessionsView.js +17 -2
  157. package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
  158. package/dist/features/admin/components/AdminSiteView.js +6 -2
  159. package/dist/features/admin/components/AdminStickersView.js +8 -3
  160. package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -0
  161. package/dist/features/admin/components/index.d.ts +2 -0
  162. package/dist/features/admin/components/index.js +1 -0
  163. package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +4 -2
  164. package/dist/features/admin/components/sections/adminSectionsTypes.js +45 -27
  165. package/dist/features/admin/constants/filter-tabs.d.ts +89 -0
  166. package/dist/features/admin/constants/filter-tabs.js +56 -0
  167. package/dist/features/admin/schemas/firestore.d.ts +122 -3
  168. package/dist/features/admin/schemas/firestore.js +1 -0
  169. package/dist/features/admin/schemas/homepage-section-form.d.ts +22 -0
  170. package/dist/features/admin/schemas/homepage-section-form.js +68 -0
  171. package/dist/features/admin/schemas/nav-item-form.d.ts +74 -0
  172. package/dist/features/admin/schemas/nav-item-form.js +72 -0
  173. package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
  174. package/dist/features/auctions/actions/bid-actions.js +93 -20
  175. package/dist/features/auctions/components/AuctionBidsTable.d.ts +10 -1
  176. package/dist/features/auctions/components/AuctionBidsTable.js +22 -4
  177. package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
  178. package/dist/features/auctions/components/AuctionsListView.js +5 -6
  179. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
  180. package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
  181. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
  182. package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
  183. package/dist/features/auctions/components/bid-detail-fields.d.ts +29 -0
  184. package/dist/features/auctions/components/bid-detail-fields.js +103 -0
  185. package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
  186. package/dist/features/auctions/repository/bid.repository.js +23 -0
  187. package/dist/features/auctions/schemas/firestore.d.ts +17 -0
  188. package/dist/features/auctions/schemas/index.d.ts +12 -12
  189. package/dist/features/audit-log/schemas/firestore.d.ts +14 -0
  190. package/dist/features/audit-log/schemas/firestore.js +7 -0
  191. package/dist/features/auth/permissions/constants.d.ts +1 -1
  192. package/dist/features/auth/permissions/constants.js +10 -1
  193. package/dist/features/blog/actions/blog-actions.d.ts +7 -7
  194. package/dist/features/blog/schemas/blog-form.d.ts +80 -0
  195. package/dist/features/blog/schemas/blog-form.js +100 -0
  196. package/dist/features/blog/schemas/index.d.ts +6 -6
  197. package/dist/features/cart/repository/cart.repository.js +1 -0
  198. package/dist/features/cart/schemas/firestore.d.ts +15 -0
  199. package/dist/features/catalogue/schemas/validation.d.ts +4 -4
  200. package/dist/features/categories/components/BrandDetailPageView.js +23 -40
  201. package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
  202. package/dist/features/categories/components/BrandDetailTabs.js +8 -12
  203. package/dist/features/categories/components/BundleCollage.js +1 -1
  204. package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
  205. package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
  206. package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
  207. package/dist/features/categories/components/CategoryProductsListing.js +11 -1
  208. package/dist/features/categories/components/ConcernCard.js +7 -1
  209. package/dist/features/categories/schemas/firestore.d.ts +13 -0
  210. package/dist/features/categories/schemas/index.d.ts +26 -26
  211. package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
  212. package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
  213. package/dist/features/events/components/AdminEventEditorView.js +32 -54
  214. package/dist/features/events/components/AdminEventEntriesView.js +22 -3
  215. package/dist/features/events/components/AdminEventsView.js +15 -11
  216. package/dist/features/events/components/EventFilters.d.ts +9 -1
  217. package/dist/features/events/components/EventFilters.js +45 -21
  218. package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
  219. package/dist/features/events/components/EventsIndexListing.js +2 -2
  220. package/dist/features/events/components/EventsListPageView.js +13 -4
  221. package/dist/features/events/repository/events.repository.d.ts +17 -0
  222. package/dist/features/events/repository/events.repository.js +27 -0
  223. package/dist/features/events/schemas/event-form.d.ts +113 -0
  224. package/dist/features/events/schemas/event-form.js +82 -0
  225. package/dist/features/events/schemas/firestore.d.ts +12 -0
  226. package/dist/features/events/schemas/firestore.js +12 -0
  227. package/dist/features/events/schemas/index.d.ts +50 -50
  228. package/dist/features/events/types/index.d.ts +11 -0
  229. package/dist/features/events/types/index.js +57 -1
  230. package/dist/features/faq/actions/faq-actions.d.ts +12 -12
  231. package/dist/features/faq/schemas/index.d.ts +8 -8
  232. package/dist/features/filters/FilterFacetSection.d.ts +7 -1
  233. package/dist/features/filters/FilterFacetSection.js +11 -3
  234. package/dist/features/grouped/schemas/grouped-listing-form.d.ts +101 -0
  235. package/dist/features/grouped/schemas/grouped-listing-form.js +89 -0
  236. package/dist/features/grouped/schemas/index.d.ts +4 -4
  237. package/dist/features/homepage/actions/homepage-section-actions.d.ts +11 -3
  238. package/dist/features/homepage/actions/homepage-section-actions.js +33 -1
  239. package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
  240. package/dist/features/homepage/components/AnnouncementBar.js +3 -3
  241. package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
  242. package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
  243. package/dist/features/homepage/hooks/homepage-query.js +45 -0
  244. package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
  245. package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
  246. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
  247. package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
  248. package/dist/features/homepage/schemas/index.d.ts +33 -2
  249. package/dist/features/homepage/schemas/index.js +24 -0
  250. package/dist/features/layout/AppLayoutShell.d.ts +11 -1
  251. package/dist/features/layout/AppLayoutShell.js +15 -14
  252. package/dist/features/layout/BackToTop.d.ts +9 -0
  253. package/dist/features/layout/BackToTop.js +10 -1
  254. package/dist/features/layout/BottomActions.js +28 -25
  255. package/dist/features/layout/BottomChrome.d.ts +34 -0
  256. package/dist/features/layout/BottomChrome.js +55 -0
  257. package/dist/features/layout/BottomNavLayout.d.ts +6 -0
  258. package/dist/features/layout/BottomNavLayout.js +7 -1
  259. package/dist/features/layout/BottomNavbar.js +15 -2
  260. package/dist/features/layout/FooterLayout.js +11 -1
  261. package/dist/features/layout/NavbarLayout.js +1 -1
  262. package/dist/features/layout/TitleBarLayout.d.ts +7 -0
  263. package/dist/features/layout/TitleBarLayout.js +28 -5
  264. package/dist/features/layout/index.d.ts +2 -0
  265. package/dist/features/layout/index.js +1 -0
  266. package/dist/features/lottery/types/index.d.ts +3 -0
  267. package/dist/features/media/MediaPickerModal.js +5 -1
  268. package/dist/features/messages/schemas/index.d.ts +2 -2
  269. package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
  270. package/dist/features/orders/components/OrderScopeTabs.js +31 -0
  271. package/dist/features/orders/components/OrderStatusTimeline.d.ts +5 -1
  272. package/dist/features/orders/components/OrderStatusTimeline.js +39 -20
  273. package/dist/features/orders/constants/order-scope.d.ts +48 -0
  274. package/dist/features/orders/constants/order-scope.js +111 -0
  275. package/dist/features/orders/repository/orders.repository.d.ts +54 -7
  276. package/dist/features/orders/repository/orders.repository.js +121 -22
  277. package/dist/features/orders/schemas/firestore.d.ts +152 -0
  278. package/dist/features/orders/schemas/firestore.js +30 -0
  279. package/dist/features/orders/schemas/index.d.ts +18 -18
  280. package/dist/features/orders/types/index.d.ts +35 -7
  281. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
  282. package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
  283. package/dist/features/pre-orders/schemas/index.d.ts +1 -1
  284. package/dist/features/products/actions/product-actions.d.ts +14 -0
  285. package/dist/features/products/actions/product-actions.js +49 -11
  286. package/dist/features/products/api/route.d.ts +12 -0
  287. package/dist/features/products/api/route.js +42 -100
  288. package/dist/features/products/components/ArtStickersListView.js +2 -2
  289. package/dist/features/products/components/AuctionsIndexListing.js +13 -11
  290. package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
  291. package/dist/features/products/components/AvailabilityTabs.js +47 -0
  292. package/dist/features/products/components/GroupSettingsPanel.js +5 -1
  293. package/dist/features/products/components/MakeOfferButton.js +48 -49
  294. package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
  295. package/dist/features/products/components/PrizeDrawCollage.js +9 -1
  296. package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
  297. package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
  298. package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
  299. package/dist/features/products/components/PrizeDrawsSection.js +23 -18
  300. package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
  301. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  302. package/dist/features/products/components/ProductForm.js +5 -2
  303. package/dist/features/products/components/ProductGrid.js +6 -1
  304. package/dist/features/products/components/ProductsIndexListing.js +22 -32
  305. package/dist/features/products/components/ProductsIndexPageView.js +6 -9
  306. package/dist/features/products/components/index.d.ts +2 -2
  307. package/dist/features/products/components/index.js +1 -1
  308. package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
  309. package/dist/features/products/config/listing-type-listing-config.js +22 -10
  310. package/dist/features/products/constants/action-defs.d.ts +2 -0
  311. package/dist/features/products/constants/action-defs.js +6 -0
  312. package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
  313. package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
  314. package/dist/features/products/hooks/useProducts.d.ts +5 -0
  315. package/dist/features/products/hooks/useProducts.js +13 -2
  316. package/dist/features/products/repository/products.repository.d.ts +31 -2
  317. package/dist/features/products/repository/products.repository.js +53 -21
  318. package/dist/features/products/schemas/firestore.d.ts +17 -3
  319. package/dist/features/products/schemas/firestore.js +7 -2
  320. package/dist/features/products/schemas/index.d.ts +64 -64
  321. package/dist/features/products/schemas/product-features.validators.d.ts +79 -6
  322. package/dist/features/products/schemas/product-features.validators.js +63 -0
  323. package/dist/features/products/types/index.d.ts +16 -1
  324. package/dist/features/promotions/schemas/index.d.ts +2 -2
  325. package/dist/features/reviews/schemas/index.d.ts +16 -16
  326. package/dist/features/scams/constants/scammer-status-display.d.ts +28 -0
  327. package/dist/features/scams/constants/scammer-status-display.js +79 -0
  328. package/dist/features/search/schemas/index.d.ts +4 -4
  329. package/dist/features/seller/actions/offer-actions.js +57 -4
  330. package/dist/features/seller/components/OfferPhaseTimeline.d.ts +59 -0
  331. package/dist/features/seller/components/OfferPhaseTimeline.js +107 -0
  332. package/dist/features/seller/components/SellerArtView.js +5 -0
  333. package/dist/features/seller/components/SellerAuctionsView.js +13 -15
  334. package/dist/features/seller/components/SellerBidsView.js +11 -4
  335. package/dist/features/seller/components/SellerClassifiedView.js +5 -0
  336. package/dist/features/seller/components/SellerCouponEditorView.js +17 -17
  337. package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
  338. package/dist/features/seller/components/SellerLiveView.js +5 -0
  339. package/dist/features/seller/components/SellerOffersView.js +2 -1
  340. package/dist/features/seller/components/SellerOrdersView.js +31 -9
  341. package/dist/features/seller/components/SellerPayoutSettingsView.js +56 -31
  342. package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
  343. package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
  344. package/dist/features/seller/components/SellerProductShell.js +7 -1
  345. package/dist/features/seller/components/SellerProductsView.js +11 -8
  346. package/dist/features/seller/components/SellerStickersView.js +5 -0
  347. package/dist/features/seller/components/index.d.ts +0 -2
  348. package/dist/features/seller/components/index.js +0 -1
  349. package/dist/features/seller/repository/offer.repository.d.ts +142 -24
  350. package/dist/features/seller/repository/offer.repository.js +165 -26
  351. package/dist/features/seller/schemas/coupon-form.d.ts +72 -0
  352. package/dist/features/seller/schemas/coupon-form.js +116 -0
  353. package/dist/features/seller/schemas/firestore.d.ts +56 -2
  354. package/dist/features/seller/schemas/firestore.js +27 -0
  355. package/dist/features/seller/schemas/index.d.ts +2 -2
  356. package/dist/features/seller/schemas/offer-forms.d.ts +46 -0
  357. package/dist/features/seller/schemas/offer-forms.js +42 -0
  358. package/dist/features/seller/server.d.ts +0 -1
  359. package/dist/features/seller/server.js +0 -1
  360. package/dist/features/shell/SectionForm.d.ts +99 -0
  361. package/dist/features/shell/SectionForm.js +128 -0
  362. package/dist/features/shell/build-sections.d.ts +63 -0
  363. package/dist/features/shell/build-sections.js +207 -0
  364. package/dist/features/shell/entity-form.d.ts +109 -0
  365. package/dist/features/shell/entity-form.js +96 -0
  366. package/dist/features/shell/field-ui-meta.d.ts +115 -0
  367. package/dist/features/shell/field-ui-meta.js +324 -0
  368. package/dist/features/shell/index.d.ts +8 -0
  369. package/dist/features/shell/index.js +4 -0
  370. package/dist/features/status-history/components/StatusTimeline.d.ts +74 -0
  371. package/dist/features/status-history/components/StatusTimeline.js +46 -0
  372. package/dist/features/status-history/index.d.ts +11 -0
  373. package/dist/features/status-history/index.js +10 -0
  374. package/dist/features/store-extensions/components/ReviewDecisionModal.d.ts +27 -0
  375. package/dist/features/store-extensions/components/ReviewDecisionModal.js +82 -0
  376. package/dist/features/store-extensions/index.d.ts +12 -0
  377. package/dist/features/store-extensions/index.js +12 -0
  378. package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +36 -0
  379. package/dist/features/store-extensions/schemas/admin-notification-form.js +114 -0
  380. package/dist/features/store-extensions/schemas/analytics-forms.d.ts +57 -0
  381. package/dist/features/store-extensions/schemas/analytics-forms.js +158 -0
  382. package/dist/features/store-extensions/schemas/custom-role-form.d.ts +85 -0
  383. package/dist/features/store-extensions/schemas/custom-role-form.js +118 -0
  384. package/dist/features/store-extensions/schemas/firestore.d.ts +21 -1
  385. package/dist/features/store-extensions/schemas/firestore.js +60 -0
  386. package/dist/features/store-extensions/schemas/google-config-form.d.ts +53 -0
  387. package/dist/features/store-extensions/schemas/google-config-form.js +105 -0
  388. package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +28 -0
  389. package/dist/features/store-extensions/schemas/item-request-create-form.js +80 -0
  390. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +78 -0
  391. package/dist/features/store-extensions/schemas/listing-template-form.js +87 -0
  392. package/dist/features/store-extensions/schemas/moderation-review-form.d.ts +49 -0
  393. package/dist/features/store-extensions/schemas/moderation-review-form.js +101 -0
  394. package/dist/features/store-extensions/schemas/payout-method-form.d.ts +153 -0
  395. package/dist/features/store-extensions/schemas/payout-method-form.js +155 -0
  396. package/dist/features/store-extensions/schemas/report-create-form.d.ts +25 -0
  397. package/dist/features/store-extensions/schemas/report-create-form.js +79 -0
  398. package/dist/features/store-extensions/schemas/report-review-form.d.ts +47 -0
  399. package/dist/features/store-extensions/schemas/report-review-form.js +111 -0
  400. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +148 -0
  401. package/dist/features/store-extensions/schemas/shipping-config-form.js +104 -0
  402. package/dist/features/store-extensions/schemas/store-category-form.d.ts +54 -0
  403. package/dist/features/store-extensions/schemas/store-category-form.js +73 -0
  404. package/dist/features/stores/api/[storeSlug]/route.js +2 -25
  405. package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
  406. package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
  407. package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
  408. package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
  409. package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
  410. package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
  411. package/dist/features/stores/components/StoreProductsListing.js +11 -1
  412. package/dist/features/stores/repository/store.repository.js +6 -0
  413. package/dist/features/stores/schemas/index.d.ts +6 -6
  414. package/dist/features/support/schemas/index.d.ts +4 -4
  415. package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
  416. package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
  417. package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
  418. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +431 -1
  419. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  420. package/dist/index.d.ts +25 -12
  421. package/dist/index.js +26 -11
  422. package/dist/next/routing/route-map.d.ts +23 -3
  423. package/dist/next/routing/route-map.js +14 -2
  424. package/dist/providers/db-firebase/base.repository.d.ts +30 -0
  425. package/dist/providers/db-firebase/base.repository.js +50 -1
  426. package/dist/providers/db-firebase/index.d.ts +1 -1
  427. package/dist/providers/db-firebase/index.js +1 -1
  428. package/dist/providers/db-firebase/sieve.d.ts +25 -0
  429. package/dist/providers/db-firebase/sieve.js +52 -18
  430. package/dist/react/hooks/useUrlTable.js +10 -1
  431. package/dist/schemas/firestore-value.d.ts +8 -0
  432. package/dist/schemas/firestore-value.js +44 -0
  433. package/dist/schemas/index.d.ts +1 -1
  434. package/dist/schemas/index.js +1 -1
  435. package/dist/schemas/registry.d.ts +702 -69
  436. package/dist/schemas/registry.js +64 -1
  437. package/dist/seed/_helpers/category-forest.d.ts +2 -0
  438. package/dist/seed/_helpers/category-forest.js +309 -0
  439. package/dist/seed/_helpers/category-tree.d.ts +27 -0
  440. package/dist/seed/_helpers/category-tree.js +103 -0
  441. package/dist/seed/bids-seed-data.js +30 -0
  442. package/dist/seed/catalogue-seed-data.js +12 -12
  443. package/dist/seed/categories-seed-data.js +177 -162
  444. package/dist/seed/events-seed-data.js +61 -10
  445. package/dist/seed/homepage-sections-seed-data.js +5 -1
  446. package/dist/seed/offers-seed-data.js +244 -34
  447. package/dist/seed/orders-seed-data.js +336 -1
  448. package/dist/seed/products-art-seed-data.js +50 -12
  449. package/dist/seed/products-auctions-seed-data.js +138 -18
  450. package/dist/seed/products-classifieds-seed-data.js +80 -16
  451. package/dist/seed/products-digital-codes-seed-data.js +66 -18
  452. package/dist/seed/products-live-items-seed-data.js +64 -13
  453. package/dist/seed/products-preorders-seed-data.d.ts +0 -1
  454. package/dist/seed/products-preorders-seed-data.js +52 -13
  455. package/dist/seed/products-prize-draws-seed-data.js +63 -14
  456. package/dist/seed/products-standard-seed-data.js +99 -26
  457. package/dist/seed/products-stickers-seed-data.js +47 -12
  458. package/dist/seed/reviews-seed-data.js +6 -1
  459. package/dist/seed/site-settings-seed-data.d.ts +1 -38
  460. package/dist/seed/site-settings-seed-data.js +38 -76
  461. package/dist/seed/stores-seed-data.js +71 -1
  462. package/dist/seed/users-seed-data.js +15 -5
  463. package/dist/server-entry.d.ts +1 -2
  464. package/dist/server-entry.js +4 -3
  465. package/dist/server.d.ts +6 -3
  466. package/dist/server.js +13 -4
  467. package/dist/styles.css +78 -12
  468. package/dist/tailwind-utilities.css +1 -1
  469. package/dist/ui/components/Button.style.css +19 -4
  470. package/dist/ui/components/CollapsibleSection.d.ts +17 -1
  471. package/dist/ui/components/CollapsibleSection.js +6 -2
  472. package/dist/ui/components/FilterChipGroup.d.ts +25 -1
  473. package/dist/ui/components/FilterChipGroup.js +21 -4
  474. package/dist/ui/components/HandMode.style.css +47 -0
  475. package/dist/ui/components/Layout.d.ts +9 -2
  476. package/dist/ui/components/Layout.js +1 -1
  477. package/dist/ui/components/ListingLayout.js +8 -8
  478. package/dist/ui/components/ListingLayout.style.css +8 -7
  479. package/dist/ui/components/RecordDetailModal.d.ts +10 -1
  480. package/dist/ui/components/RecordDetailModal.js +2 -2
  481. package/dist/ui/components/StickyToolbar.d.ts +3 -1
  482. package/dist/ui/components/StickyToolbar.js +62 -20
  483. package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
  484. package/dist/ui/components/bottom-chrome-slot.js +29 -0
  485. package/dist/ui/components/index.style.css +3 -0
  486. package/dist/ui/forms/FormShell.d.ts +43 -13
  487. package/dist/ui/forms/FormShell.js +22 -11
  488. package/dist/ui/forms/index.d.ts +1 -1
  489. package/dist/ui/index.d.ts +1 -1
  490. package/package.json +2 -1
  491. package/scripts/node-esm-loader.mjs +65 -0
  492. package/scripts/seed-cli-loader.mjs +6 -49
  493. package/scripts/seed-cli.mjs +1 -1
@@ -0,0 +1,51 @@
1
+ /*
2
+ * WHY: The only code in the repo that gated homepage sections on
3
+ * `siteSettings.featureFlags` lived inside `getHomepageInitial`, a
4
+ * function with ZERO call sites — the live homepage
5
+ * (`MarketplaceHomepageView`) reads `homepageSectionsRepository`
6
+ * directly. So turning off the `auctions` flag hid auctions everywhere
7
+ * except the homepage, which kept advertising them.
8
+ *
9
+ * `getHomepageInitial` itself was deleted rather than wired up: its other
10
+ * unique calls, `findActiveAuctions()` / `findActivePreOrders()`, are
11
+ * unbounded `.get()` collection scans with no `.limit()`, which Rule #6
12
+ * forbids. The gate is the only part worth keeping, so it moved here.
13
+ *
14
+ * EXPORTS: SECTION_FEATURE_GATE, filterSectionsByFeatureFlags
15
+ *
16
+ * @tag domain:homepage
17
+ * @tag layer:shared
18
+ * @tag pattern:none
19
+ * @tag access:isomorphic
20
+ * @tag consumers:MarketplaceHomepageView
21
+ * @tag sideEffects:none
22
+ */
23
+ /** Section types that require a feature flag to be enabled to show on the homepage. */
24
+ export const SECTION_FEATURE_GATE = {
25
+ auctions: "auctions",
26
+ "pre-orders": "preOrders",
27
+ events: "events",
28
+ "event-raffles": "events",
29
+ "prize-draws": "events",
30
+ "blog-articles": "blog",
31
+ };
32
+ /**
33
+ * Drop sections whose feature flag is off.
34
+ *
35
+ * A section type with no gate entry always passes, and a MISSING flag value
36
+ * counts as enabled (`!== false`) — the flags map is partial, and a section
37
+ * must not vanish just because an admin has never opened Site Settings.
38
+ */
39
+ export function filterSectionsByFeatureFlags(sections,
40
+ // Not `Partial<Record<FeatureFlagKey, boolean>>`: two of the flag keys
41
+ // (`listingTypes`, `categoryTypes`) hold nested per-type objects rather than
42
+ // booleans. Neither is a gate key, so the `=== false` test below simply
43
+ // never fires for them.
44
+ flags) {
45
+ if (!flags)
46
+ return [...sections];
47
+ return sections.filter((section) => {
48
+ const flagKey = SECTION_FEATURE_GATE[section.type];
49
+ return !flagKey || flags[flagKey] !== false;
50
+ });
51
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The floor, as a percentage of the listed price, below which an offer is
3
+ * rejected — used whenever a listing does not set its own `minOfferPercent`.
4
+ *
5
+ * 70, not 50. This resolves a real disagreement rather than picking a number:
6
+ * 70 is what `makeOffer` has always enforced, so a listing created through
7
+ * either seller editor (which seeded 50) has in practice behaved as 70 the whole
8
+ * time — the forms were lying to sellers. Lowering the server to 50 would
9
+ * silently loosen the rule on every listing that already exists; raising the
10
+ * forms to 70 changes only what new listings are seeded with and makes the UI
11
+ * honest about the rule already in force.
12
+ */
13
+ export declare const DEFAULT_MIN_OFFER_PERCENT = 70;
14
+ /**
15
+ * The lowest amount this listing will accept as an offer.
16
+ *
17
+ * Rounded UP to the paisa, so the returned value always satisfies the
18
+ * percentage rule it was derived from — rounding down could return a number
19
+ * fractionally below the true floor, which the server would then reject while
20
+ * the UI displayed it as the minimum.
21
+ */
22
+ export declare function minOfferAmount(listedPrice: number, percent?: number | null): number;
23
+ /**
24
+ * Whether `amount` is a legal offer on a listing priced at `listedPrice`.
25
+ *
26
+ * Both bounds matter and both are enforced server-side: at or above the listed
27
+ * price there is nothing to negotiate (the buyer should use Add to Cart), and
28
+ * below the floor the seller has said they don't want to hear it.
29
+ */
30
+ export declare function isOfferAmountValid(amount: number, listedPrice: number, percent?: number | null): boolean;
@@ -0,0 +1,59 @@
1
+ /*
2
+ * WHY: The minimum-offer rule had four independent implementations that did not
3
+ * agree. `makeOffer` enforced a 70% floor rounded with
4
+ * `Math.ceil(price * pct / 100 * 100) / 100`; `MakeOfferButton` computed
5
+ * its own floor with `roundRupees()` and seeded the input from it; and both
6
+ * seller editors wrote `minOfferPercent ?? 50` when the toggle was flipped
7
+ * on. So the forms advertised a 50% floor the server would reject, and even
8
+ * at a matching percentage the two rounding rules could differ by a rupee —
9
+ * the button seeding an amount its own submit then bounced.
10
+ * WHAT: One percentage default and one floor function, imported by every gate.
11
+ * Same discipline as `resolveMinBid` in the auctions config next door.
12
+ *
13
+ * EXPORTS:
14
+ * DEFAULT_MIN_OFFER_PERCENT, minOfferAmount, isOfferAmountValid
15
+ *
16
+ * @tag domain:offers,seller
17
+ * @tag layer:shared
18
+ * @tag pattern:none
19
+ * @tag access:isomorphic
20
+ * @tag consumers:offer-actions,MakeOfferButton,ProductDetailPageView,ProductForm,SellerProductShell
21
+ * @tag sideEffects:none
22
+ */
23
+ /**
24
+ * The floor, as a percentage of the listed price, below which an offer is
25
+ * rejected — used whenever a listing does not set its own `minOfferPercent`.
26
+ *
27
+ * 70, not 50. This resolves a real disagreement rather than picking a number:
28
+ * 70 is what `makeOffer` has always enforced, so a listing created through
29
+ * either seller editor (which seeded 50) has in practice behaved as 70 the whole
30
+ * time — the forms were lying to sellers. Lowering the server to 50 would
31
+ * silently loosen the rule on every listing that already exists; raising the
32
+ * forms to 70 changes only what new listings are seeded with and makes the UI
33
+ * honest about the rule already in force.
34
+ */
35
+ export const DEFAULT_MIN_OFFER_PERCENT = 70;
36
+ /**
37
+ * The lowest amount this listing will accept as an offer.
38
+ *
39
+ * Rounded UP to the paisa, so the returned value always satisfies the
40
+ * percentage rule it was derived from — rounding down could return a number
41
+ * fractionally below the true floor, which the server would then reject while
42
+ * the UI displayed it as the minimum.
43
+ */
44
+ export function minOfferAmount(listedPrice, percent) {
45
+ const pct = typeof percent === "number" && Number.isFinite(percent) && percent > 0
46
+ ? percent
47
+ : DEFAULT_MIN_OFFER_PERCENT;
48
+ return Math.ceil(listedPrice * (pct / 100) * 100) / 100;
49
+ }
50
+ /**
51
+ * Whether `amount` is a legal offer on a listing priced at `listedPrice`.
52
+ *
53
+ * Both bounds matter and both are enforced server-side: at or above the listed
54
+ * price there is nothing to negotiate (the buyer should use Add to Cart), and
55
+ * below the floor the seller has said they don't want to hear it.
56
+ */
57
+ export function isOfferAmountValid(amount, listedPrice, percent) {
58
+ return amount >= minOfferAmount(listedPrice, percent) && amount < listedPrice;
59
+ }
@@ -24,18 +24,18 @@ export declare const createOrderSchema: z.ZodObject<{
24
24
  country: z.ZodDefault<z.ZodString>;
25
25
  }, "strip", z.ZodTypeAny, {
26
26
  country: string;
27
- phone: string;
28
- city: string;
29
27
  fullName: string;
28
+ phone: string;
30
29
  addressLine1: string;
30
+ city: string;
31
31
  state: string;
32
32
  pincode: string;
33
33
  addressLine2?: string | undefined;
34
34
  }, {
35
- phone: string;
36
- city: string;
37
35
  fullName: string;
36
+ phone: string;
38
37
  addressLine1: string;
38
+ city: string;
39
39
  state: string;
40
40
  pincode: string;
41
41
  country?: string | undefined;
@@ -47,10 +47,10 @@ export declare const createOrderSchema: z.ZodObject<{
47
47
  paymentMethod: "upi" | "razorpay" | "cod";
48
48
  shippingAddress: {
49
49
  country: string;
50
- phone: string;
51
- city: string;
52
50
  fullName: string;
51
+ phone: string;
53
52
  addressLine1: string;
53
+ city: string;
54
54
  state: string;
55
55
  pincode: string;
56
56
  addressLine2?: string | undefined;
@@ -64,10 +64,10 @@ export declare const createOrderSchema: z.ZodObject<{
64
64
  }, {
65
65
  paymentMethod: "upi" | "razorpay" | "cod";
66
66
  shippingAddress: {
67
- phone: string;
68
- city: string;
69
67
  fullName: string;
68
+ phone: string;
70
69
  addressLine1: string;
70
+ city: string;
71
71
  state: string;
72
72
  pincode: string;
73
73
  country?: string | undefined;
@@ -35,9 +35,6 @@ export declare const productInputSchema: z.ZodObject<{
35
35
  tags: string[];
36
36
  features?: string[] | undefined;
37
37
  description?: string | undefined;
38
- seoTitle?: string | undefined;
39
- seoDescription?: string | undefined;
40
- seoKeywords?: string[] | undefined;
41
38
  brandSlug?: string | undefined;
42
39
  shippingInfo?: string | undefined;
43
40
  returnPolicy?: string | undefined;
@@ -45,6 +42,9 @@ export declare const productInputSchema: z.ZodObject<{
45
42
  insurance?: boolean | undefined;
46
43
  insuranceCost?: number | undefined;
47
44
  shippingPaidBy?: "seller" | "buyer" | undefined;
45
+ seoTitle?: string | undefined;
46
+ seoDescription?: string | undefined;
47
+ seoKeywords?: string[] | undefined;
48
48
  allowOffers?: boolean | undefined;
49
49
  minOfferPercent?: number | undefined;
50
50
  }, {
@@ -55,9 +55,6 @@ export declare const productInputSchema: z.ZodObject<{
55
55
  currency?: string | undefined;
56
56
  features?: string[] | undefined;
57
57
  description?: string | undefined;
58
- seoTitle?: string | undefined;
59
- seoDescription?: string | undefined;
60
- seoKeywords?: string[] | undefined;
61
58
  brandSlug?: string | undefined;
62
59
  stockQuantity?: number | undefined;
63
60
  availableQuantity?: number | undefined;
@@ -69,6 +66,9 @@ export declare const productInputSchema: z.ZodObject<{
69
66
  insurance?: boolean | undefined;
70
67
  insuranceCost?: number | undefined;
71
68
  shippingPaidBy?: "seller" | "buyer" | undefined;
69
+ seoTitle?: string | undefined;
70
+ seoDescription?: string | undefined;
71
+ seoKeywords?: string[] | undefined;
72
72
  allowOffers?: boolean | undefined;
73
73
  minOfferPercent?: number | undefined;
74
74
  }>;
@@ -100,11 +100,8 @@ export declare const productUpdateSchema: z.ZodObject<{
100
100
  currency?: string | undefined;
101
101
  title?: string | undefined;
102
102
  features?: string[] | undefined;
103
- category?: string | undefined;
104
103
  description?: string | undefined;
105
- seoTitle?: string | undefined;
106
- seoDescription?: string | undefined;
107
- seoKeywords?: string[] | undefined;
104
+ category?: string | undefined;
108
105
  brandSlug?: string | undefined;
109
106
  price?: number | undefined;
110
107
  stockQuantity?: number | undefined;
@@ -118,17 +115,17 @@ export declare const productUpdateSchema: z.ZodObject<{
118
115
  insurance?: boolean | undefined;
119
116
  insuranceCost?: number | undefined;
120
117
  shippingPaidBy?: "seller" | "buyer" | undefined;
118
+ seoTitle?: string | undefined;
119
+ seoDescription?: string | undefined;
120
+ seoKeywords?: string[] | undefined;
121
121
  allowOffers?: boolean | undefined;
122
122
  minOfferPercent?: number | undefined;
123
123
  }, {
124
124
  currency?: string | undefined;
125
125
  title?: string | undefined;
126
126
  features?: string[] | undefined;
127
- category?: string | undefined;
128
127
  description?: string | undefined;
129
- seoTitle?: string | undefined;
130
- seoDescription?: string | undefined;
131
- seoKeywords?: string[] | undefined;
128
+ category?: string | undefined;
132
129
  brandSlug?: string | undefined;
133
130
  price?: number | undefined;
134
131
  stockQuantity?: number | undefined;
@@ -142,6 +139,9 @@ export declare const productUpdateSchema: z.ZodObject<{
142
139
  insurance?: boolean | undefined;
143
140
  insuranceCost?: number | undefined;
144
141
  shippingPaidBy?: "seller" | "buyer" | undefined;
142
+ seoTitle?: string | undefined;
143
+ seoDescription?: string | undefined;
144
+ seoKeywords?: string[] | undefined;
145
145
  allowOffers?: boolean | undefined;
146
146
  minOfferPercent?: number | undefined;
147
147
  }>;
@@ -183,21 +183,18 @@ export declare const auctionInputSchema: z.ZodObject<{
183
183
  currency: string;
184
184
  title: string;
185
185
  category: string;
186
- listingType: "auction";
187
186
  price: number;
188
187
  stockQuantity: number;
189
188
  availableQuantity: number;
190
189
  mainImage: string;
191
190
  images: string[];
192
191
  tags: string[];
192
+ listingType: "auction";
193
193
  auctionEndDate: string;
194
194
  startingBid: number;
195
195
  autoExtendable: boolean;
196
196
  features?: string[] | undefined;
197
197
  description?: string | undefined;
198
- seoTitle?: string | undefined;
199
- seoDescription?: string | undefined;
200
- seoKeywords?: string[] | undefined;
201
198
  brandSlug?: string | undefined;
202
199
  shippingInfo?: string | undefined;
203
200
  returnPolicy?: string | undefined;
@@ -210,22 +207,22 @@ export declare const auctionInputSchema: z.ZodObject<{
210
207
  minBidIncrement?: number | undefined;
211
208
  auctionExtensionMinutes?: number | undefined;
212
209
  auctionShippingPaidBy?: "seller" | "winner" | undefined;
210
+ seoTitle?: string | undefined;
211
+ seoDescription?: string | undefined;
212
+ seoKeywords?: string[] | undefined;
213
213
  allowOffers?: boolean | undefined;
214
214
  minOfferPercent?: number | undefined;
215
215
  }, {
216
216
  title: string;
217
217
  category: string;
218
- listingType: "auction";
219
218
  price: number;
220
219
  mainImage: string;
220
+ listingType: "auction";
221
221
  auctionEndDate: string;
222
222
  startingBid: number;
223
223
  currency?: string | undefined;
224
224
  features?: string[] | undefined;
225
225
  description?: string | undefined;
226
- seoTitle?: string | undefined;
227
- seoDescription?: string | undefined;
228
- seoKeywords?: string[] | undefined;
229
226
  brandSlug?: string | undefined;
230
227
  stockQuantity?: number | undefined;
231
228
  availableQuantity?: number | undefined;
@@ -243,6 +240,9 @@ export declare const auctionInputSchema: z.ZodObject<{
243
240
  autoExtendable?: boolean | undefined;
244
241
  auctionExtensionMinutes?: number | undefined;
245
242
  auctionShippingPaidBy?: "seller" | "winner" | undefined;
243
+ seoTitle?: string | undefined;
244
+ seoDescription?: string | undefined;
245
+ seoKeywords?: string[] | undefined;
246
246
  allowOffers?: boolean | undefined;
247
247
  minOfferPercent?: number | undefined;
248
248
  }>;
@@ -281,21 +281,18 @@ export declare const preOrderInputSchema: z.ZodObject<{
281
281
  currency: string;
282
282
  title: string;
283
283
  category: string;
284
- listingType: "pre-order";
285
284
  price: number;
286
285
  stockQuantity: number;
287
286
  availableQuantity: number;
288
287
  mainImage: string;
289
288
  images: string[];
290
289
  tags: string[];
290
+ listingType: "pre-order";
291
291
  preOrderDeliveryDate: string;
292
292
  preOrderProductionStatus: "upcoming" | "in_production" | "ready_to_ship";
293
293
  preOrderCancellable: boolean;
294
294
  features?: string[] | undefined;
295
295
  description?: string | undefined;
296
- seoTitle?: string | undefined;
297
- seoDescription?: string | undefined;
298
- seoKeywords?: string[] | undefined;
299
296
  brandSlug?: string | undefined;
300
297
  shippingInfo?: string | undefined;
301
298
  returnPolicy?: string | undefined;
@@ -305,21 +302,21 @@ export declare const preOrderInputSchema: z.ZodObject<{
305
302
  shippingPaidBy?: "seller" | "buyer" | undefined;
306
303
  preOrderDepositPercent?: number | undefined;
307
304
  preOrderMaxQuantity?: number | undefined;
305
+ seoTitle?: string | undefined;
306
+ seoDescription?: string | undefined;
307
+ seoKeywords?: string[] | undefined;
308
308
  allowOffers?: boolean | undefined;
309
309
  minOfferPercent?: number | undefined;
310
310
  }, {
311
311
  title: string;
312
312
  category: string;
313
- listingType: "pre-order";
314
313
  price: number;
315
314
  mainImage: string;
315
+ listingType: "pre-order";
316
316
  preOrderDeliveryDate: string;
317
317
  currency?: string | undefined;
318
318
  features?: string[] | undefined;
319
319
  description?: string | undefined;
320
- seoTitle?: string | undefined;
321
- seoDescription?: string | undefined;
322
- seoKeywords?: string[] | undefined;
323
320
  brandSlug?: string | undefined;
324
321
  stockQuantity?: number | undefined;
325
322
  availableQuantity?: number | undefined;
@@ -335,6 +332,9 @@ export declare const preOrderInputSchema: z.ZodObject<{
335
332
  preOrderMaxQuantity?: number | undefined;
336
333
  preOrderProductionStatus?: "upcoming" | "in_production" | "ready_to_ship" | undefined;
337
334
  preOrderCancellable?: boolean | undefined;
335
+ seoTitle?: string | undefined;
336
+ seoDescription?: string | undefined;
337
+ seoKeywords?: string[] | undefined;
338
338
  allowOffers?: boolean | undefined;
339
339
  minOfferPercent?: number | undefined;
340
340
  }>;
@@ -41,5 +41,11 @@ export function toProductItem(doc) {
41
41
  // when listingType is missing) — same bug class as the Phase 1 routing
42
42
  // fix, one hop further downstream in the related-items card link path.
43
43
  listingType: doc.listingType ?? undefined,
44
+ // Same reasoning as `listingType` directly above, on the offers axis: the
45
+ // card grid renders a "Taking Offers" pill from this flag, so dropping it
46
+ // here made every related-item / grouped-listing card claim the seller
47
+ // doesn't negotiate — regardless of whether they do.
48
+ allowOffers: doc.allowOffers === true ? true : undefined,
49
+ minOfferPercent: typeof doc.minOfferPercent === "number" ? doc.minOfferPercent : undefined,
44
50
  };
45
51
  }
@@ -12,15 +12,15 @@ export declare const createReviewSchema: z.ZodObject<{
12
12
  body: string;
13
13
  storeId: string;
14
14
  images: string[];
15
- rating: number;
16
15
  productId: string;
16
+ rating: number;
17
17
  orderId?: string | undefined;
18
18
  }, {
19
19
  title: string;
20
20
  body: string;
21
21
  storeId: string;
22
- rating: number;
23
22
  productId: string;
23
+ rating: number;
24
24
  orderId?: string | undefined;
25
25
  images?: string[] | undefined;
26
26
  }>;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Buyer-facing projections of `siteSettings.commissions` / `siteSettings.emi`.
3
+ *
4
+ * The commissions block holds 25 fields, most of which describe internal
5
+ * economics — `gatewayFeePercent`, `sellerShippingFixed`,
6
+ * `platformShippingPercent`, `payoutHoldDays`, `minPayoutAmount`,
7
+ * `autoPayoutWindowDays`, and the listing/featured/promoted slot fees. Ten of
8
+ * them price something the buyer actually chooses, and only those ten belong
9
+ * in a browser.
10
+ *
11
+ * Why a projection rather than a type: the cart and checkout client props were
12
+ * ALREADY typed narrowly (`StoreAddonsRates`, `CodHandlingFeeRates & …`), but
13
+ * the SSR pages passed `settings.commissions` whole. TypeScript's structural
14
+ * typing accepts a wider object without complaint, so every one of the 25
15
+ * fields was serialised into the page's HTML regardless of what the prop type
16
+ * said. A type alone cannot strip fields at runtime — this function can.
17
+ *
18
+ * Use this for BOTH the cart/checkout SSR props and any future public API that
19
+ * needs fee data, so there is exactly one definition of "buyer-facing fee".
20
+ */
21
+ import type { SiteSettingsDocument } from "../../../../features/admin/schemas/firestore";
22
+ import type { EmiSettings } from "../emi/schedule";
23
+ /**
24
+ * = `StoreAddonsRates` ∪ `CodHandlingFeeRates` ∪ `{ codDepositPercent }` —
25
+ * the union of what `StoreAddonsPicker` and the checkout COD block read.
26
+ * Every field is optional because older `siteSettings` documents predate them
27
+ * and each `compute*Fee` helper carries its own default.
28
+ */
29
+ export interface BuyerFacingFees {
30
+ whatsappNotifyFeeEnabled?: boolean;
31
+ whatsappNotifyFee?: number;
32
+ giftWrapFeeEnabled?: boolean;
33
+ giftWrapFee?: number;
34
+ shipmentProtectionFeeEnabled?: boolean;
35
+ shipmentProtectionFeePercent?: number;
36
+ shipmentProtectionFeeMin?: number;
37
+ codHandlingFeeMin?: number;
38
+ codHandlingFeePercent?: number;
39
+ codDepositPercent?: number;
40
+ }
41
+ /**
42
+ * Withheld on purpose (15 of 25): platformFeePercent, gstPercent,
43
+ * minimumTransactionFee, platformFeeMax, gatewayFeePercent,
44
+ * sellerShippingFixed, platformShippingPercent, platformShippingFixedMin,
45
+ * autoPayoutWindowDays, payoutHoldDays, minPayoutAmount, auctionListingFee,
46
+ * preOrderListingFee, featuredSlotFee, promotedSlotFee.
47
+ *
48
+ * The buyer still SEES the platform fee and GST — as computed amounts in the
49
+ * server pricing preview (`CartPriceBreakdownData`), never as the rates that
50
+ * produced them.
51
+ */
52
+ export declare function toBuyerFacingFees(commissions: SiteSettingsDocument["commissions"] | null | undefined): BuyerFacingFees | null;
53
+ /**
54
+ * EMI settings minus `surchargeSellerSharePercent` — how the surcharge is
55
+ * split between platform and seller is a commercial term, not something the
56
+ * buyer's browser needs. Pair with `computeBuyerEmiQuote`, which is typed to
57
+ * accept exactly this shape.
58
+ */
59
+ export type BuyerEmiSettings = Omit<EmiSettings, "surchargeSellerSharePercent">;
60
+ export declare function toBuyerEmiSettings(emi: SiteSettingsDocument["emi"] | null | undefined): BuyerEmiSettings | null;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Withheld on purpose (15 of 25): platformFeePercent, gstPercent,
3
+ * minimumTransactionFee, platformFeeMax, gatewayFeePercent,
4
+ * sellerShippingFixed, platformShippingPercent, platformShippingFixedMin,
5
+ * autoPayoutWindowDays, payoutHoldDays, minPayoutAmount, auctionListingFee,
6
+ * preOrderListingFee, featuredSlotFee, promotedSlotFee.
7
+ *
8
+ * The buyer still SEES the platform fee and GST — as computed amounts in the
9
+ * server pricing preview (`CartPriceBreakdownData`), never as the rates that
10
+ * produced them.
11
+ */
12
+ export function toBuyerFacingFees(commissions) {
13
+ if (!commissions)
14
+ return null;
15
+ return {
16
+ whatsappNotifyFeeEnabled: commissions.whatsappNotifyFeeEnabled,
17
+ whatsappNotifyFee: commissions.whatsappNotifyFee,
18
+ giftWrapFeeEnabled: commissions.giftWrapFeeEnabled,
19
+ giftWrapFee: commissions.giftWrapFee,
20
+ shipmentProtectionFeeEnabled: commissions.shipmentProtectionFeeEnabled,
21
+ shipmentProtectionFeePercent: commissions.shipmentProtectionFeePercent,
22
+ shipmentProtectionFeeMin: commissions.shipmentProtectionFeeMin,
23
+ codHandlingFeeMin: commissions.codHandlingFeeMin,
24
+ codHandlingFeePercent: commissions.codHandlingFeePercent,
25
+ codDepositPercent: commissions.codDepositPercent,
26
+ };
27
+ }
28
+ export function toBuyerEmiSettings(emi) {
29
+ if (!emi)
30
+ return null;
31
+ return {
32
+ enabled: emi.enabled,
33
+ minOrderValue: emi.minOrderValue,
34
+ tenureOptions: emi.tenureOptions,
35
+ tokenPercent: emi.tokenPercent,
36
+ billingDay: emi.billingDay,
37
+ surchargePercentPerMonth: emi.surchargePercentPerMonth,
38
+ };
39
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The public shape of site settings — the ONLY fields
3
+ * `GET /api/site-settings` may return to an unauthenticated caller.
4
+ *
5
+ * This type lives under `_internal/shared/` rather than beside the server
6
+ * adapter because client code consumes it (`useSiteSettings<PublicSiteSettings>()`),
7
+ * and client files must not import from `_internal/server`.
8
+ *
9
+ * Additive by explicit triage only: see `PUBLIC_SITE_SETTINGS_FIELDS` /
10
+ * `PRIVATE_SITE_SETTINGS_FIELDS` in
11
+ * `../../../server/features/site-settings/adapters.ts`, enforced by
12
+ * `scripts/audit-public-projection-parity.mjs`. Adding a field here without a
13
+ * proven client reader is how the endpoint drifted in the first place.
14
+ */
15
+ import type { NotificationChannelConfig, SiteSettingsDocument } from "../../../../features/admin/schemas/firestore";
16
+ import type { MediaVideoWatermark } from "../../../../features/media/MediaVideo";
17
+ export interface PublicSiteSettings {
18
+ /** Support channels shown to buyers. Deliberately NOT the full `contact` — `address` and `upiVpa` stay server-side. */
19
+ contact: {
20
+ email: string;
21
+ phone: string;
22
+ whatsappNumber: string;
23
+ };
24
+ /** Deliberately NOT the full `payment` block — only the checkout OTP threshold has a client reader. */
25
+ payment: {
26
+ otpCheckoutThreshold?: number;
27
+ };
28
+ /** Deliberately NOT the full `featureFlags` — `adminCheckoutBypass` must never be advertised publicly. */
29
+ featureFlags: {
30
+ listingTypes?: SiteSettingsDocument["featureFlags"]["listingTypes"];
31
+ };
32
+ notificationChannels?: NotificationChannelConfig;
33
+ announcementBar?: SiteSettingsDocument["announcementBar"];
34
+ navConfig?: SiteSettingsDocument["navConfig"];
35
+ actionConfig?: SiteSettingsDocument["actionConfig"];
36
+ background?: SiteSettingsDocument["background"];
37
+ watermark?: SiteSettingsDocument["watermark"];
38
+ /** Derived, not a stored field — the resolved marker → wordmark → text chain. */
39
+ effectiveWatermark?: MediaVideoWatermark;
40
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Tracked-field diffing and capped append for entity status history.
3
+ *
4
+ * These are deliberately plain functions rather than a `BaseRepository`
5
+ * override: the repository method that owns a transition already knows the
6
+ * actor and the trigger, and a generic hook would have to guess both. The
7
+ * repository calls `buildHistoryEntry` + `appendHistoryEntry` inside its own
8
+ * write primitive — which is the point, since that is what keeps the 32
9
+ * call sites above it unchanged.
10
+ */
11
+ import type { FirestoreDocument } from "../../../schemas/types";
12
+ import { type AppendHistoryResult, type FieldChange, type HistoryActor, type StatusChangeEntry } from "./types";
13
+ /**
14
+ * Diff only the fields an entity declares as tracked.
15
+ *
16
+ * The tracked list is explicit per entity, never "every field": a whole-
17
+ * document diff would record the `updatedAt` bump on every single write and
18
+ * exhaust the 50-entry cap within days, burying the transitions anyone
19
+ * actually wants to read.
20
+ *
21
+ * A field absent from `patch` is untouched — this diffs the patch against
22
+ * the current document, not two full documents.
23
+ */
24
+ export declare function diffTrackedFields(current: FirestoreDocument | undefined, patch: FirestoreDocument, tracked: readonly string[]): Record<string, FieldChange>;
25
+ export interface BuildHistoryEntryInput {
26
+ actor: HistoryActor;
27
+ trigger: string;
28
+ changes: Record<string, FieldChange>;
29
+ reason?: string;
30
+ note?: string;
31
+ /** Injectable for deterministic tests and seed fixtures. */
32
+ now?: Date;
33
+ }
34
+ export declare function buildHistoryEntry(input: BuildHistoryEntryInput): StatusChangeEntry;
35
+ /**
36
+ * Append with a FIFO cap. Returns the new array plus the running count of
37
+ * entries dropped over the document's lifetime, so the caller can persist it
38
+ * and the UI can be honest about what it is not showing.
39
+ */
40
+ export declare function appendHistoryEntry(existing: readonly StatusChangeEntry[] | undefined, entry: StatusChangeEntry, previousTruncatedCount?: number, cap?: number): AppendHistoryResult;
41
+ /**
42
+ * The whole flow in one call: diff, and return the patch additions needed to
43
+ * record it. Returns `null` when no tracked field changed — the caller then
44
+ * writes its patch unchanged, so an untracked update never grows the array.
45
+ */
46
+ export declare function withHistory<TPatch extends FirestoreDocument>(current: FirestoreDocument | undefined, patch: TPatch, opts: {
47
+ tracked: readonly string[];
48
+ actor: HistoryActor;
49
+ trigger: string;
50
+ reason?: string;
51
+ note?: string;
52
+ /**
53
+ * Changes the field diff cannot express, merged over the diffed ones.
54
+ *
55
+ * Needed for append-to-array events: a refund posted to `refunds[]`
56
+ * shows up in a raw diff as "an array of 1 became an array of 2", which
57
+ * is true and useless. The caller instead contributes
58
+ * `{ refund: { from: null, to: { amount, type, reason } } }` — the thing
59
+ * a reader actually wants on the timeline.
60
+ */
61
+ extraChanges?: Record<string, FieldChange>;
62
+ /**
63
+ * This entity's PII field names — pass the same list the repository hands
64
+ * to `encryptPiiFields` (`ORDER_PII_FIELDS`, `OFFER_PII_FIELDS`, …).
65
+ *
66
+ * 🛑 Not optional in spirit. `encryptPiiFields` is a FLAT top-level loop:
67
+ * it reads `doc[field]`, skips anything that is not a string, and never
68
+ * descends into arrays or nested objects. `statusHistory` is an array of
69
+ * objects, so a PII value that reaches `changes` is written to Firestore
70
+ * **in plaintext** and `mapDoc`'s decrypt never touches it on the way
71
+ * back out — a leak with no error and no visible symptom.
72
+ *
73
+ * Scrubbing here rather than at each call site is deliberate: a
74
+ * convention that says "don't put PII in history" is one forgetful
75
+ * adopter away from that leak, and 9 more entities adopt this primitive.
76
+ *
77
+ * SCOPE: this scrubs `changes` structurally, at any depth — a key whose
78
+ * NAME is PII is dropped. It cannot scrub `note`, which is free text the
79
+ * user themselves authored (a seller's counter-offer note). The rule
80
+ * there is a call-site one: pass the author's own text, never an identity
81
+ * field lifted off the document.
82
+ */
83
+ piiFields?: readonly string[];
84
+ historyField?: string;
85
+ truncatedField?: string;
86
+ now?: Date;
87
+ cap?: number;
88
+ }): (TPatch & FirestoreDocument) | null;