@mohasinac/appkit 4.59.0 β†’ 4.60.1

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 (532) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
  3. package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
  4. package/dist/_internal/server/features/brands/actions.js +78 -4
  5. package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
  6. package/dist/_internal/server/features/checkout/actions.js +668 -183
  7. package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
  8. package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
  9. package/dist/_internal/server/features/gateway-events/index.js +10 -0
  10. package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
  11. package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
  12. package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
  13. package/dist/_internal/server/features/gateway-events/redact.js +151 -0
  14. package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
  15. package/dist/_internal/server/features/grievance/actions.js +173 -0
  16. package/dist/_internal/server/features/grievance/index.d.ts +8 -0
  17. package/dist/_internal/server/features/grievance/index.js +8 -0
  18. package/dist/_internal/server/features/grouped/data.js +28 -3
  19. package/dist/_internal/server/features/lottery/actions.js +99 -4
  20. package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
  21. package/dist/_internal/server/features/order-completion/actions.js +336 -0
  22. package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
  23. package/dist/_internal/server/features/order-completion/index.js +7 -0
  24. package/dist/_internal/server/features/orders/actions.d.ts +13 -0
  25. package/dist/_internal/server/features/orders/actions.js +56 -2
  26. package/dist/_internal/server/features/orders/adapters.d.ts +20 -2
  27. package/dist/_internal/server/features/orders/adapters.js +44 -0
  28. package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
  29. package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
  30. package/dist/_internal/server/features/orders/index.d.ts +2 -1
  31. package/dist/_internal/server/features/orders/index.js +1 -1
  32. package/dist/_internal/server/features/orders/service.d.ts +60 -0
  33. package/dist/_internal/server/features/orders/service.js +74 -0
  34. package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
  35. package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
  36. package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
  37. package/dist/_internal/server/features/payment-cases/index.js +9 -0
  38. package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
  39. package/dist/_internal/server/features/payouts/actions.js +84 -10
  40. package/dist/_internal/server/features/points/adjust.d.ts +61 -0
  41. package/dist/_internal/server/features/points/adjust.js +121 -0
  42. package/dist/_internal/server/features/points/award.d.ts +65 -0
  43. package/dist/_internal/server/features/points/award.js +145 -0
  44. package/dist/_internal/server/features/price-index/market.d.ts +33 -0
  45. package/dist/_internal/server/features/price-index/market.js +54 -1
  46. package/dist/_internal/server/features/products/data.js +40 -22
  47. package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
  48. package/dist/_internal/server/features/protection-claims/actions.js +228 -0
  49. package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
  50. package/dist/_internal/server/features/protection-claims/index.js +8 -0
  51. package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
  52. package/dist/_internal/server/features/refunds/actions.js +259 -17
  53. package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
  54. package/dist/_internal/server/features/refunds/capacity.js +37 -0
  55. package/dist/_internal/server/features/reviews/actions.js +3 -2
  56. package/dist/_internal/server/features/search/index-build/sources.js +20 -1
  57. package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
  58. package/dist/_internal/server/features/shipping/reconcile.js +34 -3
  59. package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
  60. package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
  61. package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
  62. package/dist/_internal/server/features/stores/tabs.js +24 -4
  63. package/dist/_internal/server/functions/https.d.ts +31 -1
  64. package/dist/_internal/server/functions/https.js +52 -1
  65. package/dist/_internal/server/functions/scheduled.d.ts +72 -1
  66. package/dist/_internal/server/functions/scheduled.js +124 -1
  67. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
  68. package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
  69. package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
  70. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
  71. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
  72. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
  73. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  74. package/dist/_internal/server/jobs/core/index.js +2 -0
  75. package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
  76. package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
  77. package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
  78. package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
  79. package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
  80. package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
  81. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
  82. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
  83. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
  84. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
  85. package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
  86. package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
  87. package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
  88. package/dist/_internal/server/jobs/handlers/index.js +5 -0
  89. package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
  90. package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
  91. package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
  92. package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
  93. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
  94. package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
  95. package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
  96. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  97. package/dist/_internal/shared/actions/action-registry.js +71 -0
  98. package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
  99. package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
  100. package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
  101. package/dist/_internal/shared/checkout/lanes.js +46 -0
  102. package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
  103. package/dist/_internal/shared/checkout/order-math.js +251 -3
  104. package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
  105. package/dist/_internal/shared/checkout/refundable-base.js +122 -0
  106. package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
  107. package/dist/_internal/shared/features/auctions/config.js +30 -1
  108. package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
  109. package/dist/_internal/shared/features/brands/schema.js +18 -0
  110. package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
  111. package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
  112. package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
  113. package/dist/_internal/shared/features/print/label-profiles.js +350 -0
  114. package/dist/_internal/shared/features/products/to-product-item.js +33 -5
  115. package/dist/_internal/shared/fees/calculator.d.ts +31 -2
  116. package/dist/_internal/shared/fees/calculator.js +103 -5
  117. package/dist/_internal/shared/fees/india-states.d.ts +195 -0
  118. package/dist/_internal/shared/fees/india-states.js +190 -0
  119. package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
  120. package/dist/_internal/shared/fees/payout-hold.js +74 -0
  121. package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
  122. package/dist/_internal/shared/obligations/deadlines.js +155 -0
  123. package/dist/_internal/shared/shipping/quote.d.ts +96 -0
  124. package/dist/_internal/shared/shipping/quote.js +67 -0
  125. package/dist/_internal/shared/time/business-days.d.ts +91 -0
  126. package/dist/_internal/shared/time/business-days.js +185 -0
  127. package/dist/cli/index.js +0 -2
  128. package/dist/client.d.ts +10 -4
  129. package/dist/client.js +29 -3
  130. package/dist/configs/tailwind.d.ts +0 -12
  131. package/dist/configs/tailwind.js +28 -15
  132. package/dist/constants/api-endpoints.d.ts +51 -9
  133. package/dist/constants/api-endpoints.js +23 -7
  134. package/dist/constants/index.d.ts +1 -1
  135. package/dist/constants/index.js +1 -1
  136. package/dist/contracts/index.d.ts +1 -1
  137. package/dist/contracts/payment.d.ts +131 -0
  138. package/dist/features/about/components/AboutView.js +1 -1
  139. package/dist/features/about/components/DeveloperView.js +5 -2
  140. package/dist/features/about/components/FAQPageView.js +2 -1
  141. package/dist/features/about/components/FeesView.js +2 -1
  142. package/dist/features/about/components/HelpPageView.js +2 -1
  143. package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
  144. package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
  145. package/dist/features/about/components/HowEmiWorksView.js +2 -1
  146. package/dist/features/about/components/HowOffersWorkView.js +2 -1
  147. package/dist/features/about/components/HowOrdersWorkView.js +2 -1
  148. package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
  149. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
  150. package/dist/features/about/components/HowReviewsWorkView.js +2 -1
  151. package/dist/features/about/components/PolicyPageView.js +2 -1
  152. package/dist/features/about/components/ProseHero.d.ts +73 -0
  153. package/dist/features/about/components/ProseHero.js +18 -0
  154. package/dist/features/about/components/SecurityPrivacyView.js +2 -1
  155. package/dist/features/about/components/ShippingPolicyView.js +2 -1
  156. package/dist/features/about/components/TrackOrderView.js +2 -1
  157. package/dist/features/about/components/UnauthorizedView.js +1 -1
  158. package/dist/features/about/index.d.ts +2 -0
  159. package/dist/features/about/index.js +5 -0
  160. package/dist/features/account/actions/address-actions.d.ts +26 -2
  161. package/dist/features/account/actions/address-actions.js +25 -1
  162. package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
  163. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  164. package/dist/features/account/components/UserOrdersView.js +17 -0
  165. package/dist/features/account/components/UserSidebar.js +1 -1
  166. package/dist/features/account/hooks/useNotifications.js +29 -0
  167. package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
  168. package/dist/features/admin/components/AdminBeysView.js +2 -2
  169. package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
  170. package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
  171. package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
  172. package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
  173. package/dist/features/admin/components/AdminCategoriesView.js +1 -1
  174. package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
  175. package/dist/features/admin/components/AdminContactEditorView.js +1 -1
  176. package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
  177. package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
  178. package/dist/features/admin/components/AdminFaqsView.js +2 -2
  179. package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
  180. package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
  181. package/dist/features/admin/components/AdminGuideHubView.js +1 -1
  182. package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
  183. package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
  184. package/dist/features/admin/components/AdminPartsView.js +2 -2
  185. package/dist/features/admin/components/AdminProductsView.js +75 -4
  186. package/dist/features/admin/components/AdminSidebar.js +2 -2
  187. package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
  188. package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
  189. package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
  190. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  191. package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
  192. package/dist/features/admin/components/AdminUsersView.js +72 -1
  193. package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
  194. package/dist/features/admin/components/AdminViewCards.js +4 -4
  195. package/dist/features/admin/components/DataListingView.d.ts +28 -0
  196. package/dist/features/admin/components/DataListingView.js +175 -14
  197. package/dist/features/admin/components/DataTable.d.ts +12 -1
  198. package/dist/features/admin/components/DataTable.js +3 -3
  199. package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
  200. package/dist/features/admin/components/OwnerQuickActions.js +60 -2
  201. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
  202. package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
  203. package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
  204. package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
  205. package/dist/features/admin/components/index.d.ts +4 -0
  206. package/dist/features/admin/components/index.js +6 -0
  207. package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
  208. package/dist/features/admin/constants/filter-tabs.js +106 -0
  209. package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
  210. package/dist/features/admin/repository/site-settings.repository.js +82 -1
  211. package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
  212. package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
  213. package/dist/features/admin/schemas/firestore.js +5 -1
  214. package/dist/features/admin/schemas/site-settings-form.js +30 -1
  215. package/dist/features/auctions/actions/bid-actions.js +13 -1
  216. package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
  217. package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
  218. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
  219. package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
  220. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
  221. package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
  222. package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
  223. package/dist/features/audit-log/schemas/firestore.js +14 -0
  224. package/dist/features/auth/permissions/constants.d.ts +17 -1
  225. package/dist/features/auth/permissions/constants.js +18 -0
  226. package/dist/features/blog/components/BlogPostView.js +1 -1
  227. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
  228. package/dist/features/categories/api/[id]/description-template/route.js +107 -1
  229. package/dist/features/categories/components/BrandDetailPageView.js +2 -2
  230. package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
  231. package/dist/features/categories/components/BundleDetailView.js +1 -1
  232. package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
  233. package/dist/features/categories/components/CategoryForm.js +12 -1
  234. package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
  235. package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
  236. package/dist/features/categories/repository/market-price-index.repository.js +105 -0
  237. package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
  238. package/dist/features/categories/repository/price-observation.repository.js +132 -0
  239. package/dist/features/events/components/EventSaleBanner.js +1 -1
  240. package/dist/features/events/components/EventStatusBadge.js +1 -1
  241. package/dist/features/faq/components/FAQAccordion.js +2 -1
  242. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  243. package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
  244. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  245. package/dist/features/filters/FilterFacetSection.js +1 -1
  246. package/dist/features/filters/SwitchFilter.js +1 -1
  247. package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
  248. package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
  249. package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
  250. package/dist/features/gateway-events/schemas/firestore.js +125 -0
  251. package/dist/features/gateway-events/schemas/index.d.ts +81 -0
  252. package/dist/features/gateway-events/schemas/index.js +79 -0
  253. package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
  254. package/dist/features/homepage/components/AnnouncementBar.js +37 -1
  255. package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
  256. package/dist/features/homepage/components/BrandsSection.js +1 -1
  257. package/dist/features/homepage/components/CTABannerSection.js +1 -1
  258. package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
  259. package/dist/features/homepage/components/HeroCarousel.js +2 -2
  260. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  261. package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
  262. package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
  263. package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
  264. package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
  265. package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
  266. package/dist/features/inventory/components/ReceiveStationView.js +413 -0
  267. package/dist/features/inventory/components/operator-message.d.ts +29 -0
  268. package/dist/features/inventory/components/operator-message.js +41 -0
  269. package/dist/features/inventory/index.d.ts +13 -0
  270. package/dist/features/inventory/index.js +28 -0
  271. package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
  272. package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
  273. package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
  274. package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
  275. package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
  276. package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
  277. package/dist/features/inventory/schemas/firestore.d.ts +197 -0
  278. package/dist/features/inventory/schemas/firestore.js +159 -0
  279. package/dist/features/layout/AppLayoutShell.d.ts +12 -1
  280. package/dist/features/layout/AppLayoutShell.js +25 -12
  281. package/dist/features/layout/AutoBreadcrumbs.js +162 -3
  282. package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
  283. package/dist/features/layout/BottomNavbar.d.ts +1 -1
  284. package/dist/features/layout/BottomNavbar.js +2 -2
  285. package/dist/features/media/MediaAvatar.js +1 -1
  286. package/dist/features/media/MediaImage.d.ts +24 -4
  287. package/dist/features/media/MediaImage.js +44 -4
  288. package/dist/features/media/MediaLightbox.js +1 -1
  289. package/dist/features/media/modals/ImageCropModal.js +1 -1
  290. package/dist/features/media/modals/ImageEditor.js +1 -1
  291. package/dist/features/media/upload/MediaUploadField.js +91 -3
  292. package/dist/features/obligations/constants/policies.d.ts +92 -0
  293. package/dist/features/obligations/constants/policies.js +378 -0
  294. package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
  295. package/dist/features/obligations/repository/obligations.repository.js +158 -0
  296. package/dist/features/obligations/schemas/firestore.d.ts +160 -0
  297. package/dist/features/obligations/schemas/firestore.js +87 -0
  298. package/dist/features/orders/actions/order-actions.d.ts +43 -4
  299. package/dist/features/orders/actions/order-actions.js +60 -3
  300. package/dist/features/orders/actions/refund-actions.js +70 -10
  301. package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
  302. package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
  303. package/dist/features/orders/components/OrdersList.js +2 -2
  304. package/dist/features/orders/components/RefundHistoryTable.js +3 -1
  305. package/dist/features/orders/components/index.d.ts +2 -0
  306. package/dist/features/orders/components/index.js +6 -0
  307. package/dist/features/orders/constants/transitions.d.ts +59 -0
  308. package/dist/features/orders/constants/transitions.js +104 -0
  309. package/dist/features/orders/repository/orders.repository.d.ts +109 -6
  310. package/dist/features/orders/repository/orders.repository.js +464 -21
  311. package/dist/features/orders/schemas/firestore.d.ts +270 -0
  312. package/dist/features/orders/schemas/firestore.js +24 -0
  313. package/dist/features/orders/schemas/index.d.ts +61 -0
  314. package/dist/features/orders/schemas/index.js +22 -0
  315. package/dist/features/orders/types/index.d.ts +79 -0
  316. package/dist/features/parts/components/PartsIndexPageView.js +8 -1
  317. package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
  318. package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
  319. package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
  320. package/dist/features/payment-cases/schemas/firestore.js +105 -0
  321. package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
  322. package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
  323. package/dist/features/payments/repository/payout.repository.d.ts +0 -1
  324. package/dist/features/payments/repository/payout.repository.js +0 -1
  325. package/dist/features/points/repository/points.repository.d.ts +122 -0
  326. package/dist/features/points/repository/points.repository.js +304 -1
  327. package/dist/features/points/schemas/adjust-form.d.ts +58 -0
  328. package/dist/features/points/schemas/adjust-form.js +63 -0
  329. package/dist/features/points/schemas/firestore.d.ts +108 -1
  330. package/dist/features/points/schemas/firestore.js +84 -0
  331. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
  332. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  333. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
  334. package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
  335. package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
  336. package/dist/features/price-index/market-stats.d.ts +82 -0
  337. package/dist/features/price-index/market-stats.js +230 -0
  338. package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
  339. package/dist/features/print/components/BoxLabelPrintView.js +66 -0
  340. package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
  341. package/dist/features/print/components/LabelProfilePicker.js +38 -0
  342. package/dist/features/print/components/labels.d.ts +117 -0
  343. package/dist/features/print/components/labels.js +258 -0
  344. package/dist/features/print/components/labels.style.css +46 -0
  345. package/dist/features/print/index.d.ts +6 -0
  346. package/dist/features/print/index.js +16 -0
  347. package/dist/features/products/columns/productTableColumns.js +5 -4
  348. package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
  349. package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
  350. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  351. package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
  352. package/dist/features/products/components/PrizeRevealModal.js +2 -2
  353. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  354. package/dist/features/products/components/ProductForm.js +34 -23
  355. package/dist/features/products/components/ProductGrid.js +86 -62
  356. package/dist/features/products/constants/card-badges.d.ts +97 -0
  357. package/dist/features/products/constants/card-badges.js +100 -0
  358. package/dist/features/products/repository/products.repository.js +34 -1
  359. package/dist/features/products/schemas/firestore.d.ts +46 -3
  360. package/dist/features/products/schemas/firestore.js +21 -0
  361. package/dist/features/promotions/components/PromotionsView.js +1 -1
  362. package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
  363. package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
  364. package/dist/features/promotions/schemas/firestore.js +30 -3
  365. package/dist/features/promotions/schemas/index.d.ts +6 -6
  366. package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
  367. package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
  368. package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
  369. package/dist/features/protection-claims/schemas/firestore.js +130 -0
  370. package/dist/features/reviews/actions/review-actions.js +3 -2
  371. package/dist/features/reviews/components/ReviewModal.js +1 -1
  372. package/dist/features/reviews/components/ReviewsList.js +1 -1
  373. package/dist/features/reviews/schemas/firestore.d.ts +20 -1
  374. package/dist/features/scams/constants/scam-types.d.ts +2 -0
  375. package/dist/features/scams/constants/scam-types.js +18 -0
  376. package/dist/features/scams/schemas/report-form.d.ts +3 -3
  377. package/dist/features/scams/schemas/report-form.js +26 -1
  378. package/dist/features/search/components/Search.js +9 -9
  379. package/dist/features/search/components/SearchResultsClient.js +18 -3
  380. package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
  381. package/dist/features/search/components/SearchResultsPageView.js +2 -2
  382. package/dist/features/seller/actions/offer-actions.js +16 -1
  383. package/dist/features/seller/actions/seller-actions.js +14 -3
  384. package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
  385. package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
  386. package/dist/features/seller/components/PrintCenterView.js +41 -30
  387. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  388. package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
  389. package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
  390. package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
  391. package/dist/features/seller/components/SellerProductShell.js +123 -13
  392. package/dist/features/seller/components/SellerReviewsView.js +4 -2
  393. package/dist/features/seller/components/SellerSidebar.js +1 -1
  394. package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
  395. package/dist/features/seller/schemas/coupon-form.js +27 -0
  396. package/dist/features/seller/schemas/product-form.d.ts +3 -0
  397. package/dist/features/seller/schemas/product-form.js +5 -0
  398. package/dist/features/shell/FormShell.js +2 -2
  399. package/dist/features/shell/QuickFormDrawer.js +14 -0
  400. package/dist/features/shell/SectionForm.d.ts +19 -0
  401. package/dist/features/shell/SectionForm.js +133 -9
  402. package/dist/features/shell/SectionForm.style.css +54 -0
  403. package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
  404. package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
  405. package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
  406. package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
  407. package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
  408. package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
  409. package/dist/features/stores/components/StoreGuideHubView.js +1 -1
  410. package/dist/features/stores/components/StoreHeader.js +1 -1
  411. package/dist/features/support/schemas/firestore.d.ts +73 -2
  412. package/dist/features/support/schemas/firestore.js +59 -0
  413. package/dist/index.d.ts +16 -24
  414. package/dist/index.js +38 -47
  415. package/dist/next/ErrorBoundary.js +1 -1
  416. package/dist/next/routing/route-map.d.ts +24 -0
  417. package/dist/next/routing/route-map.js +40 -0
  418. package/dist/providers/payment-manual/index.d.ts +15 -1
  419. package/dist/providers/payment-manual/index.js +37 -0
  420. package/dist/providers/payment-phonepe/index.d.ts +14 -1
  421. package/dist/providers/payment-phonepe/index.js +36 -0
  422. package/dist/providers/payment-razorpay/index.d.ts +44 -1
  423. package/dist/providers/payment-razorpay/index.js +99 -0
  424. package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
  425. package/dist/providers/shipping-shiprocket/index.js +18 -0
  426. package/dist/schemas/registry.d.ts +44 -11
  427. package/dist/server-entry.d.ts +2 -0
  428. package/dist/server-entry.js +27 -0
  429. package/dist/server.d.ts +43 -0
  430. package/dist/server.js +98 -0
  431. package/dist/styles.css +418 -149
  432. package/dist/tailwind-utilities.css +1 -1
  433. package/dist/tokens/themes/default-dark.js +15 -12
  434. package/dist/tokens/themes/default-light.js +14 -11
  435. package/dist/tokens/tokens.css +106 -23
  436. package/dist/ui/DataTable.style.css +4 -4
  437. package/dist/ui/columns/cell-renderers.d.ts +20 -0
  438. package/dist/ui/columns/cell-renderers.js +26 -1
  439. package/dist/ui/columns/index.d.ts +1 -1
  440. package/dist/ui/columns/index.js +4 -1
  441. package/dist/ui/components/Badge.style.css +1 -1
  442. package/dist/ui/components/Breadcrumb.js +19 -1
  443. package/dist/ui/components/BulkActionBar.style.css +4 -4
  444. package/dist/ui/components/Button.style.css +1 -1
  445. package/dist/ui/components/Checkbox.style.css +1 -1
  446. package/dist/ui/components/FallbackShell.js +1 -1
  447. package/dist/ui/components/Form.d.ts +14 -1
  448. package/dist/ui/components/Form.js +2 -2
  449. package/dist/ui/components/FormField.js +18 -4
  450. package/dist/ui/components/FormField.style.css +43 -3
  451. package/dist/ui/components/GatedPrice.style.css +1 -1
  452. package/dist/ui/components/IconButton.style.css +1 -1
  453. package/dist/ui/components/Input.js +22 -1
  454. package/dist/ui/components/Input.style.css +38 -22
  455. package/dist/ui/components/ListingFilterDrawer.js +1 -1
  456. package/dist/ui/components/ListingToolbar.js +1 -1
  457. package/dist/ui/components/PaginatedSelect.js +0 -0
  458. package/dist/ui/components/Radio.style.css +1 -1
  459. package/dist/ui/components/Repeater.d.ts +53 -0
  460. package/dist/ui/components/Repeater.js +7 -0
  461. package/dist/ui/components/RichTextEditor.d.ts +20 -1
  462. package/dist/ui/components/RichTextEditor.js +23 -2
  463. package/dist/ui/components/Select.style.css +7 -21
  464. package/dist/ui/components/Semantic.js +27 -3
  465. package/dist/ui/components/TagInput.style.css +4 -9
  466. package/dist/ui/components/Textarea.style.css +4 -18
  467. package/dist/ui/components/Toggle.style.css +1 -1
  468. package/dist/ui/components/Typography.d.ts +3 -3
  469. package/dist/ui/components/Typography.js +15 -15
  470. package/dist/ui/components/ViewToggle.style.css +4 -4
  471. package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
  472. package/dist/ui/forms/AddAnotherToggle.js +56 -0
  473. package/dist/ui/forms/ColorPickerField.js +15 -2
  474. package/dist/ui/forms/FieldCheckbox.js +15 -2
  475. package/dist/ui/forms/FieldInput.d.ts +22 -1
  476. package/dist/ui/forms/FieldInput.js +19 -5
  477. package/dist/ui/forms/FieldLabel.d.ts +35 -0
  478. package/dist/ui/forms/FieldLabel.js +70 -0
  479. package/dist/ui/forms/FieldSelect.d.ts +4 -1
  480. package/dist/ui/forms/FieldSelect.js +27 -5
  481. package/dist/ui/forms/FieldTextarea.d.ts +4 -1
  482. package/dist/ui/forms/FieldTextarea.js +22 -5
  483. package/dist/ui/forms/FormShell.d.ts +17 -1
  484. package/dist/ui/forms/FormShell.js +36 -2
  485. package/dist/ui/forms/FormShell.style.css +41 -33
  486. package/dist/ui/forms/index.d.ts +5 -1
  487. package/dist/ui/forms/index.js +2 -0
  488. package/dist/ui/icons/icon-registry.d.ts +1 -0
  489. package/dist/ui/icons/icon-registry.js +17 -1
  490. package/dist/utils/id-generators.d.ts +80 -0
  491. package/dist/utils/id-generators.js +93 -0
  492. package/dist/utils/search-txt-builders.d.ts +12 -0
  493. package/dist/utils/search-txt-builders.js +17 -0
  494. package/package.json +1 -1
  495. package/scripts/seed-cli.mjs +106 -5
  496. package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
  497. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
  498. package/dist/features/loyalty/api/balance/route.d.ts +0 -12
  499. package/dist/features/loyalty/api/balance/route.js +0 -41
  500. package/dist/features/loyalty/api/earn/route.d.ts +0 -12
  501. package/dist/features/loyalty/api/earn/route.js +0 -38
  502. package/dist/features/loyalty/api/history/route.d.ts +0 -12
  503. package/dist/features/loyalty/api/history/route.js +0 -58
  504. package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
  505. package/dist/features/loyalty/api/redeem/route.js +0 -38
  506. package/dist/features/loyalty/columns/index.d.ts +0 -17
  507. package/dist/features/loyalty/columns/index.js +0 -40
  508. package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
  509. package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
  510. package/dist/features/loyalty/components/index.d.ts +0 -1
  511. package/dist/features/loyalty/components/index.js +0 -1
  512. package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
  513. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
  514. package/dist/features/loyalty/index.d.ts +0 -6
  515. package/dist/features/loyalty/index.js +0 -6
  516. package/dist/features/loyalty/manifest.d.ts +0 -2
  517. package/dist/features/loyalty/manifest.js +0 -16
  518. package/dist/features/loyalty/messages/en.json +0 -19
  519. package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
  520. package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
  521. package/dist/features/loyalty/schemas/index.d.ts +0 -85
  522. package/dist/features/loyalty/schemas/index.js +0 -40
  523. package/dist/features/loyalty/server.d.ts +0 -6
  524. package/dist/features/loyalty/server.js +0 -6
  525. package/dist/features/loyalty/types/index.d.ts +0 -31
  526. package/dist/features/loyalty/types/index.js +0 -1
  527. package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
  528. package/dist/features/loyalty/types/loyalty-config.js +0 -1
  529. package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
  530. package/dist/features/loyalty/types/loyalty-math.js +0 -27
  531. package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
  532. package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Indian states and union territories, resolved to ONE canonical key from any
