@classytic/commerce-sdk 0.1.1 → 0.2.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 (438) hide show
  1. package/README.md +187 -74
  2. package/dist/accounting/api/account.d.ts +49 -0
  3. package/dist/accounting/api/account.js +45 -0
  4. package/dist/accounting/api/budget.d.ts +76 -0
  5. package/dist/accounting/api/budget.js +82 -0
  6. package/dist/accounting/api/constants.d.ts +58 -0
  7. package/dist/accounting/api/constants.js +79 -0
  8. package/dist/accounting/api/fiscal-period.d.ts +31 -0
  9. package/dist/accounting/api/fiscal-period.js +30 -0
  10. package/dist/accounting/api/index.d.ts +7 -0
  11. package/dist/accounting/api/journal-entry.d.ts +66 -0
  12. package/dist/accounting/api/journal-entry.js +72 -0
  13. package/dist/accounting/api/posting.d.ts +55 -0
  14. package/dist/accounting/api/posting.js +70 -0
  15. package/dist/accounting/api/reports.d.ts +63 -0
  16. package/dist/accounting/api/reports.js +81 -0
  17. package/dist/accounting/hooks/account.d.ts +29 -0
  18. package/dist/accounting/hooks/account.js +102 -0
  19. package/dist/accounting/hooks/budget.d.ts +39 -0
  20. package/dist/accounting/hooks/budget.js +106 -0
  21. package/dist/accounting/hooks/fiscal-period.d.ts +22 -0
  22. package/dist/accounting/hooks/fiscal-period.js +52 -0
  23. package/dist/accounting/hooks/index.d.ts +6 -0
  24. package/dist/accounting/hooks/journal-entry.d.ts +37 -0
  25. package/dist/accounting/hooks/journal-entry.js +89 -0
  26. package/dist/accounting/hooks/posting.d.ts +128 -0
  27. package/dist/accounting/hooks/posting.js +119 -0
  28. package/dist/accounting/hooks/reports.d.ts +32 -0
  29. package/dist/accounting/hooks/reports.js +131 -0
  30. package/dist/accounting/index.d.ts +15 -0
  31. package/dist/accounting/index.js +15 -0
  32. package/dist/accounting/types/index.d.ts +375 -0
  33. package/dist/analytics/api/analytics.d.ts +16 -0
  34. package/dist/analytics/api/analytics.js +27 -0
  35. package/dist/analytics/api/index.d.ts +1 -0
  36. package/dist/analytics/hooks/analytics.d.ts +12 -0
  37. package/dist/analytics/hooks/analytics.js +33 -0
  38. package/dist/analytics/hooks/index.d.ts +1 -0
  39. package/dist/analytics/index.d.ts +4 -27
  40. package/dist/analytics/index.js +4 -6
  41. package/dist/analytics/types.d.ts +46 -0
  42. package/dist/audit/api/audit.d.ts +17 -0
  43. package/dist/audit/api/audit.js +21 -0
  44. package/dist/audit/hooks/audit.d.ts +17 -0
  45. package/dist/audit/hooks/audit.js +38 -0
  46. package/dist/audit/index.d.ts +4 -0
  47. package/dist/audit/index.js +4 -0
  48. package/dist/audit/types/index.d.ts +32 -0
  49. package/dist/auth/api/user-data.d.ts +30 -0
  50. package/dist/auth/api/user-data.js +70 -0
  51. package/dist/auth/hooks/user-search.d.ts +32 -0
  52. package/dist/auth/hooks/user-search.js +51 -0
  53. package/dist/auth/index.d.ts +4 -39
  54. package/dist/auth/index.js +5 -5
  55. package/dist/auth/types.d.ts +46 -0
  56. package/dist/auth/types.js +27 -0
  57. package/dist/catalog/api/category.d.ts +97 -0
  58. package/dist/catalog/api/category.js +109 -0
  59. package/dist/catalog/api/index.d.ts +4 -0
  60. package/dist/catalog/api/product.d.ts +136 -0
  61. package/dist/catalog/api/product.js +142 -0
  62. package/dist/catalog/api/review.d.ts +32 -0
  63. package/dist/catalog/api/review.js +41 -0
  64. package/dist/catalog/api/size-guide.d.ts +46 -0
  65. package/dist/catalog/api/size-guide.js +58 -0
  66. package/dist/catalog/hooks/category.d.ts +201 -0
  67. package/dist/catalog/hooks/category.js +295 -0
  68. package/dist/catalog/hooks/index.d.ts +4 -0
  69. package/dist/catalog/hooks/product.d.ts +165 -0
  70. package/dist/catalog/hooks/product.js +267 -0
  71. package/dist/catalog/hooks/review.d.ts +18 -0
  72. package/dist/catalog/hooks/review.js +38 -0
  73. package/dist/catalog/hooks/size-guide.d.ts +136 -0
  74. package/dist/catalog/hooks/size-guide.js +173 -0
  75. package/dist/catalog/index.d.ts +13 -571
  76. package/dist/catalog/index.js +10 -9
  77. package/dist/catalog/prefetch.d.ts +29 -0
  78. package/dist/catalog/prefetch.js +32 -0
  79. package/dist/catalog/types/category.d.ts +168 -0
  80. package/dist/catalog/types/index.d.ts +4 -0
  81. package/dist/catalog/types/product.d.ts +261 -0
  82. package/dist/catalog/types/review.d.ts +48 -0
  83. package/dist/catalog/types/size-guide.d.ts +118 -0
  84. package/dist/client.d.ts +138 -0
  85. package/dist/client.js +129 -0
  86. package/dist/content/api/cms.d.ts +27 -0
  87. package/dist/content/api/cms.js +43 -0
  88. package/dist/content/api/index.d.ts +2 -0
  89. package/dist/content/api/media.d.ts +74 -0
  90. package/dist/content/api/media.js +77 -0
  91. package/dist/content/hooks/cms.d.ts +31 -0
  92. package/dist/content/hooks/cms.js +62 -0
  93. package/dist/content/hooks/index.d.ts +2 -0
  94. package/dist/content/hooks/media.d.ts +74 -0
  95. package/dist/content/hooks/media.js +153 -0
  96. package/dist/content/index.d.ts +7 -309
  97. package/dist/content/index.js +6 -6
  98. package/dist/content/types/cms.d.ts +390 -0
  99. package/dist/content/types/media.d.ts +110 -0
  100. package/dist/core/api-factory.d.ts +17 -0
  101. package/dist/core/api-factory.js +39 -0
  102. package/dist/core/api-handler.d.ts +53 -0
  103. package/dist/core/api-handler.js +89 -0
  104. package/dist/core/index.d.ts +4 -166
  105. package/dist/core/index.js +4 -5
  106. package/dist/core/prefetch.d.ts +2 -0
  107. package/dist/core/prefetch.js +3 -0
  108. package/dist/core/react/crud.factory.d.ts +3 -0
  109. package/dist/core/react/crud.factory.js +5 -0
  110. package/dist/core/react/index.d.ts +4 -0
  111. package/dist/core/react/index.js +7 -0
  112. package/dist/core/react/mutation.factory.d.ts +9 -0
  113. package/dist/core/react/mutation.factory.js +21 -0
  114. package/dist/core/react/query.factory.d.ts +12 -0
  115. package/dist/core/react/query.factory.js +5 -0
  116. package/dist/core/server-context.d.ts +6 -0
  117. package/dist/core/server-context.js +12 -0
  118. package/dist/core/types/shared.d.ts +29 -0
  119. package/dist/finance/api/finance.d.ts +22 -0
  120. package/dist/finance/api/finance.js +29 -0
  121. package/dist/finance/api/index.d.ts +1 -0
  122. package/dist/finance/hooks/finance.d.ts +32 -0
  123. package/dist/finance/hooks/finance.js +66 -0
  124. package/dist/finance/hooks/index.d.ts +1 -0
  125. package/dist/finance/index.d.ts +4 -81
  126. package/dist/finance/index.js +4 -5
  127. package/dist/finance/types/finance.d.ts +82 -0
  128. package/dist/index.d.ts +139 -32
  129. package/dist/index.js +113 -29
  130. package/dist/inventory/api/adjustment.d.ts +123 -0
  131. package/dist/inventory/api/adjustment.js +120 -0
  132. package/dist/inventory/api/availability.d.ts +70 -0
  133. package/dist/inventory/api/availability.js +47 -0
  134. package/dist/inventory/api/cost.d.ts +58 -0
  135. package/dist/inventory/api/cost.js +34 -0
  136. package/dist/inventory/api/index.d.ts +18 -0
  137. package/dist/inventory/api/lot.d.ts +82 -0
  138. package/dist/inventory/api/lot.js +46 -0
  139. package/dist/inventory/api/movement.d.ts +71 -0
  140. package/dist/inventory/api/movement.js +75 -0
  141. package/dist/inventory/api/package.d.ts +97 -0
  142. package/dist/inventory/api/package.js +56 -0
  143. package/dist/inventory/api/procurement.d.ts +110 -0
  144. package/dist/inventory/api/procurement.js +59 -0
  145. package/dist/inventory/api/purchase.d.ts +106 -0
  146. package/dist/inventory/api/purchase.js +115 -0
  147. package/dist/inventory/api/replenishment.d.ts +145 -0
  148. package/dist/inventory/api/replenishment.js +63 -0
  149. package/dist/inventory/api/report.d.ts +102 -0
  150. package/dist/inventory/api/report.js +54 -0
  151. package/dist/inventory/api/request.d.ts +157 -0
  152. package/dist/inventory/api/request.js +140 -0
  153. package/dist/inventory/api/reservation.d.ts +77 -0
  154. package/dist/inventory/api/reservation.js +51 -0
  155. package/dist/inventory/api/scan.d.ts +29 -0
  156. package/dist/inventory/api/scan.js +30 -0
  157. package/dist/inventory/api/supplier.d.ts +9 -0
  158. package/dist/inventory/api/supplier.js +24 -0
  159. package/dist/inventory/api/trace.d.ts +71 -0
  160. package/dist/inventory/api/trace.js +39 -0
  161. package/dist/inventory/api/transfer.d.ts +162 -0
  162. package/dist/inventory/api/transfer.js +155 -0
  163. package/dist/inventory/api/warehouse.d.ts +199 -0
  164. package/dist/inventory/api/warehouse.js +155 -0
  165. package/dist/inventory/hooks/adjustment.d.ts +24 -0
  166. package/dist/inventory/hooks/adjustment.js +30 -0
  167. package/dist/inventory/hooks/availability.d.ts +16 -0
  168. package/dist/inventory/hooks/availability.js +35 -0
  169. package/dist/inventory/hooks/cost.d.ts +21 -0
  170. package/dist/inventory/hooks/cost.js +50 -0
  171. package/dist/inventory/hooks/index.d.ts +18 -0
  172. package/dist/inventory/hooks/inventory.d.ts +130 -0
  173. package/dist/inventory/hooks/inventory.js +267 -0
  174. package/dist/inventory/hooks/lot.d.ts +26 -0
  175. package/dist/inventory/hooks/lot.js +67 -0
  176. package/dist/inventory/hooks/movement.d.ts +68 -0
  177. package/dist/inventory/hooks/movement.js +106 -0
  178. package/dist/inventory/hooks/package.d.ts +32 -0
  179. package/dist/inventory/hooks/package.js +80 -0
  180. package/dist/inventory/hooks/procurement.d.ts +28 -0
  181. package/dist/inventory/hooks/procurement.js +87 -0
  182. package/dist/inventory/hooks/purchase.d.ts +63 -0
  183. package/dist/inventory/hooks/purchase.js +119 -0
  184. package/dist/inventory/hooks/replenishment.d.ts +34 -0
  185. package/dist/inventory/hooks/replenishment.js +87 -0
  186. package/dist/inventory/hooks/report.d.ts +37 -0
  187. package/dist/inventory/hooks/report.js +79 -0
  188. package/dist/inventory/hooks/request.d.ts +113 -0
  189. package/dist/inventory/hooks/request.js +218 -0
  190. package/dist/inventory/hooks/reservation.d.ts +25 -0
  191. package/dist/inventory/hooks/reservation.js +56 -0
  192. package/dist/inventory/hooks/scan.d.ts +14 -0
  193. package/dist/inventory/hooks/scan.js +22 -0
  194. package/dist/inventory/hooks/supplier.d.ts +24 -0
  195. package/dist/inventory/hooks/supplier.js +30 -0
  196. package/dist/inventory/hooks/trace.d.ts +19 -0
  197. package/dist/inventory/hooks/trace.js +55 -0
  198. package/dist/inventory/hooks/transfer.d.ts +90 -0
  199. package/dist/inventory/hooks/transfer.js +197 -0
  200. package/dist/inventory/hooks/warehouse.d.ts +87 -0
  201. package/dist/inventory/hooks/warehouse.js +240 -0
  202. package/dist/inventory/index.d.ts +39 -512
  203. package/dist/inventory/index.js +37 -16
  204. package/dist/inventory/types/index.d.ts +3 -0
  205. package/dist/inventory/types/inventory.d.ts +485 -0
  206. package/dist/inventory/types/supplier.d.ts +90 -0
  207. package/dist/inventory/types/warehouse.d.ts +182 -0
  208. package/dist/logistics/api/index.d.ts +1 -0
  209. package/dist/logistics/api/logistics.d.ts +260 -0
  210. package/dist/logistics/api/logistics.js +249 -0
  211. package/dist/logistics/hooks/index.d.ts +1 -0
  212. package/dist/logistics/hooks/logistics.d.ts +252 -0
  213. package/dist/logistics/hooks/logistics.js +370 -0
  214. package/dist/logistics/index.d.ts +4 -248
  215. package/dist/logistics/index.js +4 -7
  216. package/dist/logistics/types/logistics.d.ts +188 -0
  217. package/dist/node_modules/@tanstack/query-core/build/modern/hydration-C-jfQLut.d.ts +270 -0
  218. package/dist/notifications/api/notification.d.ts +15 -0
  219. package/dist/notifications/api/notification.js +43 -0
  220. package/dist/notifications/hooks/notification.d.ts +34 -0
  221. package/dist/notifications/hooks/notification.js +86 -0
  222. package/dist/notifications/hooks/stream.d.ts +22 -0
  223. package/dist/notifications/hooks/stream.js +80 -0
  224. package/dist/notifications/index.d.ts +5 -0
  225. package/dist/notifications/index.js +5 -0
  226. package/dist/notifications/types/index.d.ts +57 -0
  227. package/dist/payments/api/index.d.ts +1 -0
  228. package/dist/payments/api/payment.d.ts +89 -0
  229. package/dist/payments/api/payment.js +93 -0
  230. package/dist/payments/hooks/payment.d.ts +53 -0
  231. package/dist/payments/hooks/payment.js +93 -0
  232. package/dist/payments/index.d.ts +4 -55
  233. package/dist/payments/index.js +4 -6
  234. package/dist/payments/types/payment.d.ts +50 -0
  235. package/dist/permissions/checker.d.ts +125 -0
  236. package/dist/permissions/checker.js +150 -0
  237. package/dist/permissions/index.d.ts +3 -0
  238. package/dist/permissions/index.js +4 -0
  239. package/dist/permissions/roles.d.ts +39 -0
  240. package/dist/permissions/roles.js +66 -0
  241. package/dist/platform/api/branch.d.ts +57 -0
  242. package/dist/platform/api/branch.js +73 -0
  243. package/dist/platform/api/config.d.ts +67 -0
  244. package/dist/platform/api/config.js +83 -0
  245. package/dist/platform/api/features.d.ts +15 -0
  246. package/dist/platform/api/features.js +20 -0
  247. package/dist/platform/api/index.d.ts +6 -0
  248. package/dist/platform/api/promo.d.ts +286 -0
  249. package/dist/platform/api/promo.js +276 -0
  250. package/dist/platform/api/user.d.ts +10 -0
  251. package/dist/platform/api/user.js +29 -0
  252. package/dist/platform/api/webhook.d.ts +102 -0
  253. package/dist/platform/api/webhook.js +124 -0
  254. package/dist/platform/hooks/branch.d.ts +24 -0
  255. package/dist/platform/hooks/branch.js +31 -0
  256. package/dist/platform/hooks/config.d.ts +61 -0
  257. package/dist/platform/hooks/config.js +100 -0
  258. package/dist/platform/hooks/features.d.ts +22 -0
  259. package/dist/platform/hooks/features.js +75 -0
  260. package/dist/platform/hooks/index.d.ts +6 -0
  261. package/dist/platform/hooks/promo.d.ts +218 -0
  262. package/dist/platform/hooks/promo.js +451 -0
  263. package/dist/platform/hooks/user.d.ts +24 -0
  264. package/dist/platform/hooks/user.js +30 -0
  265. package/dist/platform/index.d.ts +18 -645
  266. package/dist/platform/index.js +14 -8
  267. package/dist/platform/prefetch.d.ts +9 -0
  268. package/dist/platform/prefetch.js +11 -0
  269. package/dist/platform/types/branch.d.ts +110 -0
  270. package/dist/platform/types/branch.js +16 -0
  271. package/dist/platform/types/config.d.ts +137 -0
  272. package/dist/platform/types/features.d.ts +46 -0
  273. package/dist/platform/types/promo.d.ts +260 -0
  274. package/dist/platform/types/user.d.ts +72 -0
  275. package/dist/platform/types/webhook.d.ts +165 -0
  276. package/dist/sales/api/cart.d.ts +34 -0
  277. package/dist/sales/api/cart.js +38 -0
  278. package/dist/sales/api/customer.d.ts +40 -0
  279. package/dist/sales/api/customer.js +52 -0
  280. package/dist/sales/api/earning-rules.d.ts +54 -0
  281. package/dist/sales/api/earning-rules.js +56 -0
  282. package/dist/sales/api/index.d.ts +9 -0
  283. package/dist/sales/api/loyalty.d.ts +54 -0
  284. package/dist/sales/api/loyalty.js +57 -0
  285. package/dist/sales/api/order.d.ts +147 -0
  286. package/dist/sales/api/order.js +69 -0
  287. package/dist/sales/api/pos.d.ts +81 -0
  288. package/dist/sales/api/pos.js +95 -0
  289. package/dist/sales/api/referrals.d.ts +63 -0
  290. package/dist/sales/api/referrals.js +62 -0
  291. package/dist/sales/api/tiers.d.ts +66 -0
  292. package/dist/sales/api/tiers.js +59 -0
  293. package/dist/sales/hooks/cart.d.ts +50 -0
  294. package/dist/sales/hooks/cart.js +161 -0
  295. package/dist/sales/hooks/customer.d.ts +100 -0
  296. package/dist/sales/hooks/customer.js +130 -0
  297. package/dist/sales/hooks/earning-rules.d.ts +31 -0
  298. package/dist/sales/hooks/earning-rules.js +112 -0
  299. package/dist/sales/hooks/index.d.ts +8 -0
  300. package/dist/sales/hooks/loyalty.d.ts +51 -0
  301. package/dist/sales/hooks/loyalty.js +122 -0
  302. package/dist/sales/hooks/order.d.ts +219 -0
  303. package/dist/sales/hooks/order.js +401 -0
  304. package/dist/sales/hooks/pos.d.ts +87 -0
  305. package/dist/sales/hooks/pos.js +222 -0
  306. package/dist/sales/hooks/referrals.d.ts +34 -0
  307. package/dist/sales/hooks/referrals.js +132 -0
  308. package/dist/sales/hooks/tiers.d.ts +32 -0
  309. package/dist/sales/hooks/tiers.js +144 -0
  310. package/dist/sales/index.d.ts +25 -587
  311. package/dist/sales/index.js +19 -9
  312. package/dist/sales/prefetch.d.ts +10 -0
  313. package/dist/sales/prefetch.js +13 -0
  314. package/dist/sales/types/cart.d.ts +123 -0
  315. package/dist/sales/types/customer.d.ts +119 -0
  316. package/dist/sales/types/earning-rules.d.ts +75 -0
  317. package/dist/sales/types/index.d.ts +8 -0
  318. package/dist/sales/types/loyalty.d.ts +120 -0
  319. package/dist/sales/types/order.d.ts +487 -0
  320. package/dist/sales/types/order.js +22 -0
  321. package/dist/sales/types/pos.d.ts +227 -0
  322. package/dist/sales/types/referrals.d.ts +51 -0
  323. package/dist/sales/types/tiers.d.ts +56 -0
  324. package/dist/server.d.ts +41 -23
  325. package/dist/server.js +41 -36
  326. package/dist/transaction/api/index.d.ts +1 -0
  327. package/dist/transaction/api/transaction.d.ts +63 -0
  328. package/dist/transaction/api/transaction.js +84 -0
  329. package/dist/transaction/hooks/index.d.ts +1 -0
  330. package/dist/transaction/hooks/transaction.d.ts +106 -0
  331. package/dist/transaction/hooks/transaction.js +156 -0
  332. package/dist/transaction/index.d.ts +4 -104
  333. package/dist/transaction/index.js +5 -8
  334. package/dist/transaction/types/transaction.d.ts +440 -0
  335. package/dist/transaction/types/transaction.js +86 -0
  336. package/package.json +36 -25
  337. package/dist/adjustment-MNH3AT6S.js +0 -5
  338. package/dist/adjustment-MNH3AT6S.js.map +0 -1
  339. package/dist/analytics/index.js.map +0 -1
  340. package/dist/analytics-DMcD-o8w.d.ts +0 -76
  341. package/dist/api-factory-B_h4RKBm.d.ts +0 -280
  342. package/dist/auth/index.js.map +0 -1
  343. package/dist/catalog/index.js.map +0 -1
  344. package/dist/chunk-24FDD6UR.js +0 -75
  345. package/dist/chunk-24FDD6UR.js.map +0 -1
  346. package/dist/chunk-2TF7QNYV.js +0 -159
  347. package/dist/chunk-2TF7QNYV.js.map +0 -1
  348. package/dist/chunk-2YAZ5WG6.js +0 -479
  349. package/dist/chunk-2YAZ5WG6.js.map +0 -1
  350. package/dist/chunk-36NLLAVH.js +0 -177
  351. package/dist/chunk-36NLLAVH.js.map +0 -1
  352. package/dist/chunk-3OYSJB3P.js +0 -126
  353. package/dist/chunk-3OYSJB3P.js.map +0 -1
  354. package/dist/chunk-5E57JODA.js +0 -135
  355. package/dist/chunk-5E57JODA.js.map +0 -1
  356. package/dist/chunk-7LZCW4VF.js +0 -13
  357. package/dist/chunk-7LZCW4VF.js.map +0 -1
  358. package/dist/chunk-ANYGZ6O5.js +0 -830
  359. package/dist/chunk-ANYGZ6O5.js.map +0 -1
  360. package/dist/chunk-AQAISI4F.js +0 -183
  361. package/dist/chunk-AQAISI4F.js.map +0 -1
  362. package/dist/chunk-B6MPVOV7.js +0 -328
  363. package/dist/chunk-B6MPVOV7.js.map +0 -1
  364. package/dist/chunk-CILP56G2.js +0 -94
  365. package/dist/chunk-CILP56G2.js.map +0 -1
  366. package/dist/chunk-ERQ52WHY.js +0 -534
  367. package/dist/chunk-ERQ52WHY.js.map +0 -1
  368. package/dist/chunk-FOTUJPM4.js +0 -640
  369. package/dist/chunk-FOTUJPM4.js.map +0 -1
  370. package/dist/chunk-IHCBBLLW.js +0 -198
  371. package/dist/chunk-IHCBBLLW.js.map +0 -1
  372. package/dist/chunk-J4JBQET2.js +0 -76
  373. package/dist/chunk-J4JBQET2.js.map +0 -1
  374. package/dist/chunk-L4OEI4VZ.js +0 -123
  375. package/dist/chunk-L4OEI4VZ.js.map +0 -1
  376. package/dist/chunk-LRV7MWWX.js +0 -616
  377. package/dist/chunk-LRV7MWWX.js.map +0 -1
  378. package/dist/chunk-N43VE355.js +0 -126
  379. package/dist/chunk-N43VE355.js.map +0 -1
  380. package/dist/chunk-PYYLHUV6.js +0 -3
  381. package/dist/chunk-PYYLHUV6.js.map +0 -1
  382. package/dist/chunk-QCTXAMLA.js +0 -261
  383. package/dist/chunk-QCTXAMLA.js.map +0 -1
  384. package/dist/chunk-RIKAPJNG.js +0 -40
  385. package/dist/chunk-RIKAPJNG.js.map +0 -1
  386. package/dist/chunk-U3XT35GZ.js +0 -202
  387. package/dist/chunk-U3XT35GZ.js.map +0 -1
  388. package/dist/chunk-W22WB3WZ.js +0 -148
  389. package/dist/chunk-W22WB3WZ.js.map +0 -1
  390. package/dist/chunk-WTIJMKML.js +0 -27
  391. package/dist/chunk-WTIJMKML.js.map +0 -1
  392. package/dist/chunk-X2CQFJPR.js +0 -75
  393. package/dist/chunk-X2CQFJPR.js.map +0 -1
  394. package/dist/chunk-YYFKLOKO.js +0 -769
  395. package/dist/chunk-YYFKLOKO.js.map +0 -1
  396. package/dist/client-Cs7E_usr.d.ts +0 -113
  397. package/dist/content/index.js.map +0 -1
  398. package/dist/core/index.js.map +0 -1
  399. package/dist/core/react.d.ts +0 -107
  400. package/dist/core/react.js +0 -5
  401. package/dist/core/react.js.map +0 -1
  402. package/dist/coupon-BZSZ0y3n.d.ts +0 -129
  403. package/dist/coupon-CDzL4bJG.d.ts +0 -655
  404. package/dist/crud.factory-DyKaPHcU.d.ts +0 -181
  405. package/dist/finance/index.js.map +0 -1
  406. package/dist/finance-BJdfKRw0.d.ts +0 -135
  407. package/dist/index.js.map +0 -1
  408. package/dist/inventory/index.js.map +0 -1
  409. package/dist/inventory-B5pssqRx.d.ts +0 -748
  410. package/dist/logistics/index.js.map +0 -1
  411. package/dist/logistics-CrpKadKE.d.ts +0 -410
  412. package/dist/media-CNLJK93J.d.ts +0 -721
  413. package/dist/movement-R3CERFAM.js +0 -5
  414. package/dist/movement-R3CERFAM.js.map +0 -1
  415. package/dist/order-B3dCvHgK.d.ts +0 -360
  416. package/dist/payment-BRboLqvU.d.ts +0 -127
  417. package/dist/payments/index.js.map +0 -1
  418. package/dist/platform/index.js.map +0 -1
  419. package/dist/pos-BCqkx2-K.d.ts +0 -527
  420. package/dist/product-p09zXkXB.d.ts +0 -260
  421. package/dist/purchase-54PER2PY.js +0 -5
  422. package/dist/purchase-54PER2PY.js.map +0 -1
  423. package/dist/request-MP6NV5ZE.js +0 -5
  424. package/dist/request-MP6NV5ZE.js.map +0 -1
  425. package/dist/sales/index.js.map +0 -1
  426. package/dist/server.js.map +0 -1
  427. package/dist/size-guide-DgjzjM5P.d.ts +0 -554
  428. package/dist/stock-2LP4HJSB.js +0 -5
  429. package/dist/stock-2LP4HJSB.js.map +0 -1
  430. package/dist/stock-CfrU5_Wr.d.ts +0 -632
  431. package/dist/supplier-BWJTRZ5Z.js +0 -5
  432. package/dist/supplier-BWJTRZ5Z.js.map +0 -1
  433. package/dist/transaction/index.js.map +0 -1
  434. package/dist/transaction-Bf6WjYCh.d.ts +0 -84
  435. package/dist/transaction-dL3WW-er.d.ts +0 -442
  436. package/dist/transfer-4XSS6HWT.js +0 -5
  437. package/dist/transfer-4XSS6HWT.js.map +0 -1
  438. package/dist/user-data-DdLjAGwO.d.ts +0 -132
