@yoryoboy/bi-mcp 1.11.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +4 -5
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/index.js +426 -6
  4. package/dist/index.js.map +2 -2
  5. package/dist/mcp-use.json +2 -2
  6. package/dist/src/config/__tests__/meta.test.js +35 -0
  7. package/dist/src/config/__tests__/meta.test.js.map +7 -0
  8. package/dist/src/config/meta-store.js +109 -0
  9. package/dist/src/config/meta-store.js.map +7 -0
  10. package/dist/src/config/meta.js +0 -2
  11. package/dist/src/config/meta.js.map +2 -2
  12. package/dist/src/meta/__tests__/meta-utils.test.js +155 -0
  13. package/dist/src/meta/__tests__/meta-utils.test.js.map +7 -0
  14. package/dist/src/services/mercadolibre/__tests__/mercadolibre-api.test.js +265 -0
  15. package/dist/src/services/mercadolibre/__tests__/mercadolibre-api.test.js.map +7 -0
  16. package/dist/src/services/mercadolibre/__tests__/mercadolibre-items.test.js +311 -0
  17. package/dist/src/services/mercadolibre/__tests__/mercadolibre-items.test.js.map +7 -0
  18. package/dist/src/services/mercadolibre/__tests__/mercadolibre-orders.test.js +220 -0
  19. package/dist/src/services/mercadolibre/__tests__/mercadolibre-orders.test.js.map +7 -0
  20. package/dist/src/services/meta/__tests__/meta-ads.test.js +126 -0
  21. package/dist/src/services/meta/__tests__/meta-ads.test.js.map +7 -0
  22. package/dist/src/services/meta/__tests__/meta-api.test.js +70 -0
  23. package/dist/src/services/meta/__tests__/meta-api.test.js.map +7 -0
  24. package/dist/src/services/meta/meta-ads.js +94 -40
  25. package/dist/src/services/meta/meta-ads.js.map +2 -2
  26. package/dist/src/services/meta/meta-api.js +8 -6
  27. package/dist/src/services/meta/meta-api.js.map +2 -2
  28. package/dist/src/services/vtex/__tests__/vtex-catalog-write-batch.test.js +165 -0
  29. package/dist/src/services/vtex/__tests__/vtex-catalog-write-batch.test.js.map +7 -0
  30. package/dist/src/services/vtex/__tests__/vtex-catalog-write-eans.test.js +92 -0
  31. package/dist/src/services/vtex/__tests__/vtex-catalog-write-eans.test.js.map +7 -0
  32. package/dist/src/services/vtex/__tests__/vtex-catalog-write-products.test.js +41 -0
  33. package/dist/src/services/vtex/__tests__/vtex-catalog-write-products.test.js.map +7 -0
  34. package/dist/src/services/vtex/__tests__/vtex-catalog.test.js +80 -0
  35. package/dist/src/services/vtex/__tests__/vtex-catalog.test.js.map +7 -0
  36. package/dist/src/services/vtex/__tests__/vtex-orders-write-http.test.js +85 -0
  37. package/dist/src/services/vtex/__tests__/vtex-orders-write-http.test.js.map +7 -0
  38. package/dist/src/services/vtex/__tests__/vtex-orders-write-state-validation.test.js +251 -0
  39. package/dist/src/services/vtex/__tests__/vtex-orders-write-state-validation.test.js.map +7 -0
  40. package/dist/src/services/vtex/__tests__/vtex-payments.test.js +95 -0
  41. package/dist/src/services/vtex/__tests__/vtex-payments.test.js.map +7 -0
  42. package/dist/src/services/vtex/__tests__/vtex-write.test.js +111 -0
  43. package/dist/src/services/vtex/__tests__/vtex-write.test.js.map +7 -0
  44. package/dist/src/services/vtex/vtex-catalog-write.js +194 -1
  45. package/dist/src/services/vtex/vtex-catalog-write.js.map +2 -2
  46. package/dist/src/services/vtex/vtex-catalog.js +118 -1
  47. package/dist/src/services/vtex/vtex-catalog.js.map +2 -2
  48. package/dist/src/services/vtex/vtex-payments-write.js +64 -0
  49. package/dist/src/services/vtex/vtex-payments-write.js.map +7 -0
  50. package/dist/src/services/vtex/vtex-payments.js +43 -0
  51. package/dist/src/services/vtex/vtex-payments.js.map +7 -0
  52. package/dist/src/services/vtex/vtex-pricing-write.js +5 -0
  53. package/dist/src/services/vtex/vtex-pricing-write.js.map +2 -2
  54. package/dist/src/services/vtex/vtex-write.js +67 -1
  55. package/dist/src/services/vtex/vtex-write.js.map +2 -2
  56. package/dist/src/tools/config/list-profiles.js +37 -6
  57. package/dist/src/tools/config/list-profiles.js.map +2 -2
  58. package/dist/src/tools/index.js.map +2 -2
  59. package/dist/src/tools/mercadolibre/__tests__/helpers.test.js +37 -0
  60. package/dist/src/tools/mercadolibre/__tests__/helpers.test.js.map +7 -0
  61. package/dist/src/tools/mercadolibre/__tests__/profile-resolution.test.js +30 -0
  62. package/dist/src/tools/mercadolibre/__tests__/profile-resolution.test.js.map +7 -0
  63. package/dist/src/tools/mercadolibre/profile-resolution.js +4 -50
  64. package/dist/src/tools/mercadolibre/profile-resolution.js.map +2 -2
  65. package/dist/src/tools/meta/__tests__/pagination.test.js +133 -0
  66. package/dist/src/tools/meta/__tests__/pagination.test.js.map +7 -0
  67. package/dist/src/tools/meta/__tests__/profile-access.test.js +262 -0
  68. package/dist/src/tools/meta/__tests__/profile-access.test.js.map +7 -0
  69. package/dist/src/tools/meta/__tests__/read-tools.test.js +722 -0
  70. package/dist/src/tools/meta/__tests__/read-tools.test.js.map +7 -0
  71. package/dist/src/tools/meta/__tests__/schemas.test.js +103 -0
  72. package/dist/src/tools/meta/__tests__/schemas.test.js.map +7 -0
  73. package/dist/src/tools/meta/account-overview.js +37 -19
  74. package/dist/src/tools/meta/account-overview.js.map +2 -2
  75. package/dist/src/tools/meta/ad-account-info.js +31 -6
  76. package/dist/src/tools/meta/ad-account-info.js.map +2 -2
  77. package/dist/src/tools/meta/ads-performance.js +35 -21
  78. package/dist/src/tools/meta/ads-performance.js.map +2 -2
  79. package/dist/src/tools/meta/campaign-performance.js +35 -18
  80. package/dist/src/tools/meta/campaign-performance.js.map +2 -2
  81. package/dist/src/tools/meta/list-accessible-ad-accounts.js +39 -10
  82. package/dist/src/tools/meta/list-accessible-ad-accounts.js.map +2 -2
  83. package/dist/src/tools/meta/list-accessible-businesses.js +37 -13
  84. package/dist/src/tools/meta/list-accessible-businesses.js.map +2 -2
  85. package/dist/src/tools/meta/placement-mix.js +37 -22
  86. package/dist/src/tools/meta/placement-mix.js.map +2 -2
  87. package/dist/src/tools/meta/profile-access.js +215 -0
  88. package/dist/src/tools/meta/profile-access.js.map +7 -0
  89. package/dist/src/tools/meta/schema-helpers.js +19 -0
  90. package/dist/src/tools/meta/schema-helpers.js.map +7 -0
  91. package/dist/src/tools/meta/time-series.js +40 -23
  92. package/dist/src/tools/meta/time-series.js.map +2 -2
  93. package/dist/src/tools/vtex/__tests__/catalog-admin-batch.test.js +233 -0
  94. package/dist/src/tools/vtex/__tests__/catalog-admin-batch.test.js.map +7 -0
  95. package/dist/src/tools/vtex/__tests__/catalog-admin-categories.test.js +649 -0
  96. package/dist/src/tools/vtex/__tests__/catalog-admin-categories.test.js.map +7 -0
  97. package/dist/src/tools/vtex/__tests__/catalog-admin-product-specifications.test.js +339 -0
  98. package/dist/src/tools/vtex/__tests__/catalog-admin-product-specifications.test.js.map +7 -0
  99. package/dist/src/tools/vtex/__tests__/catalog-admin-products-skus.test.js +235 -0
  100. package/dist/src/tools/vtex/__tests__/catalog-admin-products-skus.test.js.map +7 -0
  101. package/dist/src/tools/vtex/__tests__/catalog-navigation-reads.test.js +372 -0
  102. package/dist/src/tools/vtex/__tests__/catalog-navigation-reads.test.js.map +7 -0
  103. package/dist/src/tools/vtex/__tests__/catalog-navigation-surface.test.js +57 -0
  104. package/dist/src/tools/vtex/__tests__/catalog-navigation-surface.test.js.map +7 -0
  105. package/dist/src/tools/vtex/__tests__/commercial-condition-references.test.js +14 -0
  106. package/dist/src/tools/vtex/__tests__/commercial-condition-references.test.js.map +7 -0
  107. package/dist/src/tools/vtex/__tests__/commercial-conditions.test.js +276 -0
  108. package/dist/src/tools/vtex/__tests__/commercial-conditions.test.js.map +7 -0
  109. package/dist/src/tools/vtex/__tests__/payment-rules.test.js +253 -0
  110. package/dist/src/tools/vtex/__tests__/payment-rules.test.js.map +7 -0
  111. package/dist/src/tools/vtex/__tests__/write-helpers.test.js +97 -0
  112. package/dist/src/tools/vtex/__tests__/write-helpers.test.js.map +7 -0
  113. package/dist/src/tools/vtex/activate-sku.js +1 -48
  114. package/dist/src/tools/vtex/activate-sku.js.map +2 -2
  115. package/dist/src/tools/vtex/associate-specification.js +3 -54
  116. package/dist/src/tools/vtex/associate-specification.js.map +2 -2
  117. package/dist/src/tools/vtex/attach-catalog-image.js +3 -57
  118. package/dist/src/tools/vtex/attach-catalog-image.js.map +2 -2
  119. package/dist/src/tools/vtex/catalog-admin-batch.js +298 -0
  120. package/dist/src/tools/vtex/catalog-admin-batch.js.map +7 -0
  121. package/dist/src/tools/vtex/catalog-admin-categories.js +542 -0
  122. package/dist/src/tools/vtex/catalog-admin-categories.js.map +7 -0
  123. package/dist/src/tools/vtex/catalog-admin-product-specifications.js +275 -0
  124. package/dist/src/tools/vtex/catalog-admin-product-specifications.js.map +7 -0
  125. package/dist/src/tools/vtex/catalog-admin-products-skus.js +477 -0
  126. package/dist/src/tools/vtex/catalog-admin-products-skus.js.map +7 -0
  127. package/dist/src/tools/vtex/catalog-navigation-reads.js +430 -0
  128. package/dist/src/tools/vtex/catalog-navigation-reads.js.map +7 -0
  129. package/dist/src/tools/vtex/commercial-conditions.js +220 -0
  130. package/dist/src/tools/vtex/commercial-conditions.js.map +7 -0
  131. package/dist/src/tools/vtex/create-brand.js +1 -64
  132. package/dist/src/tools/vtex/create-brand.js.map +2 -2
  133. package/dist/src/tools/vtex/create-category.js +1 -76
  134. package/dist/src/tools/vtex/create-category.js.map +2 -2
  135. package/dist/src/tools/vtex/create-product-with-sku.js +3 -114
  136. package/dist/src/tools/vtex/create-product-with-sku.js.map +2 -2
  137. package/dist/src/tools/vtex/create-sku.js +3 -1
  138. package/dist/src/tools/vtex/create-sku.js.map +2 -2
  139. package/dist/src/tools/vtex/create-specification-value.js +3 -47
  140. package/dist/src/tools/vtex/create-specification-value.js.map +2 -2
  141. package/dist/src/tools/vtex/create-specification.js +1 -80
  142. package/dist/src/tools/vtex/create-specification.js.map +2 -2
  143. package/dist/src/tools/vtex/deactivate-sku.js +1 -48
  144. package/dist/src/tools/vtex/deactivate-sku.js.map +2 -2
  145. package/dist/src/tools/vtex/delete-all-product-specifications.js +9 -0
  146. package/dist/src/tools/vtex/delete-all-product-specifications.js.map +7 -0
  147. package/dist/src/tools/vtex/delete-all-sku-specifications.js +9 -0
  148. package/dist/src/tools/vtex/delete-all-sku-specifications.js.map +7 -0
  149. package/dist/src/tools/vtex/delete-brand.js +9 -0
  150. package/dist/src/tools/vtex/delete-brand.js.map +7 -0
  151. package/dist/src/tools/vtex/delete-catalog-image.js +9 -0
  152. package/dist/src/tools/vtex/delete-catalog-image.js.map +7 -0
  153. package/dist/src/tools/vtex/delete-product-specification.js +9 -0
  154. package/dist/src/tools/vtex/delete-product-specification.js.map +7 -0
  155. package/dist/src/tools/vtex/delete-sku-price.js +55 -0
  156. package/dist/src/tools/vtex/delete-sku-price.js.map +7 -0
  157. package/dist/src/tools/vtex/delete-sku-specification.js +9 -0
  158. package/dist/src/tools/vtex/delete-sku-specification.js.map +7 -0
  159. package/dist/src/tools/vtex/get-brand.js +6 -0
  160. package/dist/src/tools/vtex/get-brand.js.map +7 -0
  161. package/dist/src/tools/vtex/get-category-tree.js +6 -0
  162. package/dist/src/tools/vtex/get-category-tree.js.map +7 -0
  163. package/dist/src/tools/vtex/get-category.js +6 -0
  164. package/dist/src/tools/vtex/get-category.js.map +7 -0
  165. package/dist/src/tools/vtex/get-product-specifications.js +9 -0
  166. package/dist/src/tools/vtex/get-product-specifications.js.map +7 -0
  167. package/dist/src/tools/vtex/get-product.js +6 -0
  168. package/dist/src/tools/vtex/get-product.js.map +7 -0
  169. package/dist/src/tools/vtex/get-sku.js +6 -0
  170. package/dist/src/tools/vtex/get-sku.js.map +7 -0
  171. package/dist/src/tools/vtex/index.js +25 -1
  172. package/dist/src/tools/vtex/index.js.map +2 -2
  173. package/dist/src/tools/vtex/list-brands.js +6 -0
  174. package/dist/src/tools/vtex/list-brands.js.map +7 -0
  175. package/dist/src/tools/vtex/list-categories.js +6 -0
  176. package/dist/src/tools/vtex/list-categories.js.map +7 -0
  177. package/dist/src/tools/vtex/list-products-by-category.js +6 -0
  178. package/dist/src/tools/vtex/list-products-by-category.js.map +7 -0
  179. package/dist/src/tools/vtex/list-products.js +6 -0
  180. package/dist/src/tools/vtex/list-products.js.map +7 -0
  181. package/dist/src/tools/vtex/list-skus-by-product.js +6 -0
  182. package/dist/src/tools/vtex/list-skus-by-product.js.map +7 -0
  183. package/dist/src/tools/vtex/list-specification-groups.js +9 -0
  184. package/dist/src/tools/vtex/list-specification-groups.js.map +7 -0
  185. package/dist/src/tools/vtex/move-category.js +6 -0
  186. package/dist/src/tools/vtex/move-category.js.map +7 -0
  187. package/dist/src/tools/vtex/payment-rules.js +229 -0
  188. package/dist/src/tools/vtex/payment-rules.js.map +7 -0
  189. package/dist/src/tools/vtex/profile-resolution.js +4 -51
  190. package/dist/src/tools/vtex/profile-resolution.js.map +2 -2
  191. package/dist/src/tools/vtex/update-brand.js +6 -0
  192. package/dist/src/tools/vtex/update-brand.js.map +7 -0
  193. package/dist/src/tools/vtex/update-category.js +6 -0
  194. package/dist/src/tools/vtex/update-category.js.map +7 -0
  195. package/dist/src/tools/vtex/update-product-basic-fields.js +3 -65
  196. package/dist/src/tools/vtex/update-product-basic-fields.js.map +2 -2
  197. package/dist/src/tools/vtex/update-sku-basic-fields.js +1 -87
  198. package/dist/src/tools/vtex/update-sku-basic-fields.js.map +2 -2
  199. package/dist/src/tools/vtex/update-sku-price.js +21 -1
  200. package/dist/src/tools/vtex/update-sku-price.js.map +2 -2
  201. package/dist/src/tools/vtex/write-helpers.js +104 -14
  202. package/dist/src/tools/vtex/write-helpers.js.map +2 -2
  203. package/dist/src/utils/provider-profile-selection.js +117 -0
  204. package/dist/src/utils/provider-profile-selection.js.map +7 -0
  205. package/dist/tests/meli/mercadolibre-tool-handlers-medium-batch4.test.js +678 -0
  206. package/dist/tests/meli/mercadolibre-tool-handlers-medium-batch4.test.js.map +7 -0
  207. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch5.test.js +564 -0
  208. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch5.test.js.map +7 -0
  209. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch6.test.js +387 -0
  210. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch6.test.js.map +7 -0
  211. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch7.test.js +368 -0
  212. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch7.test.js.map +7 -0
  213. package/dist/tests/meli/mercadolibre-tool-handlers-small.test.js +626 -0
  214. package/dist/tests/meli/mercadolibre-tool-handlers-small.test.js.map +7 -0
  215. package/dist/tests/meli/mercadolibre-tool-handlers-write-batch8.test.js +480 -0
  216. package/dist/tests/meli/mercadolibre-tool-handlers-write-batch8.test.js.map +7 -0
  217. package/dist/tests/setup.js +2 -0
  218. package/dist/tests/setup.js.map +7 -0
  219. package/dist/tests/smoke/test-harness.test.js +7 -0
  220. package/dist/tests/smoke/test-harness.test.js.map +7 -0
  221. package/dist/tests/vtex/read-only-utils.test.js +161 -0
  222. package/dist/tests/vtex/read-only-utils.test.js.map +7 -0
  223. package/dist/tests/vtex/vtex-catalog-admin-docs.test.js +24 -0
  224. package/dist/tests/vtex/vtex-catalog-admin-docs.test.js.map +7 -0
  225. package/dist/tests/vtex/vtex-catalog-admin-surface.test.js +30 -0
  226. package/dist/tests/vtex/vtex-catalog-admin-surface.test.js.map +7 -0
  227. package/dist/tests/vtex/vtex-catalog-write-tools.test.js +712 -0
  228. package/dist/tests/vtex/vtex-catalog-write-tools.test.js.map +7 -0
  229. package/dist/tests/vtex/vtex-catalog.service.test.js +51 -0
  230. package/dist/tests/vtex/vtex-catalog.service.test.js.map +7 -0
  231. package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js +26 -0
  232. package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js.map +7 -0
  233. package/dist/tests/vtex/vtex-commercial-conditions-surface.test.js +42 -0
  234. package/dist/tests/vtex/vtex-commercial-conditions-surface.test.js.map +7 -0
  235. package/dist/tests/vtex/vtex-commercial-conditions-workflow.test.js +190 -0
  236. package/dist/tests/vtex/vtex-commercial-conditions-workflow.test.js.map +7 -0
  237. package/dist/tests/vtex/vtex-inventory-tools.test.js +201 -0
  238. package/dist/tests/vtex/vtex-inventory-tools.test.js.map +7 -0
  239. package/dist/tests/vtex/vtex-logistics.service.test.js +134 -0
  240. package/dist/tests/vtex/vtex-logistics.service.test.js.map +7 -0
  241. package/dist/tests/vtex/vtex-order-details.tool.test.js +141 -0
  242. package/dist/tests/vtex/vtex-order-details.tool.test.js.map +7 -0
  243. package/dist/tests/vtex/vtex-order-write-tools.test.js +483 -0
  244. package/dist/tests/vtex/vtex-order-write-tools.test.js.map +7 -0
  245. package/dist/tests/vtex/vtex-orders-summary.tool.test.js +185 -0
  246. package/dist/tests/vtex/vtex-orders-summary.tool.test.js.map +7 -0
  247. package/dist/tests/vtex/vtex-orders.service.test.js +120 -0
  248. package/dist/tests/vtex/vtex-orders.service.test.js.map +7 -0
  249. package/dist/tests/vtex/vtex-pricing-write-tools.test.js +202 -0
  250. package/dist/tests/vtex/vtex-pricing-write-tools.test.js.map +7 -0
  251. package/dist/tests/vtex/vtex-pricing-write.service.test.js +106 -0
  252. package/dist/tests/vtex/vtex-pricing-write.service.test.js.map +7 -0
  253. package/dist/tests/vtex/vtex-pricing.service.test.js +88 -0
  254. package/dist/tests/vtex/vtex-pricing.service.test.js.map +7 -0
  255. package/dist/tests/vtex/vtex-small-tools.test.js +190 -0
  256. package/dist/tests/vtex/vtex-small-tools.test.js.map +7 -0
  257. package/dist/tests/vtex/vtex-write-simple-tools.test.js +647 -0
  258. package/dist/tests/vtex/vtex-write-simple-tools.test.js.map +7 -0
  259. package/dist/vitest.config.js +15 -0
  260. package/dist/vitest.config.js.map +7 -0
  261. package/package.json +6 -2
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../tests/meli/mercadolibre-tool-handlers-medium-batch4.test.ts"],
4
+ "sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliSearchItemsHandler } from \"../../src/tools/mercadolibre/search-items.js\";\nimport { meliGetStorePerformanceHandler } from \"../../src/tools/mercadolibre/get-store-performance.js\";\nimport { meliGetSalesByItemHandler } from \"../../src/tools/mercadolibre/get-sales-by-item.js\";\nimport { meliGetSalesTrendHandler } from \"../../src/tools/mercadolibre/get-sales-trend.js\";\nimport { meliGetOrderDetailsHandler } from \"../../src/tools/mercadolibre/get-order-details.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport { getMercadoLibreAccessForProfile } from \"../../src/config/mercadolibre.js\";\nimport {\n formatMercadoLibreError,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n getMercadoLibreItemDetailsBatch,\n getMercadoLibreItemDetailsWithFallbackBatch,\n getMercadoLibreUserItemsVisits,\n searchMercadoLibreItems,\n searchMercadoLibreItemsBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-items.js\";\nimport {\n getMercadoLibreOrder,\n getMercadoLibreOrderDetailsBatch,\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/config/mercadolibre.js\", () => ({\n getMercadoLibreAccessForProfile: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-items.js\", () => ({\n searchMercadoLibreItems: vi.fn(),\n searchMercadoLibreItemsBatch: vi.fn(),\n getMercadoLibreItemDetailsBatch: vi.fn(),\n getMercadoLibreItemDetailsWithFallbackBatch: vi.fn(),\n getMercadoLibreUserItemsVisits: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n getMercadoLibreOrder: vi.fn(),\n getMercadoLibreOrderDetailsBatch: vi.fn(),\n}));\n\ndescribe(\"MercadoLibre medium tool handlers batch 4\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(getMercadoLibreAccessForProfile).mockResolvedValue({\n sellerId: \"seller-99\",\n scopes: [\"read\"],\n expiresAt: \"2026-07-01T00:00:00.000Z\",\n } as never);\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n });\n\n it(\"searches items with the default active status and compact item rows\", async () => {\n vi.mocked(searchMercadoLibreItems).mockResolvedValue({\n results: [\"MLA1\", \"MLA2\"],\n paging: { total: 2, limit: 50, offset: 0 },\n } as never);\n vi.mocked(getMercadoLibreItemDetailsBatch).mockResolvedValue([\n {\n id: \"MLA1\",\n title: \"Boots\",\n status: \"active\",\n price: 100,\n currency_id: \"ARS\",\n available_quantity: 3,\n sold_quantity: 8,\n listing_type_id: \"gold_special\",\n category_id: \"MLA123\",\n },\n {\n id: \"MLA2\",\n title: \"Sneakers\",\n status: \"paused\",\n price: 250,\n currency_id: \"USD\",\n available_quantity: 1,\n sold_quantity: 2,\n listing_type_id: \"gold_pro\",\n category_id: \"MLA456\",\n },\n ] as never);\n vi.mocked(getMercadoLibreItemDetailsWithFallbackBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n\n const result = await meliSearchItemsHandler({ profileId: \"meli-profile-1\" });\n\n expect(searchMercadoLibreItems).toHaveBeenCalledWith(\"meli-profile-1\", {\n sellerId: \"seller-99\",\n status: \"active\",\n q: undefined,\n category: undefined,\n listingTypeId: undefined,\n orders: undefined,\n limit: 50,\n offset: 0,\n });\n expect(getMercadoLibreItemDetailsBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"MLA1\", \"MLA2\"], [\n \"id\",\n \"title\",\n \"status\",\n \"price\",\n \"currency_id\",\n \"available_quantity\",\n \"sold_quantity\",\n \"listing_type_id\",\n \"category_id\",\n ]);\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 2,\n limit: 2,\n offset: 0,\n returned: 2,\n has_more: false,\n continuation: \"No more pages for this query.\",\n applied_status: \"active\",\n default_status_notice:\n \"Solo se devolvieron publicaciones active por default. Tambi\u00E9n se puede pedir status expl\u00EDcito como paused, closed, under_review, inactive, not_yet_active, payment_required o deleted.\",\n available_status_filters: [\n \"active\",\n \"paused\",\n \"closed\",\n \"under_review\",\n \"inactive\",\n \"not_yet_active\",\n \"payment_required\",\n \"deleted\",\n ],\n detail_coverage: {\n detail_failures: 0,\n details_complete: true,\n },\n pages_requested: 1,\n pages_succeeded: 1,\n pages_failed: 0,\n universe_fully_fetched: true,\n },\n items_schema: [\n \"item_id\",\n \"title\",\n \"status\",\n \"price\",\n \"currency_id\",\n \"available_quantity\",\n \"sold_quantity\",\n \"listing_type_id\",\n \"category_id\",\n ],\n items: [\n [\"MLA1\", \"Boots\", \"active\", 100, \"ARS\", 3, 8, \"gold_special\", \"MLA123\"],\n [\"MLA2\", \"Sneakers\", \"paused\", 250, \"USD\", 1, 2, \"gold_pro\", \"MLA456\"],\n ],\n },\n });\n });\n\n it(\"reports partial item detail coverage when fallback misses items\", async () => {\n vi.mocked(searchMercadoLibreItems).mockResolvedValue({\n results: [\"MLA1\", \"MLA2\", \"MLA3\"],\n paging: { total: 3, limit: 50, offset: 0 },\n } as never);\n vi.mocked(getMercadoLibreItemDetailsBatch).mockResolvedValue([{ id: \"MLA1\", title: \"Boots\" }] as never);\n vi.mocked(getMercadoLibreItemDetailsWithFallbackBatch).mockResolvedValue({\n successful: [{ id: \"MLA2\", document: { id: \"MLA2\", title: \"Sneakers\" } }],\n failed: [{ id: \"MLA3\", message: \"missing\", attempts: 2, retryable: false, statusCode: 404 }],\n } as never);\n\n const result = await meliSearchItemsHandler({\n profileId: \"meli-profile-1\",\n status: \"paused\",\n limit: 3,\n offset: 0,\n });\n\n expect(getMercadoLibreItemDetailsWithFallbackBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"MLA2\", \"MLA3\"], {\n maxConcurrency: 10,\n maxRetries: 1,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 3,\n limit: 3,\n offset: 0,\n returned: 2,\n has_more: true,\n next_offset: 2,\n continuation:\n \"Se recuper\u00F3 cobertura parcial. Reintentar la misma tool con offset=0 y limit=3. Luego continuar con offset=2 si hace falta.\",\n applied_status: \"paused\",\n available_status_filters: [\n \"active\",\n \"paused\",\n \"closed\",\n \"under_review\",\n \"inactive\",\n \"not_yet_active\",\n \"payment_required\",\n \"deleted\",\n ],\n detail_coverage: {\n detail_failures: 1,\n details_complete: false,\n },\n pages_requested: 1,\n pages_succeeded: 1,\n pages_failed: 0,\n universe_fully_fetched: true,\n },\n items_schema: [\n \"item_id\",\n \"title\",\n \"status\",\n \"price\",\n \"currency_id\",\n \"available_quantity\",\n \"sold_quantity\",\n \"listing_type_id\",\n \"category_id\",\n ],\n items: [\n [\"MLA1\", \"Boots\", \"\", 0, \"UNKNOWN\", 0, 0, \"\", \"\"],\n [\"MLA2\", \"Sneakers\", \"\", 0, \"UNKNOWN\", 0, 0, \"\", \"\"],\n ],\n },\n });\n });\n\n it(\"builds store performance summaries with service wiring, ordering, and warnings\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n results: [\n {\n currency_id: \"ARS\",\n total_amount: 200.5,\n order_items: [\n {\n quantity: 2,\n unit_price: 50.25,\n item: { id: \"MLA1\", title: \"Boots\" },\n },\n ],\n },\n {\n currency_id: \"USD\",\n total_amount: 75.255,\n order_items: [\n {\n quantity: 1,\n unit_price: 75.255,\n item: { id: \"MLA2\", title: \"Sneakers\" },\n },\n ],\n },\n ],\n } as never);\n vi.mocked(searchMercadoLibreItems).mockResolvedValue({\n results: [\"MLA1\", \"MLA2\", \"MLA3\"],\n } as never);\n vi.mocked(getMercadoLibreUserItemsVisits).mockResolvedValue({ results: [] } as never);\n\n const result = await meliGetStorePerformanceHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n ordersLimit: 2,\n itemsLimit: 5,\n });\n\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"seller-99\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n limit: 2,\n offset: 0,\n });\n expect(searchMercadoLibreItems).toHaveBeenCalledWith(\"meli-profile-1\", {\n sellerId: \"seller-99\",\n limit: 5,\n offset: 0,\n });\n expect(getMercadoLibreUserItemsVisits).toHaveBeenCalledWith(\n \"meli-profile-1\",\n \"seller-99\",\n \"2026-03-01\",\n \"2026-03-31\"\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n seller_id: \"seller-99\",\n executive_summary: {\n orders_sampled: 2,\n active_items_sampled: 3,\n total_visits: 0,\n revenue_by_currency: {\n ARS: { orders: 1, revenue: 200.5 },\n USD: { orders: 1, revenue: 75.25 },\n },\n },\n top_items: [\n { item_id: \"MLA1\", title: \"Boots\", units: 2, revenue: 100.5 },\n { item_id: \"MLA2\", title: \"Sneakers\", units: 1, revenue: 75.25 },\n ],\n warnings: [\n \"La muestra de \u00F3rdenes puede ser parcial. Si necesit\u00E1s totales completos, reenviar con mayor rango paginado.\",\n \"MercadoLibre no devolvi\u00F3 filas de visitas para el rango indicado.\",\n ],\n },\n });\n });\n\n it(\"aggregates sales by item across paginated order batches\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 3, limit: 2, offset: 0 },\n results: [\n {\n currency_id: \"ARS\",\n date_created: \"2026-03-10T14:45:55.000Z\",\n order_items: [\n {\n quantity: 2,\n unit_price: 100,\n item: { id: \"MLA1\", title: \"Boots\", variation_id: \"V1\" },\n },\n ],\n },\n {\n currency_id: \"USD\",\n date_created: \"2026-03-11T08:10:00.000Z\",\n order_items: [\n {\n quantity: 1,\n unit_price: 50,\n item: { id: \"MLA2\", title: \"Sneakers\" },\n },\n ],\n },\n ],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"2\",\n document: {\n results: [\n {\n currency_id: \"ARS\",\n date_created: \"2026-03-12T09:15:00.000Z\",\n order_items: [\n {\n quantity: 1,\n unit_price: 120,\n item: { id: \"MLA1\", title: \"Boots\", variation_id: \"V1\" },\n },\n ],\n },\n ],\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetSalesByItemHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n status: \"paid\",\n limit: 2,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: \"paid\",\n limit: 2,\n offset: 0,\n });\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: \"paid\",\n limit: 2,\n },\n [2],\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 3,\n limit: 2,\n offset: 0,\n returned: 3,\n orders_aggregated: 3,\n has_more: false,\n continuation: \"Agregado completo. No more pages for this query.\",\n fetch_mode: \"full_aggregate\",\n pages_requested: 2,\n pages_succeeded: 2,\n pages_failed: 0,\n universe_fully_fetched: true,\n },\n sales_by_item_schema: [\n \"item_id\",\n \"title\",\n \"variation_id\",\n \"orders\",\n \"units\",\n \"revenue\",\n \"last_order_date\",\n ],\n sales_by_currency: {\n ARS: [[\"MLA1\", \"Boots\", \"V1\", 2, 3, 320, \"2026-03-12 09:15\"]],\n USD: [[\"MLA2\", \"Sneakers\", \"\", 1, 1, 50, \"2026-03-11 08:10\"]],\n },\n },\n });\n });\n\n it(\"reports partial weekly sales trends when follow-up pages fail\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 3, limit: 2, offset: 0 },\n results: [\n {\n currency_id: \"ARS\",\n total_amount: 100,\n date_created: \"2026-03-10T23:30:00.000Z\",\n },\n {\n currency_id: \"ARS\",\n total_amount: 50,\n date_created: \"2026-03-13T03:00:00.000Z\",\n },\n ],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [],\n failed: [{ id: \"2\", message: \"timeout\", attempts: 2, retryable: true, statusCode: 504 }],\n } as never);\n\n const result = await meliGetSalesTrendHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n granularity: \"week\",\n limit: 2,\n offset: 0,\n });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n granularity: \"week\",\n trend_by_currency: {\n ARS: [{ bucket: \"2026-03-09\", orders: 2, revenue: 150 }],\n },\n metadata: {\n total_matching_orders: 3,\n limit: 2,\n offset: 0,\n returned: 2,\n orders_aggregated: 2,\n continuation:\n \"Agregado parcial por paginas fallidas. Reintentar la misma tool con los mismos filtros para recomputar el trend completo. Offsets fallidos: 2.\",\n fetch_mode: \"full_aggregate\",\n pages_requested: 2,\n pages_succeeded: 1,\n pages_failed: 1,\n universe_fully_fetched: false,\n },\n failed_pages: [\n {\n offset: 2,\n limit: 2,\n page_number: 2,\n message: \"timeout\",\n status_code: 504,\n attempts: 2,\n retryable: true,\n },\n ],\n },\n });\n });\n\n it(\"uses the single-order path when all requested order ids collapse to one unique id\", async () => {\n vi.mocked(getMercadoLibreOrder).mockResolvedValue({\n id: 100,\n status: \"paid\",\n status_detail: \"accredited\",\n date_created: \"2026-03-10T14:45:55.000Z\",\n date_closed: \"2026-03-10T15:00:00.000Z\",\n currency_id: \"ARS\",\n total_amount: 200,\n paid_amount: 200,\n shipping: { id: 1, status: \"ready_to_ship\", logistic_type: \"drop_off\" },\n buyer: { id: 10, nickname: \"buyer-1\" },\n seller: { id: 20, nickname: \"seller-1\" },\n order_items: [\n {\n quantity: 2,\n unit_price: 100,\n full_unit_price: 120,\n item: { id: \"MLA1\", title: \"Boots\", variation_id: \"V1\" },\n },\n ],\n payments: [\n {\n id: 999,\n status: \"approved\",\n payment_type: \"credit_card\",\n installments: 3,\n total_paid_amount: 200,\n },\n ],\n tags: [\"packed\"],\n } as never);\n\n const result = await meliGetOrderDetailsHandler({\n profileId: \"meli-profile-1\",\n orderIds: [\"100\", \"100\"],\n });\n\n expect(getMercadoLibreOrder).toHaveBeenCalledWith(\"meli-profile-1\", \"100\");\n expect(getMercadoLibreOrderDetailsBatch).not.toHaveBeenCalled();\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n metadata: {\n profile_id: \"meli-profile-1\",\n requested: 1,\n successful: 1,\n failed: 0,\n },\n orders: [\n {\n buyer: { id: \"\", nickname: \"buyer-1\" },\n currency_id: \"ARS\",\n date_closed: \"2026-03-10 15:00\",\n date_created: \"2026-03-10 14:45\",\n items: [\n {\n item_id: \"MLA1\",\n title: \"Boots\",\n variation_id: \"V1\",\n quantity: 2,\n unit_price: 100,\n full_unit_price: 120,\n },\n ],\n order_id: \"\",\n total_amount: 200,\n paid_amount: 200,\n payments: [\n {\n id: \"\",\n status: \"approved\",\n payment_type: \"credit_card\",\n installments: 3,\n total_paid_amount: 200,\n },\n ],\n seller: { id: \"\", nickname: \"seller-1\" },\n shipping: {\n id: \"\",\n status: \"ready_to_ship\",\n substatus: \"\",\n mode: \"\",\n logistic_type: \"drop_off\",\n },\n status: \"paid\",\n status_detail: \"accredited\",\n tags: [\"packed\"],\n },\n ],\n },\n });\n });\n\n it(\"returns batch order details with normalized failures\", async () => {\n vi.mocked(getMercadoLibreOrderDetailsBatch).mockResolvedValue({\n successful: [\n {\n id: \"100\",\n document: {\n id: \"100\",\n status: \"paid\",\n currency_id: \"ARS\",\n total_amount: 100,\n paid_amount: 100,\n order_items: [],\n payments: [],\n },\n },\n ],\n failed: [{ id: \"101\", message: \"not found\", statusCode: 404, attempts: 2, retryable: false }],\n } as never);\n\n const result = await meliGetOrderDetailsHandler({\n profileId: \"meli-profile-1\",\n orderIds: [\"100\", \"101\", \"100\"],\n });\n\n expect(getMercadoLibreOrderDetailsBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"100\", \"101\"], {\n maxConcurrency: 10,\n maxRetries: 2,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n metadata: {\n profile_id: \"meli-profile-1\",\n requested: 2,\n successful: 1,\n failed: 1,\n has_failures: true,\n },\n orders: [\n {\n buyer: { id: \"\", nickname: \"\" },\n order_id: \"100\",\n status: \"paid\",\n status_detail: \"\",\n currency_id: \"ARS\",\n total_amount: 100,\n paid_amount: 100,\n shipping: {\n id: \"\",\n status: \"\",\n substatus: \"\",\n mode: \"\",\n logistic_type: \"\",\n },\n seller: { id: \"\", nickname: \"\" },\n },\n ],\n failures: [\n {\n order_id: \"101\",\n message: \"not found\",\n status_code: 404,\n attempts: 2,\n retryable: false,\n },\n ],\n },\n });\n });\n\n it(\"formats medium-handler failures through MercadoLibre error helpers\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockRejectedValue(new Error(\"orders-boom\"));\n\n const result = await meliGetSalesTrendHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to build MercadoLibre sales trend\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to build MercadoLibre sales trend:orders-boom\",\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,564 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { meliGetOrdersSummaryHandler } from "../../src/tools/mercadolibre/get-orders-summary.js";
3
+ import { resolveMercadoLibreProfileOrSelection } from "../../src/tools/mercadolibre/profile-resolution.js";
4
+ import {
5
+ buildMercadoLibrePaginationMetadata,
6
+ formatMercadoLibreError,
7
+ normalizeMercadoLibrePaging
8
+ } from "../../src/services/mercadolibre/mercadolibre-api.js";
9
+ import {
10
+ searchMercadoLibreOrders,
11
+ searchMercadoLibreOrdersBatch
12
+ } from "../../src/services/mercadolibre/mercadolibre-orders.js";
13
+ vi.mock("mcp-use/server", () => ({
14
+ object: vi.fn((payload) => ({ kind: "object", payload })),
15
+ error: vi.fn((message) => ({ kind: "error", message }))
16
+ }));
17
+ vi.mock("../../src/tools/mercadolibre/profile-resolution.js", () => ({
18
+ resolveMercadoLibreProfileOrSelection: vi.fn()
19
+ }));
20
+ vi.mock("../../src/services/mercadolibre/mercadolibre-api.js", () => ({
21
+ formatMercadoLibreError: vi.fn(
22
+ (err, fallback) => `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`
23
+ ),
24
+ normalizeMercadoLibrePaging: vi.fn((paging) => paging),
25
+ buildMercadoLibrePaginationMetadata: vi.fn((metadata) => {
26
+ const params = metadata;
27
+ return {
28
+ pagination_source: "service",
29
+ total: params.total,
30
+ limit: params.limit,
31
+ offset: params.offset,
32
+ returned: params.returned,
33
+ has_more: params.offset + params.returned < params.total,
34
+ continuation: params.offset + params.returned < params.total ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.` : "No more pages for this query."
35
+ };
36
+ })
37
+ }));
38
+ vi.mock("../../src/services/mercadolibre/mercadolibre-orders.js", () => ({
39
+ searchMercadoLibreOrders: vi.fn(),
40
+ searchMercadoLibreOrdersBatch: vi.fn()
41
+ }));
42
+ function buildOrder(overrides = {}) {
43
+ return {
44
+ id: "2001",
45
+ date_created: "2026-03-01T10:15:30.000Z",
46
+ date_closed: "2026-03-02T12:00:00.000Z",
47
+ last_updated: "2026-03-03T18:45:00.000Z",
48
+ status: "paid",
49
+ total_amount: 150.5,
50
+ paid_amount: 145.25,
51
+ currency_id: "ARS",
52
+ fulfilled: true,
53
+ pack_id: "PACK-1",
54
+ tags: ["delivered", "catalog"],
55
+ buyer: {
56
+ id: 7001,
57
+ nickname: "buyer-one"
58
+ },
59
+ seller: {
60
+ id: 9001,
61
+ nickname: "meli-store"
62
+ },
63
+ shipping: {
64
+ id: 3001,
65
+ status: "delivered"
66
+ },
67
+ payments: [
68
+ {
69
+ id: 5001,
70
+ status: "approved",
71
+ status_detail: "accredited",
72
+ payment_method_id: "visa",
73
+ payment_type: "credit_card",
74
+ total_paid_amount: 145.25,
75
+ transaction_amount: 150.5,
76
+ installments: 3,
77
+ available_actions: ["refund", "capture"]
78
+ }
79
+ ],
80
+ coupon: {
81
+ amount: 5.25
82
+ },
83
+ context: {
84
+ channel: "marketplace",
85
+ site: "MLA",
86
+ flows: ["catalog"]
87
+ },
88
+ feedback: {
89
+ buyer: { status: "positive", reason: "fast" },
90
+ seller: { status: "neutral" }
91
+ },
92
+ order_request: {
93
+ change: { status: "open", reason: "size" },
94
+ return: { status: "closed" }
95
+ },
96
+ order_items: [
97
+ {
98
+ quantity: 2,
99
+ unit_price: 75.25,
100
+ sale_fee: 10.1,
101
+ listing_type_id: "gold_special",
102
+ stock: { node_id: "warehouse-1" },
103
+ item: {
104
+ id: "MLA-1",
105
+ title: "Running Shoe",
106
+ seller_sku: "SKU-1",
107
+ variation_attributes: [
108
+ { name: "Color", value_name: "Red" },
109
+ { id: "SIZE", value_id: "42" }
110
+ ]
111
+ }
112
+ }
113
+ ],
114
+ ...overrides
115
+ };
116
+ }
117
+ describe("MercadoLibre monster tool handlers batch 5", () => {
118
+ beforeEach(() => {
119
+ vi.clearAllMocks();
120
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
121
+ ok: true,
122
+ value: { profileId: "meli-profile-1" }
123
+ });
124
+ vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging);
125
+ vi.mocked(buildMercadoLibrePaginationMetadata).mockImplementation(
126
+ ((metadata) => {
127
+ const params = metadata;
128
+ return {
129
+ pagination_source: "service",
130
+ total: params.total,
131
+ limit: params.limit,
132
+ offset: params.offset,
133
+ returned: params.returned,
134
+ has_more: params.offset + params.returned < params.total,
135
+ continuation: params.offset + params.returned < params.total ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.` : "No more pages for this query."
136
+ };
137
+ })
138
+ );
139
+ });
140
+ it("returns compact order rows with normalized nested values and explicit optional filters", async () => {
141
+ vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
142
+ paging: { total: 1, limit: 1, offset: 2 },
143
+ results: [buildOrder()]
144
+ });
145
+ vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({ successful: [], failed: [] });
146
+ const result = await meliGetOrdersSummaryHandler({
147
+ profileId: "custom-profile",
148
+ startDate: "2026-03-01",
149
+ endDate: "2026-03-31",
150
+ responseMode: "orders_chunk",
151
+ status: "paid",
152
+ q: "SKU-1",
153
+ sort: "date_desc",
154
+ offset: 2,
155
+ limit: 1
156
+ });
157
+ expect(resolveMercadoLibreProfileOrSelection).toHaveBeenCalledWith("custom-profile");
158
+ expect(searchMercadoLibreOrders).toHaveBeenCalledWith("meli-profile-1", {
159
+ seller: "",
160
+ from: "2026-03-01",
161
+ to: "2026-03-31",
162
+ status: "paid",
163
+ q: "SKU-1",
164
+ sort: "date_desc",
165
+ offset: 2,
166
+ limit: 1
167
+ });
168
+ expect(searchMercadoLibreOrdersBatch).not.toHaveBeenCalled();
169
+ expect(result).toEqual({
170
+ kind: "object",
171
+ payload: {
172
+ profile_id: "meli-profile-1",
173
+ metadata: {
174
+ pagination_source: "service",
175
+ total: 1,
176
+ limit: 1,
177
+ offset: 2,
178
+ returned: 1,
179
+ has_more: false,
180
+ continuation: "No more pages for this query.",
181
+ fetch_mode: "orders_chunk",
182
+ pages_per_call_limit: 15,
183
+ pages_requested: 1,
184
+ pages_succeeded: 1,
185
+ pages_failed: 0,
186
+ universe_fully_fetched: false
187
+ },
188
+ metrics_by_currency: {
189
+ ARS: { orders: 1, revenue: 150.5, avg_order_value: 150.5 }
190
+ },
191
+ orders_schema: [
192
+ "id",
193
+ "date_created",
194
+ "status",
195
+ "total_amount",
196
+ "currency",
197
+ "buyer",
198
+ "shipping_status",
199
+ "items",
200
+ "date_closed",
201
+ "last_updated",
202
+ "paid_amount",
203
+ "buyer_id",
204
+ "seller",
205
+ "seller_id",
206
+ "shipping_id",
207
+ "pack_id",
208
+ "fulfilled",
209
+ "tags",
210
+ "channel",
211
+ "site",
212
+ "payment_id",
213
+ "payment_status",
214
+ "payment_status_detail",
215
+ "payment_method",
216
+ "payment_type",
217
+ "payment_total_paid",
218
+ "payment_transaction_amount",
219
+ "installments",
220
+ "coupon_amount",
221
+ "available_actions",
222
+ "feedback_buyer",
223
+ "feedback_seller",
224
+ "order_request_change",
225
+ "order_request_return",
226
+ "first_item_id",
227
+ "first_item_title",
228
+ "first_item_sku",
229
+ "first_item_quantity",
230
+ "first_item_unit_price",
231
+ "first_item_sale_fee",
232
+ "first_item_listing_type",
233
+ "variation_attributes",
234
+ "stock_node_id"
235
+ ],
236
+ orders: [
237
+ [
238
+ "2001",
239
+ "2026-03-01 10:15",
240
+ "paid",
241
+ 150.5,
242
+ "ARS",
243
+ "buyer-one",
244
+ "delivered",
245
+ 1,
246
+ "2026-03-02 12:00",
247
+ "2026-03-03 18:45",
248
+ 145.25,
249
+ "7001",
250
+ "meli-store",
251
+ "9001",
252
+ "3001",
253
+ "PACK-1",
254
+ true,
255
+ "delivered | catalog",
256
+ "marketplace",
257
+ "MLA",
258
+ "5001",
259
+ "approved",
260
+ "accredited",
261
+ "visa",
262
+ "credit_card",
263
+ 145.25,
264
+ 150.5,
265
+ 3,
266
+ 5.25,
267
+ "refund | capture",
268
+ "status:positive | reason:fast",
269
+ "status:neutral",
270
+ "status:open | reason:size",
271
+ "status:closed",
272
+ "MLA-1",
273
+ "Running Shoe",
274
+ "SKU-1",
275
+ 2,
276
+ 75.25,
277
+ 10.1,
278
+ "gold_special",
279
+ "Color: Red | SIZE: 42",
280
+ "warehouse-1"
281
+ ]
282
+ ]
283
+ }
284
+ });
285
+ });
286
+ it("reports partial page failures for orders_chunk and keeps failed-page guidance", async () => {
287
+ vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
288
+ paging: { total: 25, limit: 10, offset: 0 },
289
+ results: [buildOrder()]
290
+ });
291
+ vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({
292
+ successful: [
293
+ {
294
+ id: "10",
295
+ document: {
296
+ results: [
297
+ buildOrder({
298
+ id: "2002",
299
+ total_amount: 50,
300
+ paid_amount: 50,
301
+ currency_id: "USD",
302
+ buyer: { id: 7002, nickname: "buyer-two" },
303
+ seller: { id: 9001, nickname: "meli-store" }
304
+ })
305
+ ]
306
+ }
307
+ }
308
+ ],
309
+ failed: [
310
+ {
311
+ id: "20",
312
+ message: "rate limited",
313
+ statusCode: 429,
314
+ attempts: 3,
315
+ retryable: true
316
+ }
317
+ ]
318
+ });
319
+ const result = await meliGetOrdersSummaryHandler({
320
+ profileId: "meli-profile-1",
321
+ startDate: "2026-03-01",
322
+ endDate: "2026-03-31",
323
+ responseMode: "orders_chunk",
324
+ limit: 10,
325
+ offset: 0
326
+ });
327
+ expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(
328
+ "meli-profile-1",
329
+ {
330
+ seller: "",
331
+ from: "2026-03-01",
332
+ to: "2026-03-31",
333
+ status: void 0,
334
+ q: void 0,
335
+ sort: void 0,
336
+ limit: 10
337
+ },
338
+ [10, 20],
339
+ {
340
+ maxConcurrency: 15,
341
+ maxRetries: 2
342
+ }
343
+ );
344
+ expect(result).toEqual({
345
+ kind: "object",
346
+ payload: expect.objectContaining({
347
+ profile_id: "meli-profile-1",
348
+ metrics_by_currency: {
349
+ ARS: { orders: 1, revenue: 150.5, avg_order_value: 150.5 },
350
+ USD: { orders: 1, revenue: 50, avg_order_value: 50 }
351
+ },
352
+ failed_pages: [
353
+ {
354
+ offset: 20,
355
+ limit: 10,
356
+ page_number: 3,
357
+ message: "rate limited",
358
+ status_code: 429,
359
+ attempts: 3,
360
+ retryable: true
361
+ }
362
+ ],
363
+ metadata: expect.objectContaining({
364
+ pagination_source: "service",
365
+ total: 25,
366
+ limit: 10,
367
+ offset: 0,
368
+ returned: 2,
369
+ has_more: true,
370
+ fetch_mode: "orders_chunk",
371
+ pages_per_call_limit: 15,
372
+ pages_requested: 3,
373
+ pages_succeeded: 2,
374
+ pages_failed: 1,
375
+ universe_fully_fetched: false,
376
+ continuation: 'Se recuperaron paginas parciales. Reintentar primero la misma tool con responseMode="orders_chunk", offset=20 y limit=10. Offsets fallidos: 20. Luego continuar con offset=30 si hace falta.'
377
+ })
378
+ })
379
+ });
380
+ });
381
+ it("returns calculation mode by default with stable coverage metadata and aggregate slices", async () => {
382
+ vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
383
+ paging: { total: 3, limit: 2, offset: 0 },
384
+ results: [
385
+ buildOrder(),
386
+ buildOrder({
387
+ id: "2003",
388
+ total_amount: 80,
389
+ paid_amount: 80,
390
+ buyer: { id: 7003, nickname: "buyer-three" },
391
+ payments: [
392
+ {
393
+ id: 5003,
394
+ status: "approved",
395
+ status_detail: "accredited",
396
+ payment_method_id: "master",
397
+ payment_type: "debit_card",
398
+ total_paid_amount: 80,
399
+ transaction_amount: 80,
400
+ installments: 1,
401
+ available_actions: []
402
+ }
403
+ ],
404
+ tags: ["delivered", "order_has_discount"],
405
+ coupon: { amount: 0 }
406
+ })
407
+ ]
408
+ });
409
+ vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({
410
+ successful: [
411
+ {
412
+ id: "2",
413
+ document: {
414
+ results: [
415
+ buildOrder({
416
+ id: "2004",
417
+ status: "cancelled",
418
+ total_amount: 40,
419
+ paid_amount: 0,
420
+ tags: ["not_delivered"],
421
+ payments: [
422
+ {
423
+ id: 5004,
424
+ status: "refunded",
425
+ status_detail: "reversed",
426
+ payment_method_id: "account_money",
427
+ payment_type: "account_money",
428
+ total_paid_amount: 0,
429
+ transaction_amount: 40,
430
+ transaction_amount_refunded: 40,
431
+ shipping_cost: 10,
432
+ coupon_amount: 3,
433
+ installments: 1,
434
+ available_actions: []
435
+ }
436
+ ],
437
+ cancel_detail: {
438
+ group: "shipment",
439
+ code: "lost",
440
+ requested_by: "seller"
441
+ },
442
+ buyer: { id: 7004, nickname: "buyer-four" }
443
+ })
444
+ ]
445
+ }
446
+ }
447
+ ],
448
+ failed: []
449
+ });
450
+ const result = await meliGetOrdersSummaryHandler({
451
+ profileId: "meli-profile-1",
452
+ startDate: "2026-03-01",
453
+ endDate: "2026-03-31",
454
+ responseMode: "calculations"
455
+ });
456
+ expect(searchMercadoLibreOrders).toHaveBeenCalledWith("meli-profile-1", {
457
+ seller: "",
458
+ from: "2026-03-01",
459
+ to: "2026-03-31",
460
+ status: void 0,
461
+ q: void 0,
462
+ sort: void 0,
463
+ offset: 0,
464
+ limit: 50
465
+ });
466
+ expect(result).toEqual({
467
+ kind: "object",
468
+ payload: expect.objectContaining({
469
+ profile_id: "meli-profile-1",
470
+ metadata: {
471
+ total: 3,
472
+ limit: 2,
473
+ offset: 0,
474
+ returned: 3,
475
+ has_more: false,
476
+ continuation: 'Calculos completos. Si el usuario pide detalle de ordenes, invocar la misma tool con responseMode="orders_chunk", offset=0 y limit=50.',
477
+ fetch_mode: "full_calculations",
478
+ pages_requested: 2,
479
+ pages_succeeded: 2,
480
+ pages_failed: 0,
481
+ universe_fully_fetched: true
482
+ },
483
+ metrics_by_currency: {
484
+ ARS: { orders: 3, revenue: 270.5, avg_order_value: 90.17 }
485
+ },
486
+ calculations: expect.objectContaining({
487
+ overview: expect.objectContaining({
488
+ orders_total: 3,
489
+ units_total: 6,
490
+ distinct_items_total: 1,
491
+ distinct_buyers_total: 3,
492
+ fulfilled_orders: 3,
493
+ delivered_orders: 2,
494
+ orders_with_discount: 1
495
+ }),
496
+ financial_by_currency: {
497
+ ARS: expect.objectContaining({
498
+ revenue_total: 270.5,
499
+ paid_amount_total: 225.25,
500
+ avg_order_value: 90.17
501
+ })
502
+ },
503
+ coverage: {
504
+ fetch_mode: "full_calculations",
505
+ universe_fully_fetched: true,
506
+ orders_returned: 3,
507
+ pages_requested: 2,
508
+ pages_succeeded: 2,
509
+ pages_failed: 0,
510
+ failed_pages_count: 0
511
+ },
512
+ refunds_cancellations: expect.objectContaining({
513
+ cancel_group_breakdown: expect.objectContaining({
514
+ entries: [{ key: "shipment", orders: 1, rate: 0.3333 }]
515
+ })
516
+ }),
517
+ shipping_and_discounts: expect.objectContaining({
518
+ by_currency: expect.objectContaining({
519
+ ARS: expect.objectContaining({
520
+ orders_with_shipping_cost: 1,
521
+ orders_with_coupon: 2,
522
+ not_delivered_orders: 1
523
+ })
524
+ })
525
+ })
526
+ })
527
+ })
528
+ });
529
+ expect(result.payload.orders_schema).toBeUndefined();
530
+ expect(result.payload.orders).toBeUndefined();
531
+ });
532
+ it("returns profile selection responses unchanged before hitting services", async () => {
533
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
534
+ ok: false,
535
+ response: { selection_required: true, provider: "mercadolibre" }
536
+ });
537
+ const result = await meliGetOrdersSummaryHandler({
538
+ profileId: void 0,
539
+ startDate: "2026-03-01",
540
+ endDate: "2026-03-31",
541
+ responseMode: "calculations"
542
+ });
543
+ expect(result).toEqual({ selection_required: true, provider: "mercadolibre" });
544
+ expect(searchMercadoLibreOrders).not.toHaveBeenCalled();
545
+ });
546
+ it("formats unexpected service failures through the stable error contract", async () => {
547
+ vi.mocked(searchMercadoLibreOrders).mockRejectedValue(new Error("boom"));
548
+ const result = await meliGetOrdersSummaryHandler({
549
+ profileId: "meli-profile-1",
550
+ startDate: "2026-03-01",
551
+ endDate: "2026-03-31",
552
+ responseMode: "orders_chunk"
553
+ });
554
+ expect(formatMercadoLibreError).toHaveBeenCalledWith(
555
+ expect.any(Error),
556
+ "Failed to fetch MercadoLibre orders summary"
557
+ );
558
+ expect(result).toEqual({
559
+ kind: "error",
560
+ message: "formatted:Failed to fetch MercadoLibre orders summary:boom"
561
+ });
562
+ });
563
+ });
564
+ //# sourceMappingURL=mercadolibre-tool-handlers-monster-batch5.test.js.map