@mohasinac/appkit 4.62.0 → 4.63.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 (391) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +8 -29
  3. package/dist/_internal/client/features/layout/filterNavItems.d.ts +28 -0
  4. package/dist/_internal/client/features/layout/filterNavItems.js +35 -0
  5. package/dist/_internal/server/features/ads/booking.d.ts +118 -0
  6. package/dist/_internal/server/features/ads/booking.js +326 -0
  7. package/dist/_internal/server/features/checkout/actions.d.ts +129 -9
  8. package/dist/_internal/server/features/checkout/actions.js +850 -79
  9. package/dist/_internal/server/features/checkout/expand-order-items.d.ts +1 -2
  10. package/dist/_internal/server/features/checkout/expand-order-items.js +32 -0
  11. package/dist/_internal/server/features/checkout/freeze-parts.d.ts +50 -0
  12. package/dist/_internal/server/features/checkout/freeze-parts.js +94 -0
  13. package/dist/_internal/server/features/checkout/value-otp-gate.d.ts +55 -0
  14. package/dist/_internal/server/features/checkout/value-otp-gate.js +60 -0
  15. package/dist/_internal/server/features/dashboard/attention.d.ts +128 -0
  16. package/dist/_internal/server/features/dashboard/attention.js +183 -0
  17. package/dist/_internal/server/features/dashboard/data.d.ts +47 -0
  18. package/dist/_internal/server/features/dashboard/data.js +82 -0
  19. package/dist/_internal/server/features/inventory/reservations.d.ts +99 -0
  20. package/dist/_internal/server/features/inventory/reservations.js +273 -0
  21. package/dist/_internal/server/features/invoicing/allocate.d.ts +63 -0
  22. package/dist/_internal/server/features/invoicing/allocate.js +162 -0
  23. package/dist/_internal/server/features/invoicing/credit-note.d.ts +57 -0
  24. package/dist/_internal/server/features/invoicing/credit-note.js +126 -0
  25. package/dist/_internal/server/features/invoicing/gstr1.d.ts +74 -0
  26. package/dist/_internal/server/features/invoicing/gstr1.js +251 -0
  27. package/dist/_internal/server/features/invoicing/issue.d.ts +96 -0
  28. package/dist/_internal/server/features/invoicing/issue.js +202 -0
  29. package/dist/_internal/server/features/offers/destinations.d.ts +40 -0
  30. package/dist/_internal/server/features/offers/destinations.js +65 -0
  31. package/dist/_internal/server/features/orders/actions.d.ts +8 -1
  32. package/dist/_internal/server/features/orders/actions.js +81 -8
  33. package/dist/_internal/server/features/orders/adapters.js +54 -0
  34. package/dist/_internal/server/features/orders/amend-delivery.d.ts +56 -0
  35. package/dist/_internal/server/features/orders/amend-delivery.js +124 -0
  36. package/dist/_internal/server/features/orders/balance.d.ts +89 -0
  37. package/dist/_internal/server/features/orders/balance.js +256 -0
  38. package/dist/_internal/server/features/orders/cancellation-refund.d.ts +15 -9
  39. package/dist/_internal/server/features/orders/cancellation-refund.js +15 -9
  40. package/dist/_internal/server/features/points/award.js +46 -4
  41. package/dist/_internal/server/features/pricing/actions.d.ts +58 -0
  42. package/dist/_internal/server/features/pricing/actions.js +144 -0
  43. package/dist/_internal/server/features/refunds/actions.js +26 -0
  44. package/dist/_internal/server/features/shipping/book-split.d.ts +86 -0
  45. package/dist/_internal/server/features/shipping/book-split.js +130 -0
  46. package/dist/_internal/server/features/shipping/book.d.ts +61 -0
  47. package/dist/_internal/server/features/shipping/book.js +176 -0
  48. package/dist/_internal/server/features/shipping/courier-block.d.ts +69 -0
  49. package/dist/_internal/server/features/shipping/courier-block.js +264 -0
  50. package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
  51. package/dist/_internal/server/features/site-settings/adapters.js +29 -0
  52. package/dist/_internal/server/features/stores/adapters.d.ts +2 -2
  53. package/dist/_internal/server/features/stores/adapters.js +65 -0
  54. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  55. package/dist/_internal/server/functions/scheduled.js +95 -2
  56. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +11 -2
  57. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +4 -0
  58. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +19 -2
  59. package/dist/_internal/server/jobs/core/index.d.ts +2 -1
  60. package/dist/_internal/server/jobs/core/index.js +2 -1
  61. package/dist/_internal/server/jobs/core/jobRunners.js +45 -0
  62. package/dist/_internal/server/jobs/core/onJobCreated.d.ts +30 -7
  63. package/dist/_internal/server/jobs/core/onJobCreated.js +78 -45
  64. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +7 -0
  65. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +65 -0
  66. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +33 -0
  67. package/dist/_internal/server/jobs/core/reservationExpiry.d.ts +17 -0
  68. package/dist/_internal/server/jobs/core/reservationExpiry.js +40 -0
  69. package/dist/_internal/server/jobs/core/runJobOnce.d.ts +48 -0
  70. package/dist/_internal/server/jobs/core/runJobOnce.js +195 -0
  71. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +25 -2
  72. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  73. package/dist/_internal/server/jobs/handlers/index.js +1 -0
  74. package/dist/_internal/server/jobs/handlers/onOrderStatusChange.js +17 -0
  75. package/dist/_internal/server/jobs/handlers/reservationExpiry.d.ts +2 -0
  76. package/dist/_internal/server/jobs/handlers/reservationExpiry.js +2 -0
  77. package/dist/_internal/server/notifications/channel-health.d.ts +26 -3
  78. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  79. package/dist/_internal/shared/actions/action-registry.js +296 -0
  80. package/dist/_internal/shared/checkout/coupon-discount.d.ts +43 -1
  81. package/dist/_internal/shared/checkout/coupon-discount.js +26 -1
  82. package/dist/_internal/shared/checkout/order-math.d.ts +174 -0
  83. package/dist/_internal/shared/checkout/order-math.js +159 -0
  84. package/dist/_internal/shared/checkout/refundable-base.d.ts +25 -0
  85. package/dist/_internal/shared/checkout/refundable-base.js +13 -1
  86. package/dist/_internal/shared/checkout/rules/index.d.ts +1 -1
  87. package/dist/_internal/shared/checkout/rules/index.js +1 -1
  88. package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +18 -0
  89. package/dist/_internal/shared/checkout/rules/payment-gate.js +25 -0
  90. package/dist/_internal/shared/checkout/split.d.ts +75 -0
  91. package/dist/_internal/shared/checkout/split.js +120 -0
  92. package/dist/_internal/shared/content/disclaimers.d.ts +88 -0
  93. package/dist/_internal/shared/content/disclaimers.js +217 -0
  94. package/dist/_internal/shared/content/published-values.d.ts +93 -0
  95. package/dist/_internal/shared/content/published-values.js +206 -0
  96. package/dist/_internal/shared/features/admin/integrations.d.ts +139 -0
  97. package/dist/_internal/shared/features/admin/integrations.js +263 -0
  98. package/dist/_internal/shared/features/dashboard/hub-sections.d.ts +72 -0
  99. package/dist/_internal/shared/features/dashboard/hub-sections.js +75 -0
  100. package/dist/_internal/shared/features/emi/choice.d.ts +98 -0
  101. package/dist/_internal/shared/features/emi/choice.js +69 -0
  102. package/dist/_internal/shared/features/emi/group.d.ts +84 -0
  103. package/dist/_internal/shared/features/emi/group.js +126 -0
  104. package/dist/_internal/shared/features/ledger/posting.d.ts +107 -0
  105. package/dist/_internal/shared/features/ledger/posting.js +165 -0
  106. package/dist/_internal/shared/features/ledger/reports.d.ts +76 -0
  107. package/dist/_internal/shared/features/ledger/reports.js +127 -0
  108. package/dist/_internal/shared/features/ledger/rules.d.ts +170 -0
  109. package/dist/_internal/shared/features/ledger/rules.js +221 -0
  110. package/dist/_internal/shared/features/offers/coordination.d.ts +122 -0
  111. package/dist/_internal/shared/features/offers/coordination.js +80 -0
  112. package/dist/_internal/shared/features/orders/delivery-snapshot.d.ts +114 -0
  113. package/dist/_internal/shared/features/orders/delivery-snapshot.js +116 -0
  114. package/dist/_internal/shared/features/orders/dispute-reasons.d.ts +113 -0
  115. package/dist/_internal/shared/features/orders/dispute-reasons.js +181 -0
  116. package/dist/_internal/shared/features/orders/refund-copy.d.ts +1 -1
  117. package/dist/_internal/shared/features/orders/refund-copy.js +18 -1
  118. package/dist/_internal/shared/features/payouts/pay-period.d.ts +91 -0
  119. package/dist/_internal/shared/features/payouts/pay-period.js +104 -0
  120. package/dist/_internal/shared/features/points/accepts.d.ts +29 -0
  121. package/dist/_internal/shared/features/points/accepts.js +49 -0
  122. package/dist/_internal/shared/features/pricing/rate-registry.d.ts +150 -0
  123. package/dist/_internal/shared/features/pricing/rate-registry.js +246 -0
  124. package/dist/_internal/shared/features/shipping/parcel.d.ts +123 -0
  125. package/dist/_internal/shared/features/shipping/parcel.js +139 -0
  126. package/dist/_internal/shared/features/shipping/shared-purchase.d.ts +91 -0
  127. package/dist/_internal/shared/features/shipping/shared-purchase.js +108 -0
  128. package/dist/_internal/shared/features/site-settings/fees.d.ts +16 -8
  129. package/dist/_internal/shared/features/site-settings/fees.js +12 -8
  130. package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
  131. package/dist/_internal/shared/fees/calculator.d.ts +33 -1
  132. package/dist/_internal/shared/fees/calculator.js +32 -2
  133. package/dist/_internal/shared/fees/explain.d.ts +81 -0
  134. package/dist/_internal/shared/fees/explain.js +101 -0
  135. package/dist/_internal/shared/history/index.d.ts +1 -1
  136. package/dist/_internal/shared/history/index.js +1 -1
  137. package/dist/_internal/shared/history/types.d.ts +7 -1
  138. package/dist/_internal/shared/history/types.js +25 -0
  139. package/dist/client.d.ts +21 -0
  140. package/dist/client.js +43 -0
  141. package/dist/constants/api-endpoints.d.ts +114 -0
  142. package/dist/constants/api-endpoints.js +55 -0
  143. package/dist/constants/field-names.d.ts +42 -0
  144. package/dist/constants/field-names.js +52 -0
  145. package/dist/contracts/index.d.ts +1 -1
  146. package/dist/contracts/shipping.d.ts +45 -0
  147. package/dist/contracts/shipping.js +15 -0
  148. package/dist/features/about/components/AboutView.js +1 -1
  149. package/dist/features/account/components/BuyerAuctionsGuideView.js +4 -1
  150. package/dist/features/account/components/UserOrdersView.js +47 -35
  151. package/dist/features/admin/components/AdminCouponEditorView.js +17 -0
  152. package/dist/features/admin/components/AdminIntegrationsView.d.ts +55 -0
  153. package/dist/features/admin/components/AdminIntegrationsView.js +74 -0
  154. package/dist/features/admin/components/AdminInvoicingView.d.ts +2 -0
  155. package/dist/features/admin/components/AdminInvoicingView.js +65 -0
  156. package/dist/features/admin/components/AdminOrderEditorView.d.ts +33 -1
  157. package/dist/features/admin/components/AdminOrderEditorView.js +81 -3
  158. package/dist/features/admin/components/AdminOrdersGuideView.js +23 -2
  159. package/dist/features/admin/components/AdminOrdersView.js +86 -5
  160. package/dist/features/admin/components/OwnerQuickActions.js +24 -2
  161. package/dist/features/admin/constants/filter-tabs.d.ts +6 -0
  162. package/dist/features/admin/constants/filter-tabs.js +6 -0
  163. package/dist/features/admin/constants/site-settings-tabs.d.ts +1 -1
  164. package/dist/features/admin/hooks/useAdminListingData.js +16 -0
  165. package/dist/features/admin/schemas/admin-user-form.d.ts +2 -2
  166. package/dist/features/admin/schemas/firestore.d.ts +62 -0
  167. package/dist/features/admin/schemas/firestore.js +5 -0
  168. package/dist/features/ads/schemas/booking-write.d.ts +120 -0
  169. package/dist/features/ads/schemas/booking-write.js +75 -0
  170. package/dist/features/ads/schemas/creative-form.d.ts +18 -0
  171. package/dist/features/ads/schemas/creative-form.js +51 -0
  172. package/dist/features/ads/schemas/firestore.d.ts +140 -0
  173. package/dist/features/ads/schemas/firestore.js +109 -0
  174. package/dist/features/auctions/repository/bid.repository.js +3 -1
  175. package/dist/features/audit-log/schemas/firestore.d.ts +140 -0
  176. package/dist/features/audit-log/schemas/firestore.js +89 -0
  177. package/dist/features/auth/actions/profile-actions.d.ts +69 -1
  178. package/dist/features/auth/actions/profile-actions.js +62 -1
  179. package/dist/features/auth/permissions/constants.js +13 -0
  180. package/dist/features/auth/schemas/firestore.d.ts +16 -2
  181. package/dist/features/auth/schemas/firestore.js +2 -1
  182. package/dist/features/blog/actions/blog-actions.d.ts +6 -0
  183. package/dist/features/blog/actions/blog-actions.js +17 -2
  184. package/dist/features/blog/api/route.js +4 -1
  185. package/dist/features/blog/columns/index.js +5 -0
  186. package/dist/features/blog/components/BlogIndexPageView.js +2 -1
  187. package/dist/features/blog/repository/blog.repository.d.ts +4 -0
  188. package/dist/features/blog/repository/blog.repository.js +5 -0
  189. package/dist/features/blog/schemas/blog-form.d.ts +3 -0
  190. package/dist/features/blog/schemas/blog-form.js +1 -0
  191. package/dist/features/blog/schemas/firestore.d.ts +38 -1
  192. package/dist/features/blog/schemas/firestore.js +23 -0
  193. package/dist/features/blog/schemas/index.d.ts +6 -0
  194. package/dist/features/blog/schemas/index.js +2 -0
  195. package/dist/features/blog/types/index.d.ts +2 -0
  196. package/dist/features/cart/components/CartPriceBreakdown.d.ts +25 -1
  197. package/dist/features/cart/components/CartPriceBreakdown.js +29 -6
  198. package/dist/features/cart/components/PointsTenderPicker.d.ts +61 -0
  199. package/dist/features/cart/components/PointsTenderPicker.js +15 -0
  200. package/dist/features/cart/components/StoreAddonsPicker.js +2 -1
  201. package/dist/features/cart/components/index.d.ts +2 -0
  202. package/dist/features/cart/components/index.js +1 -0
  203. package/dist/features/cart/repository/cart.repository.d.ts +33 -0
  204. package/dist/features/cart/repository/cart.repository.js +47 -0
  205. package/dist/features/cart/schemas/firestore.d.ts +116 -0
  206. package/dist/features/contact/email.d.ts +27 -10
  207. package/dist/features/contact/email.js +20 -3
  208. package/dist/features/dashboard/components/DashboardHubView.d.ts +83 -0
  209. package/dist/features/dashboard/components/DashboardHubView.js +56 -0
  210. package/dist/features/dashboard/components/DashboardSectionsClient.d.ts +23 -0
  211. package/dist/features/dashboard/components/DashboardSectionsClient.js +66 -0
  212. package/dist/features/dispute-reasons/components/AdminDisputeReasonsView.d.ts +55 -0
  213. package/dist/features/dispute-reasons/components/AdminDisputeReasonsView.js +175 -0
  214. package/dist/features/dispute-reasons/repository/dispute-reasons.repository.d.ts +62 -0
  215. package/dist/features/dispute-reasons/repository/dispute-reasons.repository.js +108 -0
  216. package/dist/features/dispute-reasons/schemas/firestore.d.ts +62 -0
  217. package/dist/features/dispute-reasons/schemas/firestore.js +40 -0
  218. package/dist/features/events/components/EventSaleBanner.js +1 -1
  219. package/dist/features/faq/components/FAQAccordion.d.ts +13 -1
  220. package/dist/features/faq/components/FAQAccordion.js +29 -4
  221. package/dist/features/faq/components/FAQPageContent.js +2 -2
  222. package/dist/features/gateway-events/schemas/index.d.ts +2 -2
  223. package/dist/features/homepage/schemas/index.d.ts +8 -8
  224. package/dist/features/inventory/schemas/stock-reservation.d.ts +114 -0
  225. package/dist/features/inventory/schemas/stock-reservation.js +103 -0
  226. package/dist/features/invoicing/schemas/firestore.d.ts +112 -0
  227. package/dist/features/invoicing/schemas/firestore.js +45 -0
  228. package/dist/features/invoicing/utils/financial-year.d.ts +43 -0
  229. package/dist/features/invoicing/utils/financial-year.js +53 -0
  230. package/dist/features/jobs/actions/enqueue-job.js +18 -1
  231. package/dist/features/jobs/repository/jobs.repository.d.ts +62 -1
  232. package/dist/features/jobs/repository/jobs.repository.js +84 -1
  233. package/dist/features/jobs/schemas/firestore.d.ts +80 -0
  234. package/dist/features/jobs/schemas/firestore.js +37 -0
  235. package/dist/features/layout/AppLayoutShell.d.ts +9 -1
  236. package/dist/features/layout/AppLayoutShell.js +12 -4
  237. package/dist/features/layout/BottomActions.js +2 -1
  238. package/dist/features/layout/BottomNavbar.d.ts +10 -2
  239. package/dist/features/layout/SideActionDock.js +52 -2
  240. package/dist/features/layout/TitleBarLayout.js +13 -4
  241. package/dist/features/layout/TitleBarLayout.style.css +59 -0
  242. package/dist/features/layout/useCtaReveal.d.ts +16 -1
  243. package/dist/features/layout/useCtaReveal.js +17 -26
  244. package/dist/features/ledger/repository/journal.repository.d.ts +110 -0
  245. package/dist/features/ledger/repository/journal.repository.js +312 -0
  246. package/dist/features/ledger/schemas/expenses.d.ts +87 -0
  247. package/dist/features/ledger/schemas/expenses.js +27 -0
  248. package/dist/features/ledger/schemas/firestore.d.ts +183 -0
  249. package/dist/features/ledger/schemas/firestore.js +69 -0
  250. package/dist/features/lottery/schemas/zod.d.ts +6 -6
  251. package/dist/features/media/MediaImage.js +22 -1
  252. package/dist/features/media/upload/ImageUpload.js +1 -1
  253. package/dist/features/obligations/constants/policies.js +24 -1
  254. package/dist/features/orders/components/BalancePaymentPanel.d.ts +12 -0
  255. package/dist/features/orders/components/BalancePaymentPanel.js +94 -0
  256. package/dist/features/orders/components/OrderPaymentSummary.js +10 -1
  257. package/dist/features/orders/components/OrderProvenanceCard.d.ts +8 -0
  258. package/dist/features/orders/components/OrderProvenanceCard.js +185 -0
  259. package/dist/features/orders/components/RaiseDisputeForm.d.ts +14 -0
  260. package/dist/features/orders/components/RaiseDisputeForm.js +119 -0
  261. package/dist/features/orders/components/RefundRequestView.js +19 -1
  262. package/dist/features/orders/components/index.d.ts +4 -0
  263. package/dist/features/orders/components/index.js +2 -0
  264. package/dist/features/orders/constants/order-lane-tabs.d.ts +69 -0
  265. package/dist/features/orders/constants/order-lane-tabs.js +88 -0
  266. package/dist/features/orders/repository/orders.repository.d.ts +85 -1
  267. package/dist/features/orders/repository/orders.repository.js +205 -6
  268. package/dist/features/orders/schemas/balance.d.ts +40 -0
  269. package/dist/features/orders/schemas/balance.js +47 -0
  270. package/dist/features/orders/schemas/firestore.d.ts +398 -1
  271. package/dist/features/orders/schemas/firestore.js +43 -0
  272. package/dist/features/orders/schemas/index.d.ts +56 -8
  273. package/dist/features/orders/schemas/index.js +12 -0
  274. package/dist/features/orders/types/index.d.ts +47 -0
  275. package/dist/features/orders/utils/courier-block.d.ts +25 -0
  276. package/dist/features/orders/utils/courier-block.js +23 -0
  277. package/dist/features/payment-cases/schemas/firestore.d.ts +26 -1
  278. package/dist/features/payment-cases/schemas/firestore.js +1 -0
  279. package/dist/features/payments/repository/payout.repository.js +3 -2
  280. package/dist/features/payments/schemas/firestore.d.ts +92 -1
  281. package/dist/features/payments/schemas/firestore.js +23 -0
  282. package/dist/features/pricing/components/AdminPricingView.d.ts +13 -0
  283. package/dist/features/pricing/components/AdminPricingView.js +157 -0
  284. package/dist/features/products/components/PrizeDrawDetailPageView.js +2 -2
  285. package/dist/features/products/components/ProductDetailPageView.d.ts +17 -1
  286. package/dist/features/products/components/ProductDetailPageView.js +2 -2
  287. package/dist/features/products/schemas/firestore.d.ts +26 -1
  288. package/dist/features/products/schemas/firestore.js +2 -0
  289. package/dist/features/products/schemas/index.d.ts +2 -2
  290. package/dist/features/products/schemas/product-features.validators.d.ts +10 -10
  291. package/dist/features/promotions/actions/coupon-stacking.d.ts +30 -3
  292. package/dist/features/promotions/actions/coupon-stacking.js +21 -2
  293. package/dist/features/promotions/components/CouponCard.js +13 -0
  294. package/dist/features/promotions/constants/coupon-help.d.ts +2 -2
  295. package/dist/features/promotions/constants/coupon-help.js +9 -1
  296. package/dist/features/promotions/schemas/firestore.d.ts +24 -0
  297. package/dist/features/promotions/schemas/firestore.js +4 -0
  298. package/dist/features/promotions/types/index.d.ts +19 -1
  299. package/dist/features/reviews/repository/reviews.repository.d.ts +14 -0
  300. package/dist/features/reviews/repository/reviews.repository.js +16 -0
  301. package/dist/features/scams/components/ScamProfileView.js +2 -2
  302. package/dist/features/scams/components/ScamRegistryView.js +2 -2
  303. package/dist/features/scams/repository/scammer.repository.js +2 -1
  304. package/dist/features/scams/schemas/firestore.d.ts +2 -1
  305. package/dist/features/scams/schemas/firestore.js +2 -1
  306. package/dist/features/search/action-index/tab-entries.js +1 -1
  307. package/dist/features/seller/actions/offer-actions.js +56 -0
  308. package/dist/features/seller/actions/seller-actions.d.ts +1 -1
  309. package/dist/features/seller/actions/seller-actions.js +37 -3
  310. package/dist/features/seller/components/DispatchForm.d.ts +11 -0
  311. package/dist/features/seller/components/DispatchForm.js +190 -0
  312. package/dist/features/seller/components/SellerOrdersView.js +221 -27
  313. package/dist/features/seller/components/index.d.ts +1 -0
  314. package/dist/features/seller/components/index.js +1 -0
  315. package/dist/features/seller/hooks/useSellerListingData.js +25 -0
  316. package/dist/features/seller/repository/offer.repository.js +4 -3
  317. package/dist/features/seller/schemas/firestore.d.ts +23 -2
  318. package/dist/features/seller/schemas/firestore.js +3 -2
  319. package/dist/features/seller/schemas/index.d.ts +4 -4
  320. package/dist/features/seller/schemas/order-forms.d.ts +61 -4
  321. package/dist/features/seller/schemas/order-forms.js +41 -8
  322. package/dist/features/shipments/schemas/firestore.d.ts +25 -0
  323. package/dist/features/shipments/schemas/validation.d.ts +4 -4
  324. package/dist/features/shipping-boxes/repository/shipping-boxes.repository.d.ts +82 -0
  325. package/dist/features/shipping-boxes/repository/shipping-boxes.repository.js +145 -0
  326. package/dist/features/shipping-boxes/schemas/firestore.d.ts +80 -0
  327. package/dist/features/shipping-boxes/schemas/firestore.js +53 -0
  328. package/dist/features/store-extensions/schemas/report-create-form.d.ts +2 -2
  329. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +2 -2
  330. package/dist/features/stores/components/StoreOrdersGuideView.js +6 -1
  331. package/dist/features/stores/repository/store.repository.d.ts +18 -0
  332. package/dist/features/stores/repository/store.repository.js +27 -1
  333. package/dist/features/stores/schemas/firestore.d.ts +112 -0
  334. package/dist/features/stores/schemas/firestore.js +20 -0
  335. package/dist/features/stores/schemas/index.d.ts +6 -6
  336. package/dist/features/stores/types/index.d.ts +19 -0
  337. package/dist/features/support/repository/support.repository.js +72 -6
  338. package/dist/features/support/schemas/firestore.d.ts +17 -0
  339. package/dist/features/support/schemas/index.d.ts +8 -8
  340. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  341. package/dist/index.d.ts +11 -1
  342. package/dist/index.js +33 -1
  343. package/dist/next/routing/route-map.d.ts +112 -0
  344. package/dist/next/routing/route-map.js +63 -0
  345. package/dist/providers/shipping-shiprocket/index.d.ts +27 -1
  346. package/dist/providers/shipping-shiprocket/index.js +84 -1
  347. package/dist/react/contexts/SessionContext.d.ts +17 -1
  348. package/dist/schemas/registry.d.ts +69 -34
  349. package/dist/schemas/sieve.d.ts +2 -2
  350. package/dist/security/pii-schemas.d.ts +1 -1
  351. package/dist/security/pii-schemas.js +45 -0
  352. package/dist/server-entry.d.ts +2 -2
  353. package/dist/server-entry.js +8 -1
  354. package/dist/server.d.ts +36 -1
  355. package/dist/server.js +183 -1
  356. package/dist/styles.css +412 -80
  357. package/dist/tailwind-utilities.css +1 -1
  358. package/dist/tokens/themes/default-dark.js +1 -0
  359. package/dist/tokens/themes/default-light.js +1 -0
  360. package/dist/tokens/themes/required.d.ts +1 -1
  361. package/dist/tokens/themes/required.js +1 -0
  362. package/dist/tokens/tokens.css +15 -0
  363. package/dist/ui/components/Button.d.ts +10 -1
  364. package/dist/ui/components/Button.js +25 -3
  365. package/dist/ui/components/Chart.d.ts +63 -0
  366. package/dist/ui/components/Chart.js +169 -0
  367. package/dist/ui/components/Chart.style.css +214 -0
  368. package/dist/ui/components/Disclaimer.d.ts +19 -0
  369. package/dist/ui/components/Disclaimer.js +83 -0
  370. package/dist/ui/components/OverflowRow.js +54 -2
  371. package/dist/ui/components/OverflowRow.style.css +38 -0
  372. package/dist/ui/components/RichTextEditor.js +99 -8
  373. package/dist/ui/components/chart-spec.d.ts +68 -0
  374. package/dist/ui/components/chart-spec.js +140 -0
  375. package/dist/ui/components/index.style.css +1 -0
  376. package/dist/ui/components/surface-tokens.d.ts +1 -1
  377. package/dist/ui/components/surface-tokens.js +9 -0
  378. package/dist/ui/components/tabs-overflow.js +64 -11
  379. package/dist/ui/components/toolbar-collapse.d.ts +13 -0
  380. package/dist/ui/components/toolbar-collapse.js +10 -1
  381. package/dist/ui/index.d.ts +8 -0
  382. package/dist/ui/index.js +9 -0
  383. package/dist/ui/rich-text/RichText.d.ts +10 -1
  384. package/dist/ui/rich-text/RichText.js +33 -2
  385. package/dist/ui/rich-text/RichText.style.css +83 -79
  386. package/dist/ui/rich-text/RichTextRenderer.d.ts +30 -1
  387. package/dist/ui/rich-text/RichTextRenderer.js +34 -2
  388. package/dist/ui/rich-text/chart-blocks.d.ts +62 -0
  389. package/dist/ui/rich-text/chart-blocks.js +87 -0
  390. package/package.json +1 -1
  391. package/scripts/seed-cli.mjs +1834 -1822
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Plain-language derivations for every fee line a buyer is shown.
3
+ *
4
+ * 🛑 The problem this solves is not presentation. The Order Summary listed
5
+ * `EMI surcharge ₹2,133.00`, `Platform fee ₹10.00` and `GST on platform fee
6
+ * ₹1.80` beside a `₹39,500.00` subtotal, and **none of the three could be
7
+ * checked by the person paying them.** ₹2,133 on ₹39,500 is 5.4% — a buyer has
8
+ * no way to tell whether that is a rate, a tenure, a rounding error or a bug,
9
+ * and the only honest response to an unexplained charge is to distrust it.
10
+ *
11
+ * ── Why the STRINGS live here and not in the component ────────────────────
12
+ *
13
+ * Each sentence is a claim about how a number was computed, and the number is
14
+ * computed in `calculator.ts` / `emi/schedule.ts`. Putting the sentence beside
15
+ * a `<Line>` would make it a second, prose implementation of the same rule —
16
+ * free to drift the moment a cap moves (Root Cause #75: a rule reachable by
17
+ * copy-paste gets copied, and the copy never learns about the branch added
18
+ * later). These functions read the SAME rate fields the calculators read.
19
+ *
20
+ * ── Why they take the CHARGED amount as an argument ───────────────────────
21
+ *
22
+ * They explain the figure actually on screen; they do not recompute it. If a
23
+ * derivation and the rendered amount ever disagree, the explanation must say
24
+ * so rather than quietly print a second, prettier number — so each function
25
+ * ends at the charged value and describes the route to it.
26
+ *
27
+ * 🛑 NOTHING HERE MAY NAME A SELLER-SIDE RATE. `surchargeSellerSharePercent`
28
+ * (the platform/seller split of the EMI surcharge), `gatewayFeePercent`,
29
+ * `payoutHoldDays` and `minPayoutAmount` are `PRIVATE_*_FIELDS`
30
+ * (Root Cause #70). The EMI functions below are typed against
31
+ * `BuyerEmiSettings`, which excludes the split structurally — so the omission
32
+ * is enforced by `tsc`, not by this paragraph.
33
+ */
34
+ import type { BuyerEmiSettings, BuyerFacingFees } from "../features/site-settings/fees";
35
+ import type { BuyerEmiQuote } from "../features/emi/schedule";
36
+ /** One rendered explanation: a short claim plus the steps behind it. */
37
+ export interface FeeDerivation {
38
+ /** One sentence answering "why am I paying this". */
39
+ summary: string;
40
+ /** The arithmetic, one step per line, in the order it is applied. */
41
+ steps: string[];
42
+ }
43
+ /**
44
+ * The platform commission.
45
+ *
46
+ * The cap is the interesting half and the reason this needed explaining at
47
+ * all: on a ₹39,500 order the uncapped commission is large and the charge is
48
+ * ₹10, so the number on screen bears no visible relation to the subtotal.
49
+ */
50
+ export declare function explainPlatformFee(subtotal: number, charged: number, fees: BuyerFacingFees | null, currency?: string): FeeDerivation | null;
51
+ /**
52
+ * GST on the commission.
53
+ *
54
+ * 🛑 Levied on the commission ACTUALLY CHARGED, never on the uncapped figure —
55
+ * which is the one thing a buyer checking ₹1.80 against a ₹39,500 subtotal
56
+ * would get wrong.
57
+ */
58
+ export declare function explainGstOnPlatformFee(platformFee: number, charged: number, fees: BuyerFacingFees | null, currency?: string): FeeDerivation | null;
59
+ /**
60
+ * The EMI surcharge — the cost of credit, stated as a cost of credit.
61
+ *
62
+ * 🛑 Takes a `BuyerEmiQuote`, which is `computeBuyerEmiQuote`'s return type and
63
+ * carries no surcharge split. `computeEmiSchedule`'s richer result is
64
+ * assignable to it, so the type does not stop a server caller passing the
65
+ * wrong one — but nothing here reads a field that only exists on the wider
66
+ * shape, so no split can be printed either.
67
+ */
68
+ export declare function explainEmiSurcharge(sellerSubtotal: number, tenureMonths: number, quote: BuyerEmiQuote, emi: BuyerEmiSettings | null, currency?: string): FeeDerivation | null;
69
+ /** COD handling — a cap that bites on most carts, same shape as the commission. */
70
+ export declare function explainCodHandlingFee(subtotal: number, charged: number, fees: BuyerFacingFees | null, currency?: string): FeeDerivation | null;
71
+ /**
72
+ * Every derivation a price breakdown can render, keyed by the line it belongs
73
+ * to. A key with no entry simply renders no disclosure — a line we cannot
74
+ * explain says nothing rather than guessing.
75
+ */
76
+ export interface FeeDerivations {
77
+ platformFee?: FeeDerivation | null;
78
+ gstOnFee?: FeeDerivation | null;
79
+ emiSurcharge?: FeeDerivation | null;
80
+ codHandlingFee?: FeeDerivation | null;
81
+ }
@@ -0,0 +1,101 @@
1
+ import { formatCurrency } from "../../../utils/number.formatter.js";
2
+ /** `2` → `"2%"`, `2.5` → `"2.5%"` — no trailing `.0`. */
3
+ function pct(value) {
4
+ return `${Number(value.toFixed(2))}%`;
5
+ }
6
+ /**
7
+ * The platform commission.
8
+ *
9
+ * The cap is the interesting half and the reason this needed explaining at
10
+ * all: on a ₹39,500 order the uncapped commission is large and the charge is
11
+ * ₹10, so the number on screen bears no visible relation to the subtotal.
12
+ */
13
+ export function explainPlatformFee(subtotal, charged, fees, currency = "INR") {
14
+ if (!fees || fees.platformFeePercent === undefined)
15
+ return null;
16
+ const money = (v) => formatCurrency(v, currency);
17
+ const uncapped = (subtotal * fees.platformFeePercent) / 100;
18
+ const steps = [
19
+ `${pct(fees.platformFeePercent)} of ${money(subtotal)} = ${money(uncapped)}`,
20
+ ];
21
+ if (fees.platformFeeMax !== undefined && uncapped > fees.platformFeeMax) {
22
+ steps.push(`Capped at ${money(fees.platformFeeMax)} — you pay the cap, not the percentage`);
23
+ }
24
+ /*
25
+ * The floor is defined on `platformFee + gstOnFee` COMBINED and is applied
26
+ * once, inside `allocateCheckoutFees`, as extra platform fee with no GST of
27
+ * its own. So it is mentioned here and never on the GST line — see the D41
28
+ * note in `calculator.ts`.
29
+ */
30
+ if (fees.minimumTransactionFee !== undefined && charged > Math.min(uncapped, fees.platformFeeMax ?? uncapped)) {
31
+ steps.push(`Raised to meet the ${money(fees.minimumTransactionFee)} minimum transaction fee, which covers the commission and its GST together`);
32
+ }
33
+ steps.push(`You pay ${money(charged)}`);
34
+ return {
35
+ summary: fees.platformFeeMax !== undefined && uncapped > fees.platformFeeMax
36
+ ? `Our commission is ${pct(fees.platformFeePercent)}, capped at ${money(fees.platformFeeMax)} per order.`
37
+ : `Our commission is ${pct(fees.platformFeePercent)} of the order.`,
38
+ steps,
39
+ };
40
+ }
41
+ /**
42
+ * GST on the commission.
43
+ *
44
+ * 🛑 Levied on the commission ACTUALLY CHARGED, never on the uncapped figure —
45
+ * which is the one thing a buyer checking ₹1.80 against a ₹39,500 subtotal
46
+ * would get wrong.
47
+ */
48
+ export function explainGstOnPlatformFee(platformFee, charged, fees, currency = "INR") {
49
+ if (!fees || fees.gstPercent === undefined)
50
+ return null;
51
+ const money = (v) => formatCurrency(v, currency);
52
+ return {
53
+ summary: `GST at ${pct(fees.gstPercent)}, charged on our commission — not on the price of the items.`,
54
+ steps: [
55
+ `${pct(fees.gstPercent)} of the ${money(platformFee)} commission = ${money(charged)}`,
56
+ "Item prices already include their own GST, shown below the total",
57
+ ],
58
+ };
59
+ }
60
+ /**
61
+ * The EMI surcharge — the cost of credit, stated as a cost of credit.
62
+ *
63
+ * 🛑 Takes a `BuyerEmiQuote`, which is `computeBuyerEmiQuote`'s return type and
64
+ * carries no surcharge split. `computeEmiSchedule`'s richer result is
65
+ * assignable to it, so the type does not stop a server caller passing the
66
+ * wrong one — but nothing here reads a field that only exists on the wider
67
+ * shape, so no split can be printed either.
68
+ */
69
+ export function explainEmiSurcharge(sellerSubtotal, tenureMonths, quote, emi, currency = "INR") {
70
+ if (!emi)
71
+ return null;
72
+ const money = (v) => formatCurrency(v, currency);
73
+ const principal = sellerSubtotal - quote.tokenAmount;
74
+ const perMonth = quote.installments[0]?.amount ?? 0;
75
+ return {
76
+ summary: `Spreading ${money(sellerSubtotal)} over ${tenureMonths} months costs ${money(quote.surchargeAmount)} — that is the total cost of credit.`,
77
+ steps: [
78
+ `Token paid today: ${pct(emi.tokenPercent)} of ${money(sellerSubtotal)} = ${money(quote.tokenAmount)}`,
79
+ `Financed amount: ${money(sellerSubtotal)} − ${money(quote.tokenAmount)} = ${money(principal)}`,
80
+ `Surcharge: ${pct(emi.surchargePercentPerMonth)} of ${money(principal)} per month × ${tenureMonths} months = ${money(quote.surchargeAmount)}`,
81
+ `Repaid over ${tenureMonths} instalments of about ${money(perMonth)}, due on day ${emi.billingDay} of each month`,
82
+ `Total you will pay: ${money(quote.tokenAmount)} + ${money(quote.remainingBalance)} = ${money(quote.tokenAmount + quote.remainingBalance)}`,
83
+ ],
84
+ };
85
+ }
86
+ /** COD handling — a cap that bites on most carts, same shape as the commission. */
87
+ export function explainCodHandlingFee(subtotal, charged, fees, currency = "INR") {
88
+ if (!fees || fees.codHandlingFeePercent === undefined)
89
+ return null;
90
+ const money = (v) => formatCurrency(v, currency);
91
+ const uncapped = (subtotal * fees.codHandlingFeePercent) / 100;
92
+ const steps = [`${pct(fees.codHandlingFeePercent)} of ${money(subtotal)} = ${money(uncapped)}`];
93
+ if (fees.codHandlingFeeCap !== undefined && uncapped > fees.codHandlingFeeCap) {
94
+ steps.push(`Capped at ${money(fees.codHandlingFeeCap)}`);
95
+ }
96
+ steps.push(`You pay ${money(charged)}`);
97
+ return {
98
+ summary: "What it costs us to collect cash at your door and bank it.",
99
+ steps,
100
+ };
101
+ }
@@ -1,4 +1,4 @@
1
1
  export type { HistoryActorRole, HistoryActor, FieldChange, StatusChangeEntry, AppendHistoryResult, SerialisedStatusChangeEntry, } from "./types";
2
- export { STATUS_HISTORY_MAX } from "./types";
2
+ export { STATUS_HISTORY_MAX, HISTORY_ACTOR_ROLE } from "./types";
3
3
  export type { BuildHistoryEntryInput } from "./history";
4
4
  export { diffTrackedFields, buildHistoryEntry, appendHistoryEntry, withHistory, } from "./history";
@@ -1,2 +1,2 @@
1
- export { STATUS_HISTORY_MAX } from "./types.js";
1
+ export { STATUS_HISTORY_MAX, HISTORY_ACTOR_ROLE } from "./types.js";
2
2
  export { diffTrackedFields, buildHistoryEntry, appendHistoryEntry, withHistory, } from "./history.js";
@@ -9,7 +9,13 @@ import type { FirestoreValue } from "../../../schemas/types";
9
9
  * entities had any history at all — `ads`, built inline in a route handler
10
10
  * with no type and no reuse.
11
11
  */
12
- export type HistoryActorRole = "buyer" | "seller" | "admin" | "system";
12
+ export declare const HISTORY_ACTOR_ROLE: {
13
+ readonly BUYER: "buyer";
14
+ readonly SELLER: "seller";
15
+ readonly ADMIN: "admin";
16
+ readonly SYSTEM: "system";
17
+ };
18
+ export type HistoryActorRole = (typeof HISTORY_ACTOR_ROLE)[keyof typeof HISTORY_ACTOR_ROLE];
13
19
  export interface HistoryActor {
14
20
  /** Firebase Auth uid. Absent for `system` (cron jobs, Firestore triggers). */
15
21
  uid?: string;
@@ -1,3 +1,28 @@
1
+ /**
2
+ * Generic entity status history — the shape shared by every entity that
3
+ * records how it got to its current state.
4
+ *
5
+ * Built for orders first (W2) and adopted by stores, payouts, offers, bids,
6
+ * support tickets, scammer profiles, catalogue approvals, shipments and
7
+ * returns in W15. Before this existed, exactly ONE of ~40 status-bearing
8
+ * entities had any history at all — `ads`, built inline in a route handler
9
+ * with no type and no reuse.
10
+ */
11
+ /*
12
+ * 🛑 This is an ACTOR KIND, not a `UserDocument.role`. No user has the role
13
+ * "buyer" — a buyer's stored role is "user" — so the two namespaces must never
14
+ * be compared, and `audit-phantom-buyer-role` exists to catch exactly that
15
+ * mistake in a runtime auth gate.
16
+ *
17
+ * The constant below is what a gate should compare against: it names the
18
+ * namespace at the call site, where a bare `"buyer"` literal cannot.
19
+ */
20
+ export const HISTORY_ACTOR_ROLE = {
21
+ BUYER: "buyer",
22
+ SELLER: "seller",
23
+ ADMIN: "admin",
24
+ SYSTEM: "system",
25
+ };
1
26
  /**
2
27
  * Cap for any history array. Matches `HISTORY_MAX`'s reasoning: an unbounded
3
28
  * array on a hot document inflates every read of that document (Rule #6), and
package/dist/client.d.ts CHANGED
@@ -283,6 +283,8 @@ export { useLogout, useLogin, useGoogleLogin, useLinkGoogleAccount, useRegister,
283
283
  export type { LoginCredentials, RegisterData, ForgotPasswordData, ResetPasswordData, VerifyEmailData, ChangeEmailData } from "./features/auth/index";
284
284
  export { CartView, CartItemRow, CartGroupLineRow, CartSummary, CartPriceBreakdown, CartDrawer, CheckoutView, CheckoutSuccessView, CheckoutAddressStep, useGuestCart, useCartCount, useAddToCart, useCart, useGuestCartMerge, useCartQuery } from "./features/cart/index";
285
285
  export { StoreAddonsPicker, hasAnyStoreAddon } from "./features/cart/index";
286
+ export { PointsTenderPicker } from "./features/cart/index";
287
+ export type { PointsTenderPickerProps } from "./features/cart/index";
286
288
  export { clientLineTotal } from "./features/cart/utils/line-total";
287
289
  export type { PricedCartLine } from "./features/cart/utils/line-total";
288
290
  export type { CartPriceBreakdownData, CartPriceBreakdownStore, StoreAddonsValue, StoreAddonsRates } from "./features/cart/index";
@@ -389,12 +391,20 @@ export type { UserAccountHubViewProps, UserAccountHubViewLabels, UserOrdersViewP
389
391
  export { useOrders, useOrder, OrdersList } from "./features/orders/index";
390
392
  export { OrderStatusTimeline } from "./features/orders/components/OrderStatusTimeline";
391
393
  export type { OrderStatusTimelineProps } from "./features/orders/components/OrderStatusTimeline";
394
+ export { OrderProvenanceCard } from "./features/orders/components/OrderProvenanceCard";
395
+ export type { OrderProvenanceCardProps } from "./features/orders/components/OrderProvenanceCard";
396
+ export { RaiseDisputeForm } from "./features/orders/components/RaiseDisputeForm";
397
+ export type { RaiseDisputeFormProps } from "./features/orders/components/RaiseDisputeForm";
398
+ export type { OrderSourceContext } from "./features/orders/schemas/firestore";
392
399
  export { PROTECTION_CLAIM_REASON_LABEL } from "./features/protection-claims/schemas/firestore";
393
400
  export type { ProtectionClaimReason } from "./features/protection-claims/schemas/firestore";
394
401
  export { OrderCompletionPanel } from "./features/orders/components/OrderCompletionPanel";
395
402
  export type { OrderCompletionPanelProps, RateableLine } from "./features/orders/components/OrderCompletionPanel";
396
403
  export { EmiInstallmentsPanel } from "./features/orders/components/EmiInstallmentsPanel";
397
404
  export type { EmiInstallmentsPanelProps } from "./features/orders/components/EmiInstallmentsPanel";
405
+ export { BalancePaymentPanel } from "./features/orders/components/BalancePaymentPanel";
406
+ export type { BalancePaymentPanelProps } from "./features/orders/components/BalancePaymentPanel";
407
+ export { balanceProofSchema, balanceReviewSchema, type BalanceProofInput, type BalanceReviewInput, } from "./features/orders/schemas/balance";
398
408
  export { CountdownDisplay } from "./ui/components/CountdownDisplay";
399
409
  export type { CountdownDisplayProps } from "./ui/components/CountdownDisplay";
400
410
  export { OrderAddonBadges } from "./features/orders/components/OrderAddonBadges";
@@ -506,6 +516,7 @@ export { CommandPalette, useCommandPaletteHotkey } from "./features/shell/index"
506
516
  export type { CommandPaletteGroup } from "./features/shell/index";
507
517
  export { AdminBlogEditorView, AdminBundleEditorView, AdminCarouselEditorView, AdminCategoryEditorView, AdminCouponEditorView, AdminFaqEditorView, AdminFeatureEditorView, AdminOrderEditorView, AdminPayoutMarkPaidModal, AdminAuditLogView, AdminMoneyCasesView, AdminGatewayEventsView, ViewAuditLogEntryModal, AdminProductEditorView, AdminScammerEditorView, AdminEmployeeEditorView, AdminNavEditorView, AdminUserEditorView, AdminStoreEditorView, AdminSublistingCategoryEditorView, AdminSupportTicketDetailView, } from "./features/admin/index";
508
518
  export type { AdminStoreEditorViewProps, AdminPayoutMarkPaidModalProps, AdminAuditLogViewProps, AdminMoneyCasesViewProps, AuditLogEntryDetail, ViewAuditLogEntryModalProps } from "./features/admin/index";
519
+ export type { AdminOrderEditorViewProps } from "./features/admin/components/AdminOrderEditorView";
509
520
  export type { NavItemData } from "./features/admin/index";
510
521
  export { PageLoader } from "./ui/index";
511
522
  export { ADMIN_CHECKOUT_BYPASS_FLAG_KEY } from "./features/admin/schemas/firestore";
@@ -527,6 +538,10 @@ export { BUNDLE_COPY } from "./_internal/shared/features/categories/bundle-copy"
527
538
  export { useSiteSettings } from "./core/index";
528
539
  export { checkEmiEligibility, computeEmiSchedule, computeBuyerEmiQuote, } from "./_internal/shared/features/emi/schedule";
529
540
  export type { EmiSettings, BuyerEmiQuote } from "./_internal/shared/features/emi/schedule";
541
+ export { emiTenderBlockReason, isTenderCompatibleWithEmi } from "./_internal/shared/features/emi/choice";
542
+ export type { EmiTender } from "./_internal/shared/features/emi/choice";
543
+ export { explainCodHandlingFee, explainEmiSurcharge, explainGstOnPlatformFee, explainPlatformFee, } from "./_internal/shared/fees/explain";
544
+ export type { FeeDerivation, FeeDerivations } from "./_internal/shared/fees/explain";
530
545
  export type { BuyerFacingFees, BuyerEmiSettings, } from "./_internal/shared/features/site-settings/fees";
531
546
  export type { PublicSiteSettings } from "./_internal/shared/features/site-settings/types";
532
547
  export { computeCodHandlingFee } from "./_internal/shared/fees/calculator";
@@ -551,6 +566,8 @@ export { raffleEntrySchema } from "./features/contact/schemas/inquiry-forms";
551
566
  export { orderCancelSchema, paymentProofSchema, } from "./features/orders/schemas/buyer-forms";
552
567
  export { scamReportFormSchema } from "./features/scams/schemas/report-form";
553
568
  export { sublistingCategoryFormSchema } from "./features/store-extensions/schemas/sublisting-category-form";
569
+ export { adCreativeFormSchema } from "./features/ads/schemas/creative-form";
570
+ export type { AdCreativeFormValues } from "./features/ads/schemas/creative-form";
554
571
  export { adminStoreUpdateSchema, announcementBarSchema, } from "./features/admin/schemas/admin-editor-forms";
555
572
  export { adminOrderUpdateSchema, employeeInviteSchema, hardBanReasonSchema, featureFlagsUpdateSchema, adminAdFormSchema, } from "./features/admin/schemas/admin-ops-forms";
556
573
  export { changeEmailSchema } from "./features/account/schemas/index";
@@ -586,6 +603,10 @@ export type { SellerSupportViewProps } from "./features/seller/components/Seller
586
603
  export { REFUND_COPY } from "./_internal/shared/features/orders/refund-copy";
587
604
  export { RETURN_REASON, FINAL_SALE_EXEMPT_REASONS, RETURN_REASON_LABEL, RETURN_REASON_GROUP_LABEL, isFinalSaleExempt, isReturnReason, selectableReturnReasons, } from "./_internal/shared/features/orders/return-reasons";
588
605
  export type { ReturnReason } from "./_internal/shared/features/orders/return-reasons";
606
+ export { DISPUTE_KIND, DISPUTE_KIND_LABEL, DISPUTE_GATE, DISPUTE_TRANSIT_WINDOW_DAYS, DISPUTE_NOT_REACHED_GRACE_DAYS, isDisputeKind, checkDisputeGate, resolveDisputeEtd, disputeNotReachedFilableFrom, } from "./_internal/shared/features/orders/dispute-reasons";
607
+ export type { DisputeKind, DisputeGateOrder, DisputeGateResult, } from "./_internal/shared/features/orders/dispute-reasons";
608
+ export { INTEGRATIONS, INTEGRATION_ORDER, readIntegrationStates, integrationPatch, allIntegrationsPatch, } from "./_internal/shared/features/admin/integrations";
609
+ export type { IntegrationId, IntegrationDescriptor, IntegrationPatch, IntegrationState, } from "./_internal/shared/features/admin/integrations";
589
610
  export { RefundRequestView } from "./features/orders/components/RefundRequestView";
590
611
  export type { RefundRequestViewProps, RefundRequestSubmission, } from "./features/orders/components/RefundRequestView";
591
612
  export { ORDER_RETURN_WINDOW_DAYS, ORDER_RETURN_WINDOW_MS, ORDER_CANCELLABLE_STATUSES, } from "./_internal/shared/features/orders/config";
package/dist/client.js CHANGED
@@ -335,6 +335,10 @@ export { ProtectedRoute, ForgotPasswordView, LoginForm, RegisterForm, ResetPassw
335
335
  export { useLogout, useLogin, useGoogleLogin, useLinkGoogleAccount, useRegister, useForgotPassword, useResetPassword, useVerifyEmail, useChangeEmail } from "./features/auth/index.js";
336
336
  export { CartView, CartItemRow, CartGroupLineRow, CartSummary, CartPriceBreakdown, CartDrawer, CheckoutView, CheckoutSuccessView, CheckoutAddressStep, useGuestCart, useCartCount, useAddToCart, useCart, useGuestCartMerge, useCartQuery } from "./features/cart/index.js";
337
337
  export { StoreAddonsPicker, hasAnyStoreAddon } from "./features/cart/index.js";
338
+ // D46/D47 — the cart's single "pay with my points" control. One per CART, not
339
+ // per store, unlike the add-ons picker above it: points are the buyer's balance
340
+ // rather than something bought from a seller.
341
+ export { PointsTenderPicker } from "./features/cart/index.js";
338
342
  export { clientLineTotal } from "./features/cart/utils/line-total.js";
339
343
  // `clearCartOps` / `removeCartOpsFor` are exported because the cart page has to
340
344
  // drain the queue after a removal succeeds server-side — without them a cleared
@@ -416,6 +420,9 @@ export { couponDraftToPayload } from "./features/seller/schemas/coupon-form.js";
416
420
  export { UserAccountHubView, UserOrdersView, UserBidsView, OrderDetailView, UserReturnsView, useNotifications } from "./features/account/index.js";
417
421
  export { useOrders, useOrder, OrdersList } from "./features/orders/index.js";
418
422
  export { OrderStatusTimeline } from "./features/orders/components/OrderStatusTimeline.js";
423
+ export { OrderProvenanceCard } from "./features/orders/components/OrderProvenanceCard.js";
424
+ // The buyer's dispute form: pick a kind, pick a reason, say what happened.
425
+ export { RaiseDisputeForm } from "./features/orders/components/RaiseDisputeForm.js";
419
426
  /*
420
427
  * The buyer's completion surface. Client entry only — it fetches and posts.
421
428
  */
@@ -433,6 +440,9 @@ export { PROTECTION_CLAIM_REASON_LABEL } from "./features/protection-claims/sche
433
440
  export { OrderCompletionPanel } from "./features/orders/components/OrderCompletionPanel.js";
434
441
  // Buyer-facing EMI schedule with a pay-any-instalment action.
435
442
  export { EmiInstallmentsPanel } from "./features/orders/components/EmiInstallmentsPanel.js";
443
+ // D55 — the pre-order balance collector's buyer panel and its write shapes.
444
+ export { BalancePaymentPanel } from "./features/orders/components/BalancePaymentPanel.js";
445
+ export { balanceProofSchema, balanceReviewSchema, } from "./features/orders/schemas/balance.js";
436
446
  export { CountdownDisplay } from "./ui/components/CountdownDisplay.js";
437
447
  export { OrderAddonBadges } from "./features/orders/components/OrderAddonBadges.js";
438
448
  // Manual-payment (cash / UPI / EMI) shared constants — pure data + predicates,
@@ -560,6 +570,15 @@ export { useProduct } from "./features/products/index.js";
560
570
  export { BUNDLE_COPY } from "./_internal/shared/features/categories/bundle-copy.js";
561
571
  export { useSiteSettings } from "./core/index.js";
562
572
  export { checkEmiEligibility, computeEmiSchedule, computeBuyerEmiQuote, } from "./_internal/shared/features/emi/schedule.js";
573
+ /*
574
+ * 0f — the checkout client needs to know which tenders can carry instalments
575
+ * so it can DISABLE an incompatible one with a reason rather than let the
576
+ * buyer pick it and be refused at submit. Same map the server refuses from, so
577
+ * the affordance and the rule cannot disagree.
578
+ */
579
+ export { emiTenderBlockReason, isTenderCompatibleWithEmi } from "./_internal/shared/features/emi/choice.js";
580
+ /* The derivation strings for the fee breakdown — pure, no I/O. */
581
+ export { explainCodHandlingFee, explainEmiSurcharge, explainGstOnPlatformFee, explainPlatformFee, } from "./_internal/shared/fees/explain.js";
563
582
  export { computeCodHandlingFee } from "./_internal/shared/fees/calculator.js"; // reexport-from-internal-ok: pure fee-calc utility consumed directly by public checkout UI (CheckoutRouteClient.tsx), same category as the sibling computeEmiSchedule/checkEmiEligibility re-export two lines above
564
583
  export { FAQPageContent } from "./features/faq/index.js";
565
584
  export { CategoryInlineSelect } from "./features/seller/components/CategoryInlineSelect.js";
@@ -596,6 +615,7 @@ export { raffleEntrySchema } from "./features/contact/schemas/inquiry-forms.js";
596
615
  export { orderCancelSchema, paymentProofSchema, } from "./features/orders/schemas/buyer-forms.js";
597
616
  export { scamReportFormSchema } from "./features/scams/schemas/report-form.js";
598
617
  export { sublistingCategoryFormSchema } from "./features/store-extensions/schemas/sublisting-category-form.js";
618
+ export { adCreativeFormSchema } from "./features/ads/schemas/creative-form.js";
599
619
  export { adminStoreUpdateSchema, announcementBarSchema, } from "./features/admin/schemas/admin-editor-forms.js";
600
620
  export { adminOrderUpdateSchema, employeeInviteSchema, hardBanReasonSchema, featureFlagsUpdateSchema, adminAdFormSchema, } from "./features/admin/schemas/admin-ops-forms.js";
601
621
  export { changeEmailSchema } from "./features/account/schemas/index.js";
@@ -634,6 +654,29 @@ export { REFUND_COPY } from "./_internal/shared/features/orders/refund-copy.js";
634
654
  // See the module docstring for why the exempt set is "seller or carrier fault"
635
655
  // rather than "serious reasons".
636
656
  export { RETURN_REASON, FINAL_SALE_EXEMPT_REASONS, RETURN_REASON_LABEL, RETURN_REASON_GROUP_LABEL, isFinalSaleExempt, isReturnReason, selectableReturnReasons, } from "./_internal/shared/features/orders/return-reasons.js";
657
+ // Dispute KINDS and their gates. Exported for the same reason the return
658
+ // reasons above are: the buyer's form renders the labels and needs to show the
659
+ // date a `not_reached` dispute becomes filable from, and
660
+ // `@mohasinac/appkit/_internal/*` is NOT a subpath export — `_internal` is
661
+ // reachable only through a barrel.
662
+ export { DISPUTE_KIND, DISPUTE_KIND_LABEL, DISPUTE_GATE, DISPUTE_TRANSIT_WINDOW_DAYS, DISPUTE_NOT_REACHED_GRACE_DAYS, isDisputeKind, checkDisputeGate, resolveDisputeEtd, disputeNotReachedFilableFrom, } from "./_internal/shared/features/orders/dispute-reasons.js";
663
+ /*
664
+ * The integration switches. Exported from the CLIENT entry because the admin
665
+ * integrations page is a "use client" surface — it renders each row's label and
666
+ * `offConsequence` and needs `readIntegrationStates` to show the current
667
+ * position.
668
+ *
669
+ * 🛑 The SAME module is re-exported from `server.ts`, deliberately, because the
670
+ * route guards resolve their answer through `readIntegrationStates` too. One
671
+ * expression, two entries — which is the point: a hand-written copy of "is this
672
+ * integration on" in a guard is how the page and the enforcement drift apart,
673
+ * and that had already happened once inside the module itself (the payments OR
674
+ * across both gateways).
675
+ *
676
+ * Safe in a client bundle: the file's only import is `import type`, so its
677
+ * runtime graph is empty and it cannot reach firebase-admin.
678
+ */
679
+ export { INTEGRATIONS, INTEGRATION_ORDER, readIntegrationStates, integrationPatch, allIntegrationsPatch, } from "./_internal/shared/features/admin/integrations.js";
637
680
  // Buyer-facing return/refund request form and the window it is gated on.
638
681
  // Exported from the CLIENT entry because the page that renders it is a
639
682
  // "use client" route — importing it from the main entry there would drag the
@@ -98,6 +98,10 @@ export declare const ADMIN_ENDPOINTS: {
98
98
  /** The action-index control plane (W7 / D7) — GET the whole index, PATCH one override. */
99
99
  readonly ACTION_INDEX: "/api/admin/action-index";
100
100
  readonly AD_BY_ID: (id: string) => string;
101
+ /** D56 — the self-serve creative moderation queue. */
102
+ readonly AD_BOOKINGS: "/api/admin/ads/bookings";
103
+ /** D56 — approve or reject one creative. A rejection REQUIRES a note. */
104
+ readonly AD_BOOKING_MODERATE: (id: string) => string;
101
105
  readonly PAYMENTS_SETTINGS: "/api/admin/payments/settings";
102
106
  readonly PRODUCTS: "/api/admin/products";
103
107
  readonly PRODUCT_BY_ID: (id: string) => string;
@@ -110,6 +114,7 @@ export declare const ADMIN_ENDPOINTS: {
110
114
  readonly ORDER_PAYMENT_VERIFY: (id: string) => string;
111
115
  readonly ORDER_PAYMENT_REUPLOAD: (id: string) => string;
112
116
  readonly ORDER_PAYMENT_REJECT_FRAUD: (id: string) => string;
117
+ readonly ORDER_BALANCE_REVIEW: (id: string) => string;
113
118
  readonly USERS: "/api/admin/users";
114
119
  readonly USERS_BULK: "/api/admin/users/bulk";
115
120
  readonly USER_BY_ID: (uid: string) => string;
@@ -150,6 +155,14 @@ export declare const ADMIN_ENDPOINTS: {
150
155
  readonly PAYOUTS_EXPORT: "/api/admin/payouts/export";
151
156
  readonly AUDIT_LOG: "/api/admin/audit-log";
152
157
  readonly AUDIT_LOG_BY_ID: (id: string) => string;
158
+ /**
159
+ * Phase 7 — the GSTR-1 DRAFT export. Takes `?from=&to=` as YYYY-MM-DD and
160
+ * returns a CSV.
161
+ *
162
+ * 🛑 "draft" is in the filename for a reason: nothing in this codebase talks
163
+ * to the GST portal, and the file is the input to a human filing.
164
+ */
165
+ readonly INVOICING_GSTR1: "/api/admin/invoicing/gstr1";
153
166
  readonly PAYMENT_CASES: "/api/admin/payment-cases";
154
167
  readonly PAYMENT_CASE_BY_ID: (id: string) => string;
155
168
  readonly PROTECTION_CLAIMS: "/api/admin/protection-claims";
@@ -272,6 +285,19 @@ export declare const CART_ENDPOINTS: {
272
285
  readonly SELECTION: "/api/cart/selection";
273
286
  /** Per-store paid add-on selections — the source of truth for what's charged. */
274
287
  readonly ADDONS: "/api/cart/addons";
288
+ /**
289
+ * Pay with points, on or off (D46/D47). A boolean and nothing else — the
290
+ * AMOUNT is derived server-side from the live balance and the 50% cap, which
291
+ * is why there is no `/api/cart/points/amount`.
292
+ */
293
+ readonly POINTS: "/api/cart/points";
294
+ /**
295
+ * The instalment plan — a TENURE and nothing else. It lives on the cart,
296
+ * not in a checkout body, because the online path needs the same answer in
297
+ * two requests (`/api/payment/create-order` captures, `/api/payment/verify`
298
+ * writes the order). Same reasoning as `POINTS` and `ADDONS` above.
299
+ */
300
+ readonly EMI: "/api/cart/emi";
275
301
  readonly COUPON: "/api/cart/coupon";
276
302
  /**
277
303
  * Add a buyer-assembled group selection as ONE line. Separate from `GET`'s
@@ -447,6 +473,7 @@ export declare const ORDER_ENDPOINTS: {
447
473
  readonly BY_ID: (id: string) => string;
448
474
  readonly TRACK: (trackingId: string) => string;
449
475
  readonly PAYMENT_PROOF: (id: string) => string;
476
+ readonly BALANCE_PROOF: (id: string) => string;
450
477
  readonly DISPUTE: (id: string) => string;
451
478
  };
452
479
  export declare const PREORDER_ENDPOINTS: {
@@ -488,6 +515,17 @@ export declare const SELLER_ENDPOINTS: {
488
515
  readonly PRODUCTS: "/api/store/products";
489
516
  readonly ORDERS: "/api/store/orders";
490
517
  readonly ORDERS_BY_ID: (orderId: string) => string;
518
+ /**
519
+ * Dispatch — BOTH branches of `shipOrderSchema`'s discriminated union.
520
+ *
521
+ * `method: "custom"` records a carrier the seller posted themselves;
522
+ * `method: "platform"` enqueues a booking through our own account. One
523
+ * route, because they are one decision — a second endpoint for the
524
+ * platform branch would be the same handler behind two ceilings, which is
525
+ * Root Cause #85.
526
+ */
527
+ readonly ORDER_SHIP: (orderId: string) => string;
528
+ readonly ORDER_OPEN_BALANCE: (orderId: string) => string;
491
529
  readonly AUCTIONS: "/api/store/products";
492
530
  readonly COUPONS: "/api/store/coupons";
493
531
  readonly COUPON_BY_ID: (id: string) => string;
@@ -681,6 +719,10 @@ export declare const API_ENDPOINTS: {
681
719
  /** The action-index control plane (W7 / D7) — GET the whole index, PATCH one override. */
682
720
  readonly ACTION_INDEX: "/api/admin/action-index";
683
721
  readonly AD_BY_ID: (id: string) => string;
722
+ /** D56 — the self-serve creative moderation queue. */
723
+ readonly AD_BOOKINGS: "/api/admin/ads/bookings";
724
+ /** D56 — approve or reject one creative. A rejection REQUIRES a note. */
725
+ readonly AD_BOOKING_MODERATE: (id: string) => string;
684
726
  readonly PAYMENTS_SETTINGS: "/api/admin/payments/settings";
685
727
  readonly PRODUCTS: "/api/admin/products";
686
728
  readonly PRODUCT_BY_ID: (id: string) => string;
@@ -693,6 +735,7 @@ export declare const API_ENDPOINTS: {
693
735
  readonly ORDER_PAYMENT_VERIFY: (id: string) => string;
694
736
  readonly ORDER_PAYMENT_REUPLOAD: (id: string) => string;
695
737
  readonly ORDER_PAYMENT_REJECT_FRAUD: (id: string) => string;
738
+ readonly ORDER_BALANCE_REVIEW: (id: string) => string;
696
739
  readonly USERS: "/api/admin/users";
697
740
  readonly USERS_BULK: "/api/admin/users/bulk";
698
741
  readonly USER_BY_ID: (uid: string) => string;
@@ -733,6 +776,14 @@ export declare const API_ENDPOINTS: {
733
776
  readonly PAYOUTS_EXPORT: "/api/admin/payouts/export";
734
777
  readonly AUDIT_LOG: "/api/admin/audit-log";
735
778
  readonly AUDIT_LOG_BY_ID: (id: string) => string;
779
+ /**
780
+ * Phase 7 — the GSTR-1 DRAFT export. Takes `?from=&to=` as YYYY-MM-DD and
781
+ * returns a CSV.
782
+ *
783
+ * 🛑 "draft" is in the filename for a reason: nothing in this codebase talks
784
+ * to the GST portal, and the file is the input to a human filing.
785
+ */
786
+ readonly INVOICING_GSTR1: "/api/admin/invoicing/gstr1";
736
787
  readonly PAYMENT_CASES: "/api/admin/payment-cases";
737
788
  readonly PAYMENT_CASE_BY_ID: (id: string) => string;
738
789
  readonly PROTECTION_CLAIMS: "/api/admin/protection-claims";
@@ -855,6 +906,19 @@ export declare const API_ENDPOINTS: {
855
906
  readonly SELECTION: "/api/cart/selection";
856
907
  /** Per-store paid add-on selections — the source of truth for what's charged. */
857
908
  readonly ADDONS: "/api/cart/addons";
909
+ /**
910
+ * Pay with points, on or off (D46/D47). A boolean and nothing else — the
911
+ * AMOUNT is derived server-side from the live balance and the 50% cap, which
912
+ * is why there is no `/api/cart/points/amount`.
913
+ */
914
+ readonly POINTS: "/api/cart/points";
915
+ /**
916
+ * The instalment plan — a TENURE and nothing else. It lives on the cart,
917
+ * not in a checkout body, because the online path needs the same answer in
918
+ * two requests (`/api/payment/create-order` captures, `/api/payment/verify`
919
+ * writes the order). Same reasoning as `POINTS` and `ADDONS` above.
920
+ */
921
+ readonly EMI: "/api/cart/emi";
858
922
  readonly COUPON: "/api/cart/coupon";
859
923
  /**
860
924
  * Add a buyer-assembled group selection as ONE line. Separate from `GET`'s
@@ -977,6 +1041,7 @@ export declare const API_ENDPOINTS: {
977
1041
  readonly BY_ID: (id: string) => string;
978
1042
  readonly TRACK: (trackingId: string) => string;
979
1043
  readonly PAYMENT_PROOF: (id: string) => string;
1044
+ readonly BALANCE_PROOF: (id: string) => string;
980
1045
  readonly DISPUTE: (id: string) => string;
981
1046
  };
982
1047
  readonly PREORDERS: {
@@ -1015,6 +1080,17 @@ export declare const API_ENDPOINTS: {
1015
1080
  readonly PRODUCTS: "/api/store/products";
1016
1081
  readonly ORDERS: "/api/store/orders";
1017
1082
  readonly ORDERS_BY_ID: (orderId: string) => string;
1083
+ /**
1084
+ * Dispatch — BOTH branches of `shipOrderSchema`'s discriminated union.
1085
+ *
1086
+ * `method: "custom"` records a carrier the seller posted themselves;
1087
+ * `method: "platform"` enqueues a booking through our own account. One
1088
+ * route, because they are one decision — a second endpoint for the
1089
+ * platform branch would be the same handler behind two ceilings, which is
1090
+ * Root Cause #85.
1091
+ */
1092
+ readonly ORDER_SHIP: (orderId: string) => string;
1093
+ readonly ORDER_OPEN_BALANCE: (orderId: string) => string;
1018
1094
  readonly AUCTIONS: "/api/store/products";
1019
1095
  readonly COUPONS: "/api/store/coupons";
1020
1096
  readonly COUPON_BY_ID: (id: string) => string;
@@ -1229,6 +1305,10 @@ export declare const API_ROUTES: {
1229
1305
  /** The action-index control plane (W7 / D7) — GET the whole index, PATCH one override. */
1230
1306
  readonly ACTION_INDEX: "/api/admin/action-index";
1231
1307
  readonly AD_BY_ID: (id: string) => string;
1308
+ /** D56 — the self-serve creative moderation queue. */
1309
+ readonly AD_BOOKINGS: "/api/admin/ads/bookings";
1310
+ /** D56 — approve or reject one creative. A rejection REQUIRES a note. */
1311
+ readonly AD_BOOKING_MODERATE: (id: string) => string;
1232
1312
  readonly PAYMENTS_SETTINGS: "/api/admin/payments/settings";
1233
1313
  readonly PRODUCTS: "/api/admin/products";
1234
1314
  readonly PRODUCT_BY_ID: (id: string) => string;
@@ -1241,6 +1321,7 @@ export declare const API_ROUTES: {
1241
1321
  readonly ORDER_PAYMENT_VERIFY: (id: string) => string;
1242
1322
  readonly ORDER_PAYMENT_REUPLOAD: (id: string) => string;
1243
1323
  readonly ORDER_PAYMENT_REJECT_FRAUD: (id: string) => string;
1324
+ readonly ORDER_BALANCE_REVIEW: (id: string) => string;
1244
1325
  readonly USERS: "/api/admin/users";
1245
1326
  readonly USERS_BULK: "/api/admin/users/bulk";
1246
1327
  readonly USER_BY_ID: (uid: string) => string;
@@ -1281,6 +1362,14 @@ export declare const API_ROUTES: {
1281
1362
  readonly PAYOUTS_EXPORT: "/api/admin/payouts/export";
1282
1363
  readonly AUDIT_LOG: "/api/admin/audit-log";
1283
1364
  readonly AUDIT_LOG_BY_ID: (id: string) => string;
1365
+ /**
1366
+ * Phase 7 — the GSTR-1 DRAFT export. Takes `?from=&to=` as YYYY-MM-DD and
1367
+ * returns a CSV.
1368
+ *
1369
+ * 🛑 "draft" is in the filename for a reason: nothing in this codebase talks
1370
+ * to the GST portal, and the file is the input to a human filing.
1371
+ */
1372
+ readonly INVOICING_GSTR1: "/api/admin/invoicing/gstr1";
1284
1373
  readonly PAYMENT_CASES: "/api/admin/payment-cases";
1285
1374
  readonly PAYMENT_CASE_BY_ID: (id: string) => string;
1286
1375
  readonly PROTECTION_CLAIMS: "/api/admin/protection-claims";
@@ -1403,6 +1492,19 @@ export declare const API_ROUTES: {
1403
1492
  readonly SELECTION: "/api/cart/selection";
1404
1493
  /** Per-store paid add-on selections — the source of truth for what's charged. */
1405
1494
  readonly ADDONS: "/api/cart/addons";
1495
+ /**
1496
+ * Pay with points, on or off (D46/D47). A boolean and nothing else — the
1497
+ * AMOUNT is derived server-side from the live balance and the 50% cap, which
1498
+ * is why there is no `/api/cart/points/amount`.
1499
+ */
1500
+ readonly POINTS: "/api/cart/points";
1501
+ /**
1502
+ * The instalment plan — a TENURE and nothing else. It lives on the cart,
1503
+ * not in a checkout body, because the online path needs the same answer in
1504
+ * two requests (`/api/payment/create-order` captures, `/api/payment/verify`
1505
+ * writes the order). Same reasoning as `POINTS` and `ADDONS` above.
1506
+ */
1507
+ readonly EMI: "/api/cart/emi";
1406
1508
  readonly COUPON: "/api/cart/coupon";
1407
1509
  /**
1408
1510
  * Add a buyer-assembled group selection as ONE line. Separate from `GET`'s
@@ -1525,6 +1627,7 @@ export declare const API_ROUTES: {
1525
1627
  readonly BY_ID: (id: string) => string;
1526
1628
  readonly TRACK: (trackingId: string) => string;
1527
1629
  readonly PAYMENT_PROOF: (id: string) => string;
1630
+ readonly BALANCE_PROOF: (id: string) => string;
1528
1631
  readonly DISPUTE: (id: string) => string;
1529
1632
  };
1530
1633
  readonly PREORDERS: {
@@ -1563,6 +1666,17 @@ export declare const API_ROUTES: {
1563
1666
  readonly PRODUCTS: "/api/store/products";
1564
1667
  readonly ORDERS: "/api/store/orders";
1565
1668
  readonly ORDERS_BY_ID: (orderId: string) => string;
1669
+ /**
1670
+ * Dispatch — BOTH branches of `shipOrderSchema`'s discriminated union.
1671
+ *
1672
+ * `method: "custom"` records a carrier the seller posted themselves;
1673
+ * `method: "platform"` enqueues a booking through our own account. One
1674
+ * route, because they are one decision — a second endpoint for the
1675
+ * platform branch would be the same handler behind two ceilings, which is
1676
+ * Root Cause #85.
1677
+ */
1678
+ readonly ORDER_SHIP: (orderId: string) => string;
1679
+ readonly ORDER_OPEN_BALANCE: (orderId: string) => string;
1566
1680
  readonly AUCTIONS: "/api/store/products";
1567
1681
  readonly COUPONS: "/api/store/coupons";
1568
1682
  readonly COUPON_BY_ID: (id: string) => string;