@@ -1,479 +0,0 @@
1
- import { BaseApi } from './chunk-QCTXAMLA.js';
2
- import { getToastHandler } from './chunk-U3XT35GZ.js';
3
- import { handleApiRequest } from './chunk-IHCBBLLW.js';
4
- import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
-
6
- // src/logistics/api/logistics.ts
7
- var LogisticsApi = class extends BaseApi {
8
- constructor(config = {}) {
9
- super("logistics", config);
10
- }
11
- // ============================================
12
- // CHARGE CALCULATION (Public)
13
- // ============================================
14
- /**
15
- * Calculate delivery charge via provider API (e.g., RedX)
16
- * GET /logistics/charge
17
- *
18
- * Use this to get real-time delivery charges from the logistics provider
19
- * before creating an order.
20
- *
21
- * @param deliveryAreaId - Area internalId from @classytic/bd-areas
22
- * @param amount - COD amount in BDT (use 0 for prepaid orders)
23
- * @param weight - Parcel weight in grams (default: 500g)
24
- *
25
- * @example
26
- * import { searchAreas } from '@classytic/bd-areas';
27
- *
28
- * // 1. User selects area
29
- * const areas = searchAreas('mohamm');
30
- * const selectedArea = areas[0]; // { internalId: 1206, name: 'Mohammadpur', ... }
31
- *
32
- * // 2. Calculate delivery charge
33
- * const { data } = await logisticsApi.calculateCharge({
34
- * deliveryAreaId: selectedArea.internalId,
35
- * amount: isCOD ? cartTotal : 0,
36
- * });
37
- * // { deliveryCharge: 60, codCharge: 15, totalCharge: 75 }
38
- */
39
- async calculateCharge({
40
- deliveryAreaId,
41
- pickupAreaId,
42
- amount,
43
- weight,
44
- provider,
45
- options = {}
46
- }) {
47
- if (!deliveryAreaId || amount === void 0) {
48
- throw new Error("deliveryAreaId and amount are required");
49
- }
50
- const queryString = this.createQueryString({
51
- deliveryAreaId,
52
- pickupAreaId,
53
- amount,
54
- weight,
55
- provider
56
- });
57
- return handleApiRequest("GET", `${this.baseUrl}/charge?${queryString}`, {
58
- cache: "no-store",
59
- ...options
60
- });
61
- }
62
- // ============================================
63
- // CONFIG ENDPOINTS (Admin - Read-only)
64
- // ============================================
65
- /**
66
- * Get logistics configuration (read-only from .env)
67
- * GET /logistics/config
68
- *
69
- * NOTE: Configuration is managed via environment variables.
70
- * To change settings, update .env file and restart server.
71
- */
72
- async getConfig({
73
- token,
74
- options = {}
75
- }) {
76
- return handleApiRequest("GET", `${this.baseUrl}/config`, {
77
- token,
78
- cache: "no-store",
79
- ...options
80
- });
81
- }
82
- // ============================================
83
- // PICKUP STORES (Admin)
84
- // ============================================
85
- /**
86
- * Get pickup stores from RedX API
87
- * GET /logistics/pickup-stores
88
- *
89
- * Pickup stores are created by admin in RedX dashboard.
90
- * Use this to list available pickup locations when creating shipments.
91
- *
92
- * @example
93
- * // Admin: List pickup stores for shipment creation
94
- * const { data: stores } = await logisticsApi.getPickupStores({ token });
95
- *
96
- * // Display in dropdown for admin to select
97
- * stores.forEach(store => {
98
- * console.log(`${store.name} - ${store.areaName} (ID: ${store.id})`);
99
- * });
100
- *
101
- * // Use selected store when creating shipment
102
- * await logisticsApi.createShipment({
103
- * token,
104
- * data: {
105
- * orderId: order._id,
106
- * pickupStoreId: selectedStore.id, // From dropdown
107
- * },
108
- * });
109
- */
110
- async getPickupStores({
111
- token,
112
- provider,
113
- options = {}
114
- }) {
115
- const queryString = provider ? `?provider=${provider}` : "";
116
- return handleApiRequest(
117
- "GET",
118
- `${this.baseUrl}/pickup-stores${queryString}`,
119
- {
120
- token,
121
- cache: "no-store",
122
- ...options
123
- }
124
- );
125
- }
126
- // ============================================
127
- // SHIPPING ENDPOINTS (Admin/Store Manager)
128
- // ============================================
129
- /**
130
- * Request shipping for an order (manual or provider API)
131
- * POST /orders/:id/shipping
132
- *
133
- * This updates the order.shipping object and optionally triggers
134
- * provider API shipment creation when useProviderApi=true.
135
- *
136
- * @example
137
- * // Manual: Record tracking details
138
- * const shipping = await logisticsApi.createShipment({
139
- * token,
140
- * orderId: order._id,
141
- * data: {
142
- * provider: "other",
143
- * trackingNumber: "COURIER123456",
144
- * trackingUrl: "https://courier-website.com/track/COURIER123456",
145
- * },
146
- * });
147
- *
148
- * @example
149
- * // Provider API: Create shipment with pickup store
150
- * const { data: stores } = await logisticsApi.getPickupStores({ token });
151
- * const shipping = await logisticsApi.createShipment({
152
- * token,
153
- * orderId: order._id,
154
- * data: {
155
- * provider: "redx",
156
- * useProviderApi: true,
157
- * pickupStoreId: stores[0].id, // Select pickup location
158
- * weight: 500, // Parcel weight in grams
159
- * instructions: 'Handle with care',
160
- * },
161
- * });
162
- */
163
- async createShipment({
164
- token,
165
- orderId,
166
- data,
167
- options = {}
168
- }) {
169
- if (!orderId) throw new Error("Order ID is required");
170
- const response = await handleApiRequest("POST", `${this.config.basePath}/orders/${orderId}/shipping`, {
171
- token,
172
- body: data,
173
- ...options
174
- });
175
- const normalizedData = response.data && typeof response.data === "object" && "shipping" in response.data ? response.data.shipping : response.data;
176
- return {
177
- success: response.success,
178
- message: response.message,
179
- ...normalizedData ? { data: normalizedData } : {}
180
- };
181
- }
182
- /**
183
- * Get shipping info for an order
184
- * GET /orders/:id/shipping
185
- */
186
- async getShipment({
187
- token,
188
- id,
189
- options = {}
190
- }) {
191
- if (!id) throw new Error("Order ID is required");
192
- return handleApiRequest("GET", `${this.config.basePath}/orders/${id}/shipping`, {
193
- token,
194
- cache: "no-store",
195
- ...options
196
- });
197
- }
198
- /**
199
- * Track shipment (fetch latest from provider)
200
- * GET /logistics/shipments/:id/track
201
- *
202
- * @param id - Order ID or tracking number
203
- */
204
- async trackShipment({
205
- token,
206
- id,
207
- options = {}
208
- }) {
209
- if (!id) throw new Error("Shipment ID or tracking number is required");
210
- return handleApiRequest("GET", `${this.baseUrl}/shipments/${id}/track`, {
211
- token,
212
- cache: "no-store",
213
- ...options
214
- });
215
- }
216
- /**
217
- * Update shipping status for an order
218
- * PATCH /orders/:id/shipping
219
- */
220
- async updateShipmentStatus({
221
- token,
222
- id,
223
- data,
224
- options = {}
225
- }) {
226
- if (!id) throw new Error("Order ID is required");
227
- if (!data?.status) throw new Error("Status is required");
228
- return handleApiRequest("PATCH", `${this.config.basePath}/orders/${id}/shipping`, {
229
- token,
230
- body: data,
231
- ...options
232
- });
233
- }
234
- /**
235
- * Cancel shipment
236
- * POST /logistics/shipments/:id/cancel
237
- *
238
- * @param id - Order ID or tracking number
239
- */
240
- async cancelShipment({
241
- token,
242
- id,
243
- data,
244
- options = {}
245
- }) {
246
- if (!id) throw new Error("Shipment ID or tracking number is required");
247
- return handleApiRequest("POST", `${this.baseUrl}/shipments/${id}/cancel`, {
248
- token,
249
- body: data || {},
250
- ...options
251
- });
252
- }
253
- // ============================================
254
- // HEALTH & MONITORING (Admin)
255
- // ============================================
256
- /**
257
- * Get circuit breaker status for all providers
258
- * GET /logistics/health/circuit-status
259
- */
260
- async getCircuitStatus({
261
- token,
262
- options = {}
263
- }) {
264
- return handleApiRequest("GET", `${this.baseUrl}/health/circuit-status`, {
265
- token,
266
- cache: "no-store",
267
- ...options
268
- });
269
- }
270
- /**
271
- * Reset circuit breaker for a provider
272
- * POST /logistics/health/circuit-reset/:provider
273
- */
274
- async resetProviderCircuit({
275
- token,
276
- provider,
277
- options = {}
278
- }) {
279
- if (!provider) throw new Error("Provider name is required");
280
- return handleApiRequest(
281
- "POST",
282
- `${this.baseUrl}/health/circuit-reset/${provider}`,
283
- {
284
- token,
285
- body: {},
286
- ...options
287
- }
288
- );
289
- }
290
- };
291
- var logisticsApi = new LogisticsApi();
292
- var LOGISTICS_KEYS = {
293
- all: ["logistics"],
294
- pickupStores: (provider) => [...LOGISTICS_KEYS.all, "pickup-stores", provider],
295
- shipment: (id) => [...LOGISTICS_KEYS.all, "shipment", id],
296
- tracking: (id) => [...LOGISTICS_KEYS.all, "tracking", id],
297
- charge: (params) => [...LOGISTICS_KEYS.all, "charge", params],
298
- config: () => [...LOGISTICS_KEYS.all, "config"]
299
- };
300
- function usePickupStores(token, provider, options = {}) {
301
- return useQuery({
302
- queryKey: LOGISTICS_KEYS.pickupStores(provider),
303
- queryFn: async () => {
304
- const response = await logisticsApi.getPickupStores({ token, provider });
305
- return response.data || [];
306
- },
307
- enabled: options.enabled !== false && !!token,
308
- staleTime: options.staleTime ?? 5 * 60 * 1e3
309
- });
310
- }
311
- function useDeliveryChargeCalculation(token, params, options = {}) {
312
- const hasValidParams = !!params?.deliveryAreaId && params?.amount !== void 0;
313
- return useQuery({
314
- queryKey: LOGISTICS_KEYS.charge(
315
- params ? { deliveryAreaId: params.deliveryAreaId, amount: params.amount, weight: params.weight } : { deliveryAreaId: 0, amount: 0 }
316
- ),
317
- queryFn: async () => {
318
- if (!params) throw new Error("Params required");
319
- const response = await logisticsApi.calculateCharge({
320
- deliveryAreaId: params.deliveryAreaId,
321
- pickupAreaId: params.pickupAreaId,
322
- amount: params.amount,
323
- weight: params.weight,
324
- provider: params.provider
325
- });
326
- if (!response.data) throw new Error("No charge data returned");
327
- return response.data;
328
- },
329
- enabled: options.enabled !== false && hasValidParams,
330
- staleTime: options.staleTime ?? 60 * 1e3
331
- });
332
- }
333
- function useDeliveryCharge({
334
- deliveryAreaId,
335
- amount,
336
- weight = 500,
337
- enabled = true
338
- }) {
339
- const { data, isLoading, isFetching, error, refetch } = useQuery({
340
- queryKey: LOGISTICS_KEYS.charge({
341
- deliveryAreaId: deliveryAreaId || 0,
342
- amount,
343
- weight
344
- }),
345
- queryFn: async () => {
346
- if (!deliveryAreaId) return null;
347
- const response = await logisticsApi.calculateCharge({
348
- deliveryAreaId,
349
- amount,
350
- weight
351
- });
352
- return response.data || null;
353
- },
354
- enabled: enabled && !!deliveryAreaId,
355
- staleTime: 5 * 60 * 1e3,
356
- gcTime: 10 * 60 * 1e3,
357
- retry: 1
358
- });
359
- return {
360
- charges: data || null,
361
- deliveryCharge: data?.deliveryCharge ?? 0,
362
- codCharge: data?.codCharge ?? 0,
363
- totalCharge: data?.totalCharge ?? 0,
364
- isLoading,
365
- isFetching,
366
- error,
367
- refetch
368
- };
369
- }
370
- function useShipment(token, orderId, options = {}) {
371
- return useQuery({
372
- queryKey: LOGISTICS_KEYS.shipment(orderId || ""),
373
- queryFn: async () => {
374
- if (!orderId) throw new Error("Order ID required");
375
- const response = await logisticsApi.getShipment({ token, id: orderId });
376
- if (!response.data) throw new Error("Shipping info not found");
377
- return response.data;
378
- },
379
- enabled: options.enabled !== false && !!token && !!orderId,
380
- staleTime: options.staleTime ?? 30 * 1e3
381
- });
382
- }
383
- function useTrackShipment(token, shipmentId, options = {}) {
384
- return useQuery({
385
- queryKey: LOGISTICS_KEYS.tracking(shipmentId || ""),
386
- queryFn: async () => {
387
- if (!shipmentId) throw new Error("Order ID or tracking number required");
388
- const response = await logisticsApi.trackShipment({ token, id: shipmentId });
389
- if (!response.data) throw new Error("Tracking data not found");
390
- return response.data;
391
- },
392
- enabled: options.enabled !== false && !!token && !!shipmentId,
393
- staleTime: options.staleTime ?? 60 * 1e3,
394
- refetchInterval: options.refetchInterval ?? 5 * 60 * 1e3
395
- });
396
- }
397
- function useCreateShipment(token) {
398
- const queryClient = useQueryClient();
399
- const toast = getToastHandler();
400
- return useMutation({
401
- mutationFn: async ({ orderId, data }) => {
402
- const response = await logisticsApi.createShipment({ token, orderId, data });
403
- return response.data;
404
- },
405
- onSuccess: () => {
406
- toast.success("Shipment created successfully");
407
- queryClient.invalidateQueries({ queryKey: ["orders"] });
408
- queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });
409
- },
410
- onError: (error) => {
411
- toast.error(error.message || "Failed to create shipment");
412
- }
413
- });
414
- }
415
- function useCancelShipment(token) {
416
- const queryClient = useQueryClient();
417
- const toast = getToastHandler();
418
- return useMutation({
419
- mutationFn: async ({ shipmentId, reason }) => {
420
- const response = await logisticsApi.cancelShipment({
421
- token,
422
- id: shipmentId,
423
- data: { reason }
424
- });
425
- return response.data;
426
- },
427
- onSuccess: () => {
428
- toast.success("Shipment cancelled");
429
- queryClient.invalidateQueries({ queryKey: ["orders"] });
430
- queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });
431
- },
432
- onError: (error) => {
433
- toast.error(error.message || "Failed to cancel shipment");
434
- }
435
- });
436
- }
437
- function useUpdateShipmentStatus(token) {
438
- const queryClient = useQueryClient();
439
- const toast = getToastHandler();
440
- return useMutation({
441
- mutationFn: async ({
442
- shipmentId,
443
- data
444
- }) => {
445
- const response = await logisticsApi.updateShipmentStatus({
446
- token,
447
- id: shipmentId,
448
- data
449
- });
450
- return response.data;
451
- },
452
- onSuccess: () => {
453
- toast.success("Shipment status updated");
454
- queryClient.invalidateQueries({ queryKey: ["orders"] });
455
- queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });
456
- },
457
- onError: (error) => {
458
- toast.error(error.message || "Failed to update status");
459
- }
460
- });
461
- }
462
- function useLogisticsActions(token) {
463
- const createShipmentMutation = useCreateShipment(token);
464
- const cancelShipmentMutation = useCancelShipment(token);
465
- const updateStatusMutation = useUpdateShipmentStatus(token);
466
- return {
467
- createShipment: createShipmentMutation.mutateAsync,
468
- isCreatingShipment: createShipmentMutation.isPending,
469
- cancelShipment: cancelShipmentMutation.mutateAsync,
470
- isCancellingShipment: cancelShipmentMutation.isPending,
471
- updateShipmentStatus: updateStatusMutation.mutateAsync,
472
- isUpdatingStatus: updateStatusMutation.isPending,
473
- isLoading: createShipmentMutation.isPending || cancelShipmentMutation.isPending || updateStatusMutation.isPending
474
- };
475
- }
476
-
477
- export { LOGISTICS_KEYS, LogisticsApi, logisticsApi, useCancelShipment, useCreateShipment, useDeliveryCharge, useDeliveryChargeCalculation, useLogisticsActions, usePickupStores, useShipment, useTrackShipment, useUpdateShipmentStatus };
478
- //# sourceMappingURL=chunk-2YAZ5WG6.js.map
479
- //# sourceMappingURL=chunk-2YAZ5WG6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/logistics/api/logistics.ts","../src/logistics/hooks/logistics.ts"],"names":[],"mappings":"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","file":"chunk-2YAZ5WG6.js","sourcesContent":["// @/logistics/api/logistics.ts\r\nimport { BaseApi, type RequestOptions, type ApiResponse } from \"../../core/api-factory\";\nimport { handleApiRequest } from \"../../core/api-handler\";\nimport type {\n TrackingResult,\n PickupStore,\n LogisticsConfig,\n ProviderCharges,\n CreateShipmentPayload,\n UpdateShipmentStatusPayload,\n CancelShipmentPayload,\n ProviderName,\n CancelShipmentResult,\n} from \"../types/logistics\";\nimport type { OrderShipping } from \"../../sales/types/order\";\n\r\n// ==================== Request Options ====================\r\n\r\ntype FetchOptions = Omit<RequestOptions, 'token' | 'organizationId'>;\r\n\r\n// ==================== Logistics API ====================\r\n\r\n/**\r\n * Logistics API\n *\n * Manages logistics utilities and delivery charge calculation.\n *\r\n * NOTE: For area data (divisions, districts, areas), use @classytic/bd-areas directly:\r\n * ```typescript\r\n * import { searchAreas, getAreasByDistrict, getArea } from '@classytic/bd-areas';\r\n * ```\r\n *\r\n * Public Endpoints:\r\n * - GET /logistics/charge - Calculate delivery charge via provider (RedX)\r\n *\r\n * Shipping Endpoints (Admin/Store Manager):\n * - POST /orders/:id/shipping - Request shipping (manual or provider API)\n * - PATCH /orders/:id/shipping - Update shipping status\n * - GET /orders/:id/shipping - Get shipping info\n * - GET /logistics/shipments/:id/track - Track shipment\n * - POST /logistics/shipments/:id/cancel - Cancel shipment\n *\r\n * Admin Endpoints:\r\n * - GET /logistics/config - Get config (read-only)\r\n * - GET /logistics/pickup-stores - List pickup stores\r\n * - GET /logistics/health/circuit-status - Get circuit breaker status\r\n * - POST /logistics/health/circuit-reset/:provider - Reset circuit breaker\r\n */\r\nclass LogisticsApi extends BaseApi<OrderShipping, CreateShipmentPayload> {\n constructor(config = {}) {\r\n super('logistics', config);\r\n }\r\n\r\n // ============================================\r\n // CHARGE CALCULATION (Public)\r\n // ============================================\r\n\r\n /**\r\n * Calculate delivery charge via provider API (e.g., RedX)\r\n * GET /logistics/charge\r\n *\r\n * Use this to get real-time delivery charges from the logistics provider\r\n * before creating an order.\r\n *\r\n * @param deliveryAreaId - Area internalId from @classytic/bd-areas\r\n * @param amount - COD amount in BDT (use 0 for prepaid orders)\r\n * @param weight - Parcel weight in grams (default: 500g)\r\n *\r\n * @example\r\n * import { searchAreas } from '@classytic/bd-areas';\r\n *\r\n * // 1. User selects area\r\n * const areas = searchAreas('mohamm');\r\n * const selectedArea = areas[0]; // { internalId: 1206, name: 'Mohammadpur', ... }\r\n *\r\n * // 2. Calculate delivery charge\r\n * const { data } = await logisticsApi.calculateCharge({\r\n * deliveryAreaId: selectedArea.internalId,\r\n * amount: isCOD ? cartTotal : 0,\r\n * });\r\n * // { deliveryCharge: 60, codCharge: 15, totalCharge: 75 }\r\n */\r\n async calculateCharge({\r\n deliveryAreaId,\r\n pickupAreaId,\r\n amount,\r\n weight,\r\n provider,\r\n options = {},\r\n }: {\r\n deliveryAreaId: number;\r\n pickupAreaId?: number;\r\n amount: number;\r\n weight?: number;\r\n provider?: ProviderName;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<ProviderCharges>> {\r\n if (!deliveryAreaId || amount === undefined) {\r\n throw new Error(\"deliveryAreaId and amount are required\");\r\n }\r\n\r\n const queryString = this.createQueryString({\r\n deliveryAreaId,\r\n pickupAreaId,\r\n amount,\r\n weight,\r\n provider,\r\n });\r\n\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/charge?${queryString}`, {\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n // ============================================\r\n // CONFIG ENDPOINTS (Admin - Read-only)\r\n // ============================================\r\n\r\n /**\r\n * Get logistics configuration (read-only from .env)\r\n * GET /logistics/config\r\n *\r\n * NOTE: Configuration is managed via environment variables.\r\n * To change settings, update .env file and restart server.\r\n */\r\n async getConfig({\r\n token,\r\n options = {},\r\n }: {\r\n token: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<LogisticsConfig>> {\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/config`, {\r\n token,\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n // ============================================\r\n // PICKUP STORES (Admin)\r\n // ============================================\r\n\r\n /**\r\n * Get pickup stores from RedX API\r\n * GET /logistics/pickup-stores\r\n *\r\n * Pickup stores are created by admin in RedX dashboard.\r\n * Use this to list available pickup locations when creating shipments.\r\n *\r\n * @example\r\n * // Admin: List pickup stores for shipment creation\r\n * const { data: stores } = await logisticsApi.getPickupStores({ token });\r\n *\r\n * // Display in dropdown for admin to select\r\n * stores.forEach(store => {\r\n * console.log(`${store.name} - ${store.areaName} (ID: ${store.id})`);\r\n * });\r\n *\r\n * // Use selected store when creating shipment\r\n * await logisticsApi.createShipment({\r\n * token,\r\n * data: {\r\n * orderId: order._id,\r\n * pickupStoreId: selectedStore.id, // From dropdown\r\n * },\r\n * });\r\n */\r\n async getPickupStores({\r\n token,\r\n provider,\r\n options = {},\r\n }: {\r\n token: string;\r\n provider?: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<PickupStore[]>> {\r\n const queryString = provider ? `?provider=${provider}` : '';\r\n return handleApiRequest(\r\n \"GET\",\r\n `${this.baseUrl}/pickup-stores${queryString}`,\r\n {\r\n token,\r\n cache: \"no-store\",\r\n ...options,\r\n }\r\n );\r\n }\r\n\r\n // ============================================\n // SHIPPING ENDPOINTS (Admin/Store Manager)\n // ============================================\n\n /**\n * Request shipping for an order (manual or provider API)\n * POST /orders/:id/shipping\n *\n * This updates the order.shipping object and optionally triggers\n * provider API shipment creation when useProviderApi=true.\n *\n * @example\n * // Manual: Record tracking details\n * const shipping = await logisticsApi.createShipment({\n * token,\n * orderId: order._id,\n * data: {\n * provider: \"other\",\n * trackingNumber: \"COURIER123456\",\n * trackingUrl: \"https://courier-website.com/track/COURIER123456\",\n * },\n * });\n *\n * @example\n * // Provider API: Create shipment with pickup store\n * const { data: stores } = await logisticsApi.getPickupStores({ token });\n * const shipping = await logisticsApi.createShipment({\n * token,\n * orderId: order._id,\n * data: {\n * provider: \"redx\",\n * useProviderApi: true,\n * pickupStoreId: stores[0].id, // Select pickup location\n * weight: 500, // Parcel weight in grams\n * instructions: 'Handle with care',\n * },\n * });\n */\n async createShipment({\n token,\n orderId,\n data,\n options = {},\n }: {\n token: string;\n orderId: string;\n data: CreateShipmentPayload;\n options?: FetchOptions;\n }): Promise<ApiResponse<OrderShipping>> {\n if (!orderId) throw new Error(\"Order ID is required\");\n\n const response = await handleApiRequest<\n ApiResponse<OrderShipping> | ApiResponse<{ shipping: OrderShipping }>\n >(\"POST\", `${this.config.basePath}/orders/${orderId}/shipping`, {\n token,\n body: data,\n ...options,\n });\n\n const normalizedData =\n response.data && typeof response.data === \"object\" && \"shipping\" in response.data\n ? (response.data as { shipping: OrderShipping }).shipping\n : response.data;\n\n return {\n success: response.success,\n message: response.message,\n ...(normalizedData ? { data: normalizedData as OrderShipping } : {}),\n };\n }\n\n /**\n * Get shipping info for an order\n * GET /orders/:id/shipping\n */\n async getShipment({\n token,\n id,\n options = {},\n }: {\n token: string;\n id: string;\n options?: FetchOptions;\n }): Promise<ApiResponse<OrderShipping | null>> {\n if (!id) throw new Error(\"Order ID is required\");\n\n return handleApiRequest(\"GET\", `${this.config.basePath}/orders/${id}/shipping`, {\n token,\n cache: \"no-store\",\n ...options,\n });\n }\n\r\n /**\n * Track shipment (fetch latest from provider)\n * GET /logistics/shipments/:id/track\n *\n * @param id - Order ID or tracking number\n */\n async trackShipment({\n token,\n id,\n options = {},\n }: {\n token: string;\n id: string;\n options?: FetchOptions;\n }): Promise<ApiResponse<TrackingResult>> {\n if (!id) throw new Error(\"Shipment ID or tracking number is required\");\n\n return handleApiRequest(\"GET\", `${this.baseUrl}/shipments/${id}/track`, {\n token,\n cache: \"no-store\",\n ...options,\n });\r\n }\r\n\r\n /**\n * Update shipping status for an order\n * PATCH /orders/:id/shipping\n */\n async updateShipmentStatus({\n token,\n id,\n data,\n options = {},\n }: {\n token: string;\n id: string;\n data: UpdateShipmentStatusPayload;\n options?: FetchOptions;\n }): Promise<ApiResponse<OrderShipping>> {\n if (!id) throw new Error(\"Order ID is required\");\n if (!data?.status) throw new Error(\"Status is required\");\n\n return handleApiRequest(\"PATCH\", `${this.config.basePath}/orders/${id}/shipping`, {\n token,\n body: data,\n ...options,\n });\n }\n\r\n /**\n * Cancel shipment\n * POST /logistics/shipments/:id/cancel\n *\n * @param id - Order ID or tracking number\n */\n async cancelShipment({\n token,\n id,\n data,\n options = {},\n }: {\n token: string;\n id: string;\n data?: CancelShipmentPayload;\n options?: FetchOptions;\n }): Promise<ApiResponse<CancelShipmentResult>> {\n if (!id) throw new Error(\"Shipment ID or tracking number is required\");\n\n return handleApiRequest(\"POST\", `${this.baseUrl}/shipments/${id}/cancel`, {\n token,\n body: data || {},\r\n ...options,\r\n });\r\n }\r\n\r\n // ============================================\r\n // HEALTH & MONITORING (Admin)\r\n // ============================================\r\n\r\n /**\r\n * Get circuit breaker status for all providers\r\n * GET /logistics/health/circuit-status\r\n */\r\n async getCircuitStatus({\r\n token,\r\n options = {},\r\n }: {\r\n token: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Record<string, { state: string; failureCount: number }>>> {\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/health/circuit-status`, {\r\n token,\r\n cache: \"no-store\",\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Reset circuit breaker for a provider\r\n * POST /logistics/health/circuit-reset/:provider\r\n */\r\n async resetProviderCircuit({\r\n token,\r\n provider,\r\n options = {},\r\n }: {\r\n token: string;\r\n provider: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<{ message: string }>> {\r\n if (!provider) throw new Error(\"Provider name is required\");\r\n\r\n return handleApiRequest(\r\n \"POST\",\r\n `${this.baseUrl}/health/circuit-reset/${provider}`,\r\n {\r\n token,\r\n body: {},\r\n ...options,\r\n }\r\n );\r\n }\r\n}\r\n\r\n// Create and export singleton instance\r\nexport const logisticsApi = new LogisticsApi();\r\n\r\n// Export class for custom configurations\r\nexport { LogisticsApi };\r\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { logisticsApi } from \"../api/logistics\";\nimport { getToastHandler } from \"../../core/react/mutation.factory\";\nimport type {\n PickupStore,\n TrackingResult,\n CreateShipmentPayload,\n ProviderCharges,\n ProviderName,\n CancelShipmentResult,\n} from \"../types/logistics\";\nimport type { OrderShipping, ShippingStatus } from \"../../sales/types/order\";\n\n// ============================================\n// Query Keys\n// ============================================\n\nexport const LOGISTICS_KEYS = {\n all: [\"logistics\"] as const,\n pickupStores: (provider?: string) => [...LOGISTICS_KEYS.all, \"pickup-stores\", provider] as const,\n shipment: (id: string) => [...LOGISTICS_KEYS.all, \"shipment\", id] as const,\n tracking: (id: string) => [...LOGISTICS_KEYS.all, \"tracking\", id] as const,\n charge: (params: { deliveryAreaId: number; amount: number; weight?: number }) =>\n [...LOGISTICS_KEYS.all, \"charge\", params] as const,\n config: () => [...LOGISTICS_KEYS.all, \"config\"] as const,\n};\n\n// ============================================\n// Types\n// ============================================\n\ninterface QueryOptions {\n enabled?: boolean;\n staleTime?: number;\n refetchInterval?: number | false;\n}\n\ninterface ChargeParams {\n deliveryAreaId: number;\n pickupAreaId?: number;\n amount: number;\n weight?: number;\n provider?: ProviderName;\n}\n\ninterface UseDeliveryChargeParams {\n deliveryAreaId: number | null | undefined;\n amount: number;\n weight?: number;\n enabled?: boolean;\n}\n\nexport interface UseDeliveryChargeReturn {\n charges: ProviderCharges | null;\n deliveryCharge: number;\n codCharge: number;\n totalCharge: number;\n isLoading: boolean;\n isFetching: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\nexport interface UseLogisticsActionsReturn {\n createShipment: (params: { orderId: string; data: CreateShipmentPayload }) => Promise<OrderShipping | undefined>;\n isCreatingShipment: boolean;\n cancelShipment: (params: { shipmentId: string; reason?: string }) => Promise<CancelShipmentResult | undefined>;\n isCancellingShipment: boolean;\n updateShipmentStatus: (params: { shipmentId: string; data: UpdateShipmentStatusParams }) => Promise<OrderShipping | undefined>;\n isUpdatingStatus: boolean;\n isLoading: boolean;\n}\n\ninterface UpdateShipmentStatusParams {\n status: ShippingStatus | string;\n note?: string;\n metadata?: Record<string, unknown>;\n}\n\n// ============================================\n// Query Hooks\n// ============================================\n\n/**\n * Fetch pickup stores from logistics provider\n *\n * @param token - Auth token (admin required)\n * @param provider - Optional provider filter\n * @param options - Query options\n *\n * @example\n * ```tsx\n * function PickupStoreSelect() {\n * const { data: stores, isLoading } = usePickupStores(token);\n *\n * return (\n * <Select>\n * {stores?.map(store => (\n * <SelectItem key={store.id} value={store.id.toString()}>\n * {store.name} - {store.areaName}\n * </SelectItem>\n * ))}\n * </Select>\n * );\n * }\n * ```\n */\nexport function usePickupStores(\n token: string,\n provider?: string,\n options: QueryOptions = {}\n) {\n return useQuery({\n queryKey: LOGISTICS_KEYS.pickupStores(provider),\n queryFn: async (): Promise<PickupStore[]> => {\n const response = await logisticsApi.getPickupStores({ token, provider });\n return response.data || [];\n },\n enabled: options.enabled !== false && !!token,\n staleTime: options.staleTime ?? 5 * 60 * 1000,\n });\n}\n\n/**\n * Calculate delivery charge via provider API\n *\n * @param token - Auth token (optional for public)\n * @param params - Charge calculation parameters\n * @param options - Query options\n *\n * @example\n * ```tsx\n * const { data: charges } = useDeliveryChargeCalculation(token, {\n * deliveryAreaId: 1206,\n * amount: isCOD ? cartTotal : 0,\n * });\n * ```\n */\nexport function useDeliveryChargeCalculation(\n token: string | null,\n params: ChargeParams | null,\n options: QueryOptions = {}\n) {\n const hasValidParams = !!params?.deliveryAreaId && params?.amount !== undefined;\n\n return useQuery({\n queryKey: LOGISTICS_KEYS.charge(\n params\n ? { deliveryAreaId: params.deliveryAreaId, amount: params.amount, weight: params.weight }\n : { deliveryAreaId: 0, amount: 0 }\n ),\n queryFn: async (): Promise<ProviderCharges> => {\n if (!params) throw new Error(\"Params required\");\n const response = await logisticsApi.calculateCharge({\n deliveryAreaId: params.deliveryAreaId,\n pickupAreaId: params.pickupAreaId,\n amount: params.amount,\n weight: params.weight,\n provider: params.provider,\n });\n if (!response.data) throw new Error(\"No charge data returned\");\n return response.data;\n },\n enabled: options.enabled !== false && hasValidParams,\n staleTime: options.staleTime ?? 60 * 1000,\n });\n}\n\n/**\n * Convenience hook for delivery charge with extracted values\n *\n * @param params - Delivery charge parameters\n *\n * @example\n * ```tsx\n * function CheckoutDelivery({ areaId, subtotal, isCOD }) {\n * const { deliveryCharge, isLoading } = useDeliveryCharge({\n * deliveryAreaId: areaId,\n * amount: isCOD ? subtotal : 0,\n * });\n *\n * return (\n * <p>Delivery: {isLoading ? \"...\" : `৳${deliveryCharge}`}</p>\n * );\n * }\n * ```\n */\nexport function useDeliveryCharge({\n deliveryAreaId,\n amount,\n weight = 500,\n enabled = true,\n}: UseDeliveryChargeParams): UseDeliveryChargeReturn {\n const { data, isLoading, isFetching, error, refetch } = useQuery<ProviderCharges | null>({\n queryKey: LOGISTICS_KEYS.charge({\n deliveryAreaId: deliveryAreaId || 0,\n amount,\n weight,\n }),\n queryFn: async () => {\n if (!deliveryAreaId) return null;\n\n const response = await logisticsApi.calculateCharge({\n deliveryAreaId,\n amount,\n weight,\n });\n\n return response.data || null;\n },\n enabled: enabled && !!deliveryAreaId,\n staleTime: 5 * 60 * 1000,\n gcTime: 10 * 60 * 1000,\n retry: 1,\n });\n\n return {\n charges: data || null,\n deliveryCharge: data?.deliveryCharge ?? 0,\n codCharge: data?.codCharge ?? 0,\n totalCharge: data?.totalCharge ?? 0,\n isLoading,\n isFetching,\n error: error as Error | null,\n refetch,\n };\n}\n\n/**\n * Get shipping info by order ID\n *\n * @param token - Auth token\n * @param orderId - Order ID\n * @param options - Query options\n */\nexport function useShipment(\n token: string,\n orderId: string | null,\n options: QueryOptions = {}\n) {\n return useQuery({\n queryKey: LOGISTICS_KEYS.shipment(orderId || \"\"),\n queryFn: async (): Promise<OrderShipping> => {\n if (!orderId) throw new Error(\"Order ID required\");\n const response = await logisticsApi.getShipment({ token, id: orderId });\n if (!response.data) throw new Error(\"Shipping info not found\");\n return response.data;\n },\n enabled: options.enabled !== false && !!token && !!orderId,\n staleTime: options.staleTime ?? 30 * 1000,\n });\n}\n\n/**\n * Track shipment - fetches latest status from provider\n *\n * @param token - Auth token\n * @param shipmentId - Order ID or tracking number\n * @param options - Query options (supports refetchInterval for auto-refresh)\n *\n * @example\n * ```tsx\n * function ShipmentTracker({ shipmentId }) {\n * const { data, isLoading } = useTrackShipment(token, shipmentId, {\n * refetchInterval: 5 * 60 * 1000, // Auto-refresh every 5 minutes\n * });\n *\n * return (\n * <Timeline events={data?.tracking?.timeline || []} />\n * );\n * }\n * ```\n */\nexport function useTrackShipment(\n token: string,\n shipmentId: string | null,\n options: QueryOptions = {}\n) {\n return useQuery({\n queryKey: LOGISTICS_KEYS.tracking(shipmentId || \"\"),\n queryFn: async (): Promise<TrackingResult> => {\n if (!shipmentId) throw new Error(\"Order ID or tracking number required\");\n const response = await logisticsApi.trackShipment({ token, id: shipmentId });\n if (!response.data) throw new Error(\"Tracking data not found\");\n return response.data;\n },\n enabled: options.enabled !== false && !!token && !!shipmentId,\n staleTime: options.staleTime ?? 60 * 1000,\n refetchInterval: options.refetchInterval ?? 5 * 60 * 1000,\n });\n}\n\n// ============================================\n// Mutation Hooks\n// ============================================\n\n/**\n * Create shipment mutation\n *\n * @param token - Auth token\n *\n * @example\n * ```tsx\n * function CreateShipmentButton({ order }) {\n * const { mutate, isPending } = useCreateShipment(token);\n *\n * return (\n * <Button\n * onClick={() =>\n * mutate({\n * orderId: order._id,\n * data: { provider: \"redx\", useProviderApi: true },\n * })\n * }\n * disabled={isPending}\n * >\n * Create Shipment\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCreateShipment(token: string) {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n return useMutation({\n mutationFn: async ({ orderId, data }: { orderId: string; data: CreateShipmentPayload }) => {\n const response = await logisticsApi.createShipment({ token, orderId, data });\n return response.data;\n },\n onSuccess: () => {\n toast.success(\"Shipment created successfully\");\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to create shipment\");\n },\n });\n}\n\n/**\n * Cancel shipment mutation\n *\n * @param token - Auth token\n */\nexport function useCancelShipment(token: string) {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n return useMutation({\n mutationFn: async ({ shipmentId, reason }: { shipmentId: string; reason?: string }) => {\n const response = await logisticsApi.cancelShipment({\n token,\n id: shipmentId,\n data: { reason },\n });\n return response.data;\n },\n onSuccess: () => {\n toast.success(\"Shipment cancelled\");\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to cancel shipment\");\n },\n });\n}\n\n/**\n * Update shipment status mutation\n *\n * @param token - Auth token\n */\nexport function useUpdateShipmentStatus(token: string) {\n const queryClient = useQueryClient();\n const toast = getToastHandler();\n\n return useMutation({\n mutationFn: async ({\n shipmentId,\n data,\n }: {\n shipmentId: string;\n data: UpdateShipmentStatusParams;\n }) => {\n const response = await logisticsApi.updateShipmentStatus({\n token,\n id: shipmentId,\n data,\n });\n return response.data;\n },\n onSuccess: () => {\n toast.success(\"Shipment status updated\");\n queryClient.invalidateQueries({ queryKey: [\"orders\"] });\n queryClient.invalidateQueries({ queryKey: LOGISTICS_KEYS.all });\n },\n onError: (error: Error) => {\n toast.error(error.message || \"Failed to update status\");\n },\n });\n}\n\n/**\n * Combined hook for all logistics mutations\n *\n * @param token - Auth token\n *\n * @example\n * ```tsx\n * function ShipmentActions({ order }) {\n * const {\n * createShipment,\n * cancelShipment,\n * isLoading,\n * } = useLogisticsActions(token);\n *\n * return (\n * <>\n * <Button\n * onClick={() =>\n * createShipment({\n * orderId: order._id,\n * data: { provider: \"redx\", useProviderApi: true },\n * })\n * }\n * >\n * Create Shipment\n * </Button>\n * <Button onClick={() => cancelShipment({ shipmentId: order._id })}>\n * Cancel\n * </Button>\n * </>\n * );\n * }\n * ```\n */\nexport function useLogisticsActions(token: string): UseLogisticsActionsReturn {\n const createShipmentMutation = useCreateShipment(token);\n const cancelShipmentMutation = useCancelShipment(token);\n const updateStatusMutation = useUpdateShipmentStatus(token);\n\n return {\n createShipment: createShipmentMutation.mutateAsync,\n isCreatingShipment: createShipmentMutation.isPending,\n cancelShipment: cancelShipmentMutation.mutateAsync,\n isCancellingShipment: cancelShipmentMutation.isPending,\n updateShipmentStatus: updateStatusMutation.mutateAsync,\n isUpdatingStatus: updateStatusMutation.isPending,\n isLoading:\n createShipmentMutation.isPending ||\n cancelShipmentMutation.isPending ||\n updateStatusMutation.isPending,\n };\n}\n"]}