3
+ * of the three spellings that actually occur in our data.
4
+ *
5
+ * WHY (G2): place of supply was compared by normalised STRING EQUALITY β€”
6
+ * lowercase, strip punctuation, collapse whitespace, then `a === b`. That is
7
+ * correct only when both sides happen to be written the same way, and they are
8
+ * not:
9
+ *
10
+ * Β· `StoreDocument`'s pickup address state is typed by a seller ("Karnataka",
11
+ * "karnataka", "KA", "Karnatak")
12
+ * Β· a buyer's delivery address is typed by the buyer
13
+ * Β· a GSTIN carries the state as a two-digit CODE in its first two
14
+ * characters ("29" = Karnataka) β€” and the old normaliser's
15
+ * `.replace(/[^a-z\s]/g, " ")` stripped digits entirely, so a numeric
16
+ * state resolved to `null`
17
+ *
18
+ * So `"KA"` vs `"Karnataka"` compared unequal, the supply read as INTER-state,
19
+ * and the order recorded **IGST where CGST+SGST was due**. Silently: there is
20
+ * no error, and the TOTAL is identical either way (IGST total == CGST+SGST
21
+ * total), so nothing downstream disagreed. Only the invoice's tax split was
22
+ * wrong, which is exactly the part a GST return is built from.
23
+ *
24
+ * πŸ›‘ The total being unaffected is why this is a COMPLIANCE defect rather than
25
+ * a money defect, and why it could live indefinitely. Do not downgrade it on
26
+ * that basis: the split is what gets filed.
27
+ */
28
+ /**
29
+ * Canonical key β†’ the GST state code and the display name.
30
+ *
31
+ * Codes are the official GST state codes (the first two digits of a GSTIN).
32
+ * πŸ›‘ They are LITERAL and ordered by code, so the table can be read against
33
+ * the published list rather than trusted.
34
+ */
35
+ export declare const INDIA_STATES: {
36
+ readonly "jammu-kashmir": {
37
+ readonly code: "01";
38
+ readonly name: "Jammu and Kashmir";
39
+ };
40
+ readonly "himachal-pradesh": {
41
+ readonly code: "02";
42
+ readonly name: "Himachal Pradesh";
43
+ };
44
+ readonly punjab: {
45
+ readonly code: "03";
46
+ readonly name: "Punjab";
47
+ };
48
+ readonly chandigarh: {
49
+ readonly code: "04";
50
+ readonly name: "Chandigarh";
51
+ };
52
+ readonly uttarakhand: {
53
+ readonly code: "05";
54
+ readonly name: "Uttarakhand";
55
+ };
56
+ readonly haryana: {
57
+ readonly code: "06";
58
+ readonly name: "Haryana";
59
+ };
60
+ readonly delhi: {
61
+ readonly code: "07";
62
+ readonly name: "Delhi";
63
+ };
64
+ readonly rajasthan: {
65
+ readonly code: "08";
66
+ readonly name: "Rajasthan";
67
+ };
68
+ readonly "uttar-pradesh": {
69
+ readonly code: "09";
70
+ readonly name: "Uttar Pradesh";
71
+ };
72
+ readonly bihar: {
73
+ readonly code: "10";
74
+ readonly name: "Bihar";
75
+ };
76
+ readonly sikkim: {
77
+ readonly code: "11";
78
+ readonly name: "Sikkim";
79
+ };
80
+ readonly "arunachal-pradesh": {
81
+ readonly code: "12";
82
+ readonly name: "Arunachal Pradesh";
83
+ };
84
+ readonly nagaland: {
85
+ readonly code: "13";
86
+ readonly name: "Nagaland";
87
+ };
88
+ readonly manipur: {
89
+ readonly code: "14";
90
+ readonly name: "Manipur";
91
+ };
92
+ readonly mizoram: {
93
+ readonly code: "15";
94
+ readonly name: "Mizoram";
95
+ };
96
+ readonly tripura: {
97
+ readonly code: "16";
98
+ readonly name: "Tripura";
99
+ };
100
+ readonly meghalaya: {
101
+ readonly code: "17";
102
+ readonly name: "Meghalaya";
103
+ };
104
+ readonly assam: {
105
+ readonly code: "18";
106
+ readonly name: "Assam";
107
+ };
108
+ readonly "west-bengal": {
109
+ readonly code: "19";
110
+ readonly name: "West Bengal";
111
+ };
112
+ readonly jharkhand: {
113
+ readonly code: "20";
114
+ readonly name: "Jharkhand";
115
+ };
116
+ readonly odisha: {
117
+ readonly code: "21";
118
+ readonly name: "Odisha";
119
+ };
120
+ readonly chhattisgarh: {
121
+ readonly code: "22";
122
+ readonly name: "Chhattisgarh";
123
+ };
124
+ readonly "madhya-pradesh": {
125
+ readonly code: "23";
126
+ readonly name: "Madhya Pradesh";
127
+ };
128
+ readonly gujarat: {
129
+ readonly code: "24";
130
+ readonly name: "Gujarat";
131
+ };
132
+ readonly "dadra-nagar-haveli-daman-diu": {
133
+ readonly code: "26";
134
+ readonly name: "Dadra and Nagar Haveli and Daman and Diu";
135
+ };
136
+ readonly maharashtra: {
137
+ readonly code: "27";
138
+ readonly name: "Maharashtra";
139
+ };
140
+ readonly karnataka: {
141
+ readonly code: "29";
142
+ readonly name: "Karnataka";
143
+ };
144
+ readonly goa: {
145
+ readonly code: "30";
146
+ readonly name: "Goa";
147
+ };
148
+ readonly lakshadweep: {
149
+ readonly code: "31";
150
+ readonly name: "Lakshadweep";
151
+ };
152
+ readonly kerala: {
153
+ readonly code: "32";
154
+ readonly name: "Kerala";
155
+ };
156
+ readonly "tamil-nadu": {
157
+ readonly code: "33";
158
+ readonly name: "Tamil Nadu";
159
+ };
160
+ readonly puducherry: {
161
+ readonly code: "34";
162
+ readonly name: "Puducherry";
163
+ };
164
+ readonly "andaman-nicobar": {
165
+ readonly code: "35";
166
+ readonly name: "Andaman and Nicobar Islands";
167
+ };
168
+ readonly telangana: {
169
+ readonly code: "36";
170
+ readonly name: "Telangana";
171
+ };
172
+ readonly "andhra-pradesh": {
173
+ readonly code: "37";
174
+ readonly name: "Andhra Pradesh";
175
+ };
176
+ readonly ladakh: {
177
+ readonly code: "38";
178
+ readonly name: "Ladakh";
179
+ };
180
+ };
181
+ export type IndiaStateKey = keyof typeof INDIA_STATES;
182
+ /**
183
+ * Resolve any spelling β€” canonical key, full name, abbreviation, former name,
184
+ * or a two-digit GST state code β€” to one canonical key, or `null`.
185
+ *
186
+ * πŸ›‘ The numeric branch runs FIRST and before any letter-stripping, because
187
+ * the old normaliser destroyed digits. A state held as `"29"` or as a full
188
+ * GSTIN (`"29ABCDE1234F1Z5"`) is a real shape in this data: `resolveSupplierIdentity`
189
+ * reads a store's GSTIN, and its first two characters are the authoritative
190
+ * place of supply for the seller β€” more reliable than their typed pickup
191
+ * address, which is what G3 is about.
192
+ */
193
+ export declare function resolveStateKey(raw: string | undefined | null): IndiaStateKey | null;
194
+ /** The GST state code for any spelling, or `null`. */
195
+ export declare function resolveStateCode(raw: string | undefined | null): string | null;
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Indian states and union territories, resolved to ONE canonical key from any
3
+ * of the three spellings that actually occur in our data.
4
+ *
5
+ * WHY (G2): place of supply was compared by normalised STRING EQUALITY β€”
6
+ * lowercase, strip punctuation, collapse whitespace, then `a === b`. That is
7
+ * correct only when both sides happen to be written the same way, and they are
8
+ * not:
9
+ *
10
+ * Β· `StoreDocument`'s pickup address state is typed by a seller ("Karnataka",
11
+ * "karnataka", "KA", "Karnatak")
12
+ * Β· a buyer's delivery address is typed by the buyer
13
+ * Β· a GSTIN carries the state as a two-digit CODE in its first two
14
+ * characters ("29" = Karnataka) β€” and the old normaliser's
15
+ * `.replace(/[^a-z\s]/g, " ")` stripped digits entirely, so a numeric
16
+ * state resolved to `null`
17
+ *
18
+ * So `"KA"` vs `"Karnataka"` compared unequal, the supply read as INTER-state,
19
+ * and the order recorded **IGST where CGST+SGST was due**. Silently: there is
20
+ * no error, and the TOTAL is identical either way (IGST total == CGST+SGST
21
+ * total), so nothing downstream disagreed. Only the invoice's tax split was
22
+ * wrong, which is exactly the part a GST return is built from.
23
+ *
24
+ * πŸ›‘ The total being unaffected is why this is a COMPLIANCE defect rather than
25
+ * a money defect, and why it could live indefinitely. Do not downgrade it on
26
+ * that basis: the split is what gets filed.
27
+ */
28
+ /**
29
+ * Canonical key β†’ the GST state code and the display name.
30
+ *
31
+ * Codes are the official GST state codes (the first two digits of a GSTIN).
32
+ * πŸ›‘ They are LITERAL and ordered by code, so the table can be read against
33
+ * the published list rather than trusted.
34
+ */
35
+ export const INDIA_STATES = {
36
+ "jammu-kashmir": { code: "01", name: "Jammu and Kashmir" },
37
+ "himachal-pradesh": { code: "02", name: "Himachal Pradesh" },
38
+ punjab: { code: "03", name: "Punjab" },
39
+ chandigarh: { code: "04", name: "Chandigarh" },
40
+ uttarakhand: { code: "05", name: "Uttarakhand" },
41
+ haryana: { code: "06", name: "Haryana" },
42
+ delhi: { code: "07", name: "Delhi" },
43
+ rajasthan: { code: "08", name: "Rajasthan" },
44
+ "uttar-pradesh": { code: "09", name: "Uttar Pradesh" },
45
+ bihar: { code: "10", name: "Bihar" },
46
+ sikkim: { code: "11", name: "Sikkim" },
47
+ "arunachal-pradesh": { code: "12", name: "Arunachal Pradesh" },
48
+ nagaland: { code: "13", name: "Nagaland" },
49
+ manipur: { code: "14", name: "Manipur" },
50
+ mizoram: { code: "15", name: "Mizoram" },
51
+ tripura: { code: "16", name: "Tripura" },
52
+ meghalaya: { code: "17", name: "Meghalaya" },
53
+ assam: { code: "18", name: "Assam" },
54
+ "west-bengal": { code: "19", name: "West Bengal" },
55
+ jharkhand: { code: "20", name: "Jharkhand" },
56
+ odisha: { code: "21", name: "Odisha" },
57
+ chhattisgarh: { code: "22", name: "Chhattisgarh" },
58
+ "madhya-pradesh": { code: "23", name: "Madhya Pradesh" },
59
+ gujarat: { code: "24", name: "Gujarat" },
60
+ "dadra-nagar-haveli-daman-diu": {
61
+ code: "26",
62
+ name: "Dadra and Nagar Haveli and Daman and Diu",
63
+ },
64
+ maharashtra: { code: "27", name: "Maharashtra" },
65
+ karnataka: { code: "29", name: "Karnataka" },
66
+ goa: { code: "30", name: "Goa" },
67
+ lakshadweep: { code: "31", name: "Lakshadweep" },
68
+ kerala: { code: "32", name: "Kerala" },
69
+ "tamil-nadu": { code: "33", name: "Tamil Nadu" },
70
+ puducherry: { code: "34", name: "Puducherry" },
71
+ "andaman-nicobar": { code: "35", name: "Andaman and Nicobar Islands" },
72
+ telangana: { code: "36", name: "Telangana" },
73
+ "andhra-pradesh": { code: "37", name: "Andhra Pradesh" },
74
+ ladakh: { code: "38", name: "Ladakh" },
75
+ };
76
+ /**
77
+ * Every alternative spelling we accept, mapped to the canonical key.
78
+ *
79
+ * Deliberately NOT exhaustive-by-guessing: each entry is a form that plausibly
80
+ * appears in an address field or a dropdown β€” the two-letter postal
81
+ * abbreviation, the pre-2019 names (`orissa`, `pondicherry`), and the common
82
+ * run-together spellings. A form that is not here resolves to `null`, which is
83
+ * honest; a wrong guess resolves to the WRONG STATE, which is worse than
84
+ * unknown. See `resolveStateKey`'s undetermined handling.
85
+ */
86
+ const ALIASES = {
87
+ // two-letter abbreviations
88
+ jk: "jammu-kashmir", hp: "himachal-pradesh", pb: "punjab", ch: "chandigarh",
89
+ uk: "uttarakhand", ua: "uttarakhand", hr: "haryana", dl: "delhi",
90
+ rj: "rajasthan", up: "uttar-pradesh", br: "bihar", sk: "sikkim",
91
+ ar: "arunachal-pradesh", nl: "nagaland", mn: "manipur", mz: "mizoram",
92
+ tr: "tripura", ml: "meghalaya", as: "assam", wb: "west-bengal",
93
+ jh: "jharkhand", or: "odisha", od: "odisha", cg: "chhattisgarh",
94
+ ct: "chhattisgarh", mp: "madhya-pradesh", gj: "gujarat", mh: "maharashtra",
95
+ ka: "karnataka", ga: "goa", ld: "lakshadweep", kl: "kerala",
96
+ tn: "tamil-nadu", py: "puducherry", pondy: "puducherry",
97
+ an: "andaman-nicobar", tg: "telangana", ts: "telangana",
98
+ ap: "andhra-pradesh", la: "ladakh", dn: "dadra-nagar-haveli-daman-diu",
99
+ dd: "dadra-nagar-haveli-daman-diu",
100
+ // former / alternative names
101
+ orissa: "odisha",
102
+ pondicherry: "puducherry",
103
+ uttaranchal: "uttarakhand",
104
+ "new delhi": "delhi",
105
+ "nct of delhi": "delhi",
106
+ "national capital territory of delhi": "delhi",
107
+ "jammu kashmir": "jammu-kashmir",
108
+ "andaman and nicobar": "andaman-nicobar",
109
+ "andaman nicobar islands": "andaman-nicobar",
110
+ "dadra and nagar haveli": "dadra-nagar-haveli-daman-diu",
111
+ "daman and diu": "dadra-nagar-haveli-daman-diu",
112
+ };
113
+ /** Collapse to a comparison form: lowercase, letters and spaces only. */
114
+ function flatten(raw) {
115
+ return raw
116
+ .normalize("NFKD")
117
+ .toLowerCase()
118
+ .replace(/[^a-z\s]/g, " ")
119
+ .replace(/\s+/g, " ")
120
+ .trim();
121
+ }
122
+ /**
123
+ * Resolve any spelling β€” canonical key, full name, abbreviation, former name,
124
+ * or a two-digit GST state code β€” to one canonical key, or `null`.
125
+ *
126
+ * πŸ›‘ The numeric branch runs FIRST and before any letter-stripping, because
127
+ * the old normaliser destroyed digits. A state held as `"29"` or as a full
128
+ * GSTIN (`"29ABCDE1234F1Z5"`) is a real shape in this data: `resolveSupplierIdentity`
129
+ * reads a store's GSTIN, and its first two characters are the authoritative
130
+ * place of supply for the seller β€” more reliable than their typed pickup
131
+ * address, which is what G3 is about.
132
+ */
133
+ export function resolveStateKey(raw) {
134
+ if (!raw)
135
+ return null;
136
+ const trimmed = String(raw).trim();
137
+ if (!trimmed)
138
+ return null;
139
+ // A bare code, or the leading two digits of a GSTIN.
140
+ const codeMatch = /^(\d{2})/.exec(trimmed);
141
+ if (codeMatch) {
142
+ const code = codeMatch[1];
143
+ for (const [key, meta] of Object.entries(INDIA_STATES)) {
144
+ if (meta.code === code)
145
+ return key;
146
+ }
147
+ // A two-digit prefix that is not a valid state code is NOT a state.
148
+ return null;
149
+ }
150
+ const flat = flatten(trimmed);
151
+ if (!flat)
152
+ return null;
153
+ // Canonical key (hyphenated) β†’ its flattened form is the key with spaces.
154
+ for (const key of Object.keys(INDIA_STATES)) {
155
+ if (flat === key.replace(/-/g, " "))
156
+ return key;
157
+ }
158
+ // Display name.
159
+ for (const [key, meta] of Object.entries(INDIA_STATES)) {
160
+ if (flat === flatten(meta.name))
161
+ return key;
162
+ }
163
+ // Alias table.
164
+ const alias = ALIASES[flat];
165
+ if (alias)
166
+ return alias;
167
+ /*
168
+ * A last resort: drop "and"/"&" joiners, which is the single most common
169
+ * divergence in real addresses ("Jammu and Kashmir" vs "Jammu Kashmir",
170
+ * "Andaman and Nicobar Islands" vs "Andaman Nicobar"). Compared against the
171
+ * same reduction of each display name, so it cannot match across states.
172
+ */
173
+ const noJoiners = flat.replace(/\band\b/g, " ").replace(/\s+/g, " ").trim();
174
+ if (noJoiners !== flat) {
175
+ for (const [key, meta] of Object.entries(INDIA_STATES)) {
176
+ const target = flatten(meta.name).replace(/\band\b/g, " ").replace(/\s+/g, " ").trim();
177
+ if (noJoiners === target)
178
+ return key;
179
+ }
180
+ const aliased = ALIASES[noJoiners];
181
+ if (aliased)
182
+ return aliased;
183
+ }
184
+ return null;
185
+ }
186
+ /** The GST state code for any spelling, or `null`. */
187
+ export function resolveStateCode(raw) {
188
+ const key = resolveStateKey(raw);
189
+ return key ? INDIA_STATES[key].code : null;
190
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * The payout hold β€” how long a seller's money is held after delivery, and the
3
+ * ONE place that number is decided.
4
+ *
5
+ * WHY: there were three payout paths and one intended hold, honoured by zero
6
+ * of the three (D25).
7
+ *
8
+ * Β· `weeklyPayoutEligibility` (Saturday) queried
9
+ * `payoutStatus == "eligible" && status == "delivered"` with **no time
10
+ * cutoff at all**, so it paid out an order delivered yesterday.
11
+ * Β· `autoPayoutEligibility` (daily) applied a 7-day window, but computed
12
+ * it with CALENDAR days while calling them business days β€” measured,
13
+ * that reached 4 calendar days less far back than it should on a
14
+ * Monday, so a "7 business day" hold was really about 5.
15
+ * Β· The manual seller "Request payout" (`seller-actions.ts`) had no time
16
+ * check whatsoever.
17
+ *
18
+ * And `commissions.payoutHoldDays` β€” the admin-facing setting that looks
19
+ * like it controls all this β€” was read by NOTHING. It is seeded **2**,
20
+ * which is the trap below.
21
+ *
22
+ * WHAT: `resolvePayoutHoldDays(commissions, returns)` β†’ the honoured number,
23
+ * and `payoutCutoff(...)` β†’ the instant to compare an order's delivery
24
+ * anchor against.
25
+ */
26
+ import { type BusinessDayOptions } from "../time/business-days";
27
+ /**
28
+ * The hold can never be shorter than any window during which money can still
29
+ * flow back OUT of the order.
30
+ *
31
+ * πŸ›‘ WIRING `payoutHoldDays` NAIVELY MAKES THINGS WORSE, which is why this
32
+ * function exists rather than a bare settings read. The setting is seeded at
33
+ * **2 days**; the hardcoded window it would replace is **7**; and the
34
+ * sale-protection claim window is **7 days** (168h). So honouring the stored
35
+ * value as-is would *shorten* the hold from 7 to 2 and release a seller's
36
+ * money four days before the buyer's protection claim window even closes β€”
37
+ * i.e. we would have sold cover we had already paid out against.
38
+ *
39
+ * The floor is therefore `max(returnWindow, claimWindow)`, and the setting can
40
+ * only ever EXTEND it. An admin who wants a shorter hold has to shorten the
41
+ * return window first, which is the honest ordering of that decision.
42
+ */
43
+ export declare const PAYOUT_HOLD_FLOOR_DAYS = 7;
44
+ export interface PayoutHoldInputs {
45
+ /** `siteSettings.commissions` β€” `payoutHoldDays` is the only field read. */
46
+ payoutHoldDays?: number;
47
+ /** `siteSettings.returns.windowDays` β€” the buyer's return window. */
48
+ returnWindowDays?: number;
49
+ /** Longest protection claim window in HOURS, if protections are enabled. */
50
+ maxClaimWindowHours?: number;
51
+ }
52
+ export interface ResolvedPayoutHold {
53
+ /** Business days actually honoured. */
54
+ days: number;
55
+ /** Which input won, so a log line can say why. */
56
+ source: "setting" | "floor";
57
+ /** The floor that applied, for the same reason. */
58
+ floor: number;
59
+ }
60
+ /**
61
+ * Resolve the honoured hold.
62
+ *
63
+ * Returns the SOURCE as well as the number, deliberately: a hold silently
64
+ * raised from the admin's configured 2 to a floor of 7 reads as a bug to
65
+ * whoever set it, so the job logs which one applied rather than leaving the
66
+ * seller and the admin to disagree about it.
67
+ */
68
+ export declare function resolvePayoutHoldDays(inputs: PayoutHoldInputs): ResolvedPayoutHold;
69
+ /**
70
+ * The cutoff instant: an order whose delivery anchor is at or before this is
71
+ * past its hold.
72
+ *
73
+ * πŸ›‘ BUSINESS days, via `businessDayCutoff` β€” weekends and the Indian holiday
74
+ * list. The previous implementation subtracted calendar days, so every hold
75
+ * spanning a weekend released early.
76
+ */
77
+ export declare function payoutCutoff(inputs: PayoutHoldInputs, opts?: BusinessDayOptions, now?: Date): {
78
+ cutoff: Date;
79
+ hold: ResolvedPayoutHold;
80
+ };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * The payout hold β€” how long a seller's money is held after delivery, and the
3
+ * ONE place that number is decided.
4
+ *
5
+ * WHY: there were three payout paths and one intended hold, honoured by zero
6
+ * of the three (D25).
7
+ *
8
+ * Β· `weeklyPayoutEligibility` (Saturday) queried
9
+ * `payoutStatus == "eligible" && status == "delivered"` with **no time
10
+ * cutoff at all**, so it paid out an order delivered yesterday.
11
+ * Β· `autoPayoutEligibility` (daily) applied a 7-day window, but computed
12
+ * it with CALENDAR days while calling them business days β€” measured,
13
+ * that reached 4 calendar days less far back than it should on a
14
+ * Monday, so a "7 business day" hold was really about 5.
15
+ * Β· The manual seller "Request payout" (`seller-actions.ts`) had no time
16
+ * check whatsoever.
17
+ *
18
+ * And `commissions.payoutHoldDays` β€” the admin-facing setting that looks
19
+ * like it controls all this β€” was read by NOTHING. It is seeded **2**,
20
+ * which is the trap below.
21
+ *
22
+ * WHAT: `resolvePayoutHoldDays(commissions, returns)` β†’ the honoured number,
23
+ * and `payoutCutoff(...)` β†’ the instant to compare an order's delivery
24
+ * anchor against.
25
+ */
26
+ import { businessDayCutoff, } from "../time/business-days.js";
27
+ /**
28
+ * The hold can never be shorter than any window during which money can still
29
+ * flow back OUT of the order.
30
+ *
31
+ * πŸ›‘ WIRING `payoutHoldDays` NAIVELY MAKES THINGS WORSE, which is why this
32
+ * function exists rather than a bare settings read. The setting is seeded at
33
+ * **2 days**; the hardcoded window it would replace is **7**; and the
34
+ * sale-protection claim window is **7 days** (168h). So honouring the stored
35
+ * value as-is would *shorten* the hold from 7 to 2 and release a seller's
36
+ * money four days before the buyer's protection claim window even closes β€”
37
+ * i.e. we would have sold cover we had already paid out against.
38
+ *
39
+ * The floor is therefore `max(returnWindow, claimWindow)`, and the setting can
40
+ * only ever EXTEND it. An admin who wants a shorter hold has to shorten the
41
+ * return window first, which is the honest ordering of that decision.
42
+ */
43
+ export const PAYOUT_HOLD_FLOOR_DAYS = 7;
44
+ /**
45
+ * Resolve the honoured hold.
46
+ *
47
+ * Returns the SOURCE as well as the number, deliberately: a hold silently
48
+ * raised from the admin's configured 2 to a floor of 7 reads as a bug to
49
+ * whoever set it, so the job logs which one applied rather than leaving the
50
+ * seller and the admin to disagree about it.
51
+ */
52
+ export function resolvePayoutHoldDays(inputs) {
53
+ const claimDays = inputs.maxClaimWindowHours
54
+ ? Math.ceil(inputs.maxClaimWindowHours / 24)
55
+ : 0;
56
+ const floor = Math.max(PAYOUT_HOLD_FLOOR_DAYS, inputs.returnWindowDays ?? 0, claimDays);
57
+ const configured = inputs.payoutHoldDays;
58
+ if (typeof configured === "number" && Number.isFinite(configured) && configured > floor) {
59
+ return { days: Math.floor(configured), source: "setting", floor };
60
+ }
61
+ return { days: floor, source: "floor", floor };
62
+ }
63
+ /**
64
+ * The cutoff instant: an order whose delivery anchor is at or before this is
65
+ * past its hold.
66
+ *
67
+ * πŸ›‘ BUSINESS days, via `businessDayCutoff` β€” weekends and the Indian holiday
68
+ * list. The previous implementation subtracted calendar days, so every hold
69
+ * spanning a weekend released early.
70
+ */
71
+ export function payoutCutoff(inputs, opts, now) {
72
+ const hold = resolvePayoutHoldDays(inputs);
73
+ return { cutoff: businessDayCutoff(hold.days, opts, now), hold };
74
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * `deadlinesFor(order)` β€” every deadline an order currently owes, derived.
3
+ *
4
+ * ## Pure, so a page can render it for free
5
+ *
6
+ * No reads, no writes, no `obligations` lookup. A buyer or seller page calls
7
+ * this on an order it already has and renders "Dispatch by Thu 3 Nov".
8
+ *
9
+ * πŸ›‘ That is why deadlines are DERIVED rather than stored on the order. A
10
+ * stored `dispatchDueAt` would need a backfill for every existing order, and
11
+ * would drift from the policy the moment an admin changed the duration β€” the
12
+ * denormalised-mirror trap (Root Cause #42). The `obligations` collection
13
+ * stores one too, and that copy is explicitly a due-date INDEX for the sweep
14
+ * to query, not the answer.
15
+ *
16
+ * ## Test-window compression is PER SUBJECT
17
+ *
18
+ * πŸ›‘ A tester run must be able to watch a 3-day acceptance window close inside
19
+ * a 90-minute session, and a hard-coded duration cannot be shortened β€” which is
20
+ * what made those cases untestable in any run shorter than the literal. So
21
+ * durations scale by `TESTER_WINDOW_MINUTES`, but **only when the subject
22
+ * itself carries `isTestData: true`.** A global switch would compress every
23
+ * live buyer's deadline the moment somebody ran the tester, which is the one
24
+ * mistake this must not make.
25
+ */
26
+ import { type Duration, type ObligationPolicy } from "../../../features/obligations/constants/policies";
27
+ import { type ObligationKind } from "../../../features/obligations/schemas/firestore";
28
+ import type { OrderDocument } from "../../../features/orders/schemas/firestore";
29
+ export interface ResolvedDeadline {
30
+ kind: ObligationKind;
31
+ dueAt: Date;
32
+ /** The fact the clock started from. */
33
+ anchoredAt: Date;
34
+ policy: ObligationPolicy;
35
+ }
36
+ /**
37
+ * Resolve one duration into an absolute date.
38
+ *
39
+ * πŸ›‘ `business` goes through `addBusinessDays`, which counts weekends AND the
40
+ * Indian holiday calendar. The predecessor helper subtracted CALENDAR days and
41
+ * called them business days, so the "7-business-day" payout hold was really
42
+ * about 5 β€” and a missed holiday silently SHORTENS a deadline, which is why
43
+ * the calendar has an owner and a horizon warning.
44
+ */
45
+ export declare function resolveDueAt(anchor: Date, duration: Duration, opts?: {
46
+ isTestData?: boolean;
47
+ }): Date;
48
+ /**
49
+ * Every deadline this order currently owes.
50
+ *
51
+ * Only kinds whose `precondition` holds AND whose `anchor` has fired appear β€”
52
+ * an order that has not shipped owes no delivery confirmation, and that is the
53
+ * difference between "not yet" and "overdue".
54
+ */
55
+ export declare function deadlinesFor(order: OrderDocument): ResolvedDeadline[];
56
+ /**
57
+ * Which obligations this order should have open, and which should be closed.
58
+ *
59
+ * Called from the order's own write (`updateWithHistory`), where the current
60
+ * document is already in hand β€” so reconciling costs **zero extra reads**.
61
+ *
62
+ * πŸ›‘ Derived from the POLICY's own `precondition`, not from a hand-written
63
+ * `Record<OrderStatus, {opens, closes}>` table.
64
+ *
65
+ * The plan proposed that table, and building it this way instead is a
66
+ * deliberate departure worth stating: a status→opens/closes map is a SECOND
67
+ * encoding of the same facts the preconditions already express, and the two
68
+ * would drift exactly as the plan's own proposed transition map had already
69
+ * drifted from the census (it omitted `pending β†’ processing`, which a live
70
+ * sweep writes). One source, evaluated twice β€” once for display, once for
71
+ * reconciliation β€” cannot disagree with itself.
72
+ */
73
+ export declare function reconcileObligations(order: OrderDocument,
74
+ /**
75
+ * The order as it was BEFORE this write, when the caller has it.
76
+ *
77
+ * πŸ›‘ THIS PARAMETER IS A COST FIX, not an optimisation. My first version
78
+ * closed "every kind not currently open", which on an 11-kind union meant
79
+ * **11 Firestore update attempts on every single order write** β€” each one a
80
+ * billed write against a document that mostly does not exist, on the hottest
81
+ * collection in the project. Rule #6 exists for exactly that.
82
+ *
83
+ * With `previous` in hand the close set is `was-open MINUS is-open`, which is
84
+ * usually empty and never larger than the number of obligations that
85
+ * genuinely just completed. Zero reads either way, because `updateWithHistory`
86
+ * already holds the pre-write document.
87
+ *
88
+ * Omitting it falls back to the full set, which is correct for a deliberate
89
+ * backfill over existing orders and wrong for the write path.
90
+ */
91
+ previous?: OrderDocument | null): {
92
+ open: ResolvedDeadline[];
93
+ close: ObligationKind[];
94
+